作者changyuheng (张昱珩)
看板AndroidDev
标题Re: [问题] 在app里面执行root
时间Mon Sep 16 22:59:36 2013
adb shell 是 root 身分和一般所指的手机 root 了不一样
adb shell 的 root 身分是 adbd 给的,
但是 app 不是透过 adb -> adb server -> adbd 来拿到 root 身分,
而是直接走 su
应该检查一下 su 的权限设定是否正确
问题可能是
1. su 没有 switch user 的权限
2. su 的 owner 不是 root
3. other 不能执行 su
简易验证 su 是否可用:
# su 2000
// 由 root 切成 shell 身分
$ su 0
// 此时检查是否成功切换成 root 身分
su 其实也没有做很复杂的事,
可以写个小程式,
透过给予不同的权限和拥有者,
来了解如何能切换身分。
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main() {
if (!setuid(0)) {
printf("succeeded\n");
} else {
printf("failed\n");
}
}
不确定 Runtime.exec() 会不会帮忙切参数
"sh /cache/hello.sh" 是给予 -c 的一个参数
虽然 su 可能会处理好
但还是清楚一点比较好
hello.sh 内如果有 shebang
不需要再透过 sh 呼叫
shebang 是 loader 处理的且由 OS 实现
不能用 AOSP 提供的 su
那只能给 root 和 shell 身分的使用者使用
※ 引述《Leeng (Leeng)》之铭言:
: 环境如下:
: 我手上的Android是工程build,有root,没有SuperUser之类的管理app
: 在adb shell底下不用打su也能执行root权限
: 打adb root会出现 adbd is already running as root
: 我想做这件事:
: su -c sh /cache/hello.sh //在adb shell底下打没问题
: 但在写app时调用:
: Process p = Runtime.getRuntime().exec("su -c sh /cache/hello.sh");
: 却不会执行(但没有exception)
: 上网查不到相关资讯,有人能解答吗?谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.141.124.40
※ 编辑: changyuheng 来自: 60.251.223.31 (09/17 10:25)
1F:推 Leeng:清楚多了 谢谢!! 09/17 22:52