【发布时间】:2015-08-17 00:38:09
【问题描述】:
我正在尝试构建一个 android 应用程序,该应用程序可以访问 /data 目录(例如),而无需解析执行 su 后在 shell 上运行的命令的输出。
我的意思是,经过大量研究,并且还查看了一些 root 浏览器的代码,他们在需要 root 权限时所做的就是在执行 su 后解析命令的输出。
我想要的是做类似的事情:
File file = new File("/data");
File[] files = file.listFiles();// get the list array of file
for (int i = 0; i < files.length; i++) {
File fileItem = files[i];
System.out.println("FILE NAME: "+fileItem.getName().toString()) {
}
为了实现这一点,我认为应用程序进程必须从执行开始就以 root 身份运行。
以这种方式执行 su 后,我尝试从 shell 运行 APP:
$su
#am start -n com.example.test/.ui.Activity
但是在查看 ps 命令的输出后,我看到应用程序是以用户“u0_a110”而不是 root 身份运行的。
我还尝试了参数--user 0 和--user 1000,结果相同...我认为dalvik虚拟机从父进程中删除了权限。
我还尝试将应用程序转换为系统应用程序,将其移动到 /system/priv-app 并获得相同的结果,(该应用程序的运行用户不是 root 也不是系统)
可能与:
android:sharedUserId="android.uid.system"
在清单中,应用程序至少作为用户系统运行,我尝试以这种方式运行应用程序,并且还放置在 /system/priv-app 中,但手机没有完成启动。
我认为该错误是因为该应用需要使用制造商提供的系统密钥进行签名。
是否可以以 root 或至少 system 身份运行某些 android 应用程序?
我知道,如果我为 ARM(或手机架构)交叉编译一个 linux 应用程序并在 shell 中以 root 身份运行该应用程序,该应用程序将具有 root 访问权限,但是,这是唯一的方法吗?我想用一个 android java 应用程序来实现。
【问题讨论】: