【发布时间】:2015-11-20 09:59:37
【问题描述】:
我想在 Android 设备上运行一些需要 root 权限的命令。这些命令应该使用 java 代码执行,因此应用程序本身应该能够运行这些命令,而无需将设备连接到 pc 并使用 shell 运行命令。
我使用了su,然后使用了我想要运行的命令(chmod 666)。 chmod 666 需要root 设备才能正常运行,所以我先尝试使用su 获得超级用户权限,然后尝试运行它。我将 java 代码放在 onCreate 方法中。这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] cmds = {"cd /dev/input" ,"chmod 666"};
try {
Process p = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
for (String tmpCmd : cmds) {
os.writeBytes(tmpCmd + "\n");
}
os.writeBytes("exit\n");
os.flush();
}
catch (IOException e){
e.printStackTrace();
}
setContentView(R.layout.activity_main__interface);
}
但是,在运行此应用程序时出现此错误:
11-20 12:32:14.120 3265-3265/com.project.android.test E/cutils﹕ to chown(/mnt/shell/emulated/0, 0, 0)
11-20 12:32:14.120 3265-3265/com.project.android.test E/cutils﹕ to chown(/mnt/shell/emulated/obb, 0, 0)
11-20 12:32:14.120 3265-3265/com.project.android.test E/cutils﹕ to chown(/storage/emulated/0/Android, 0, 0)
11-20 12:32:14.120 3265-3265/com.project.android.test E/cutils﹕ to chown(/storage/emulated/0/Android/obb, 0, 0)
11-20 12:32:14.346 3265-3265/com.project.android.test E/linker﹕ load_library(linker.cpp:761): library "libmaliinstr.so" not found
11-20 12:32:14.348 3265-3265/com.project.android.test E/﹕ appName=com.project.android.test, acAppName=com.android.cts.openglperf
11-20 12:32:14.348 3265-3265/com.project.android.test E/﹕ 0
11-20 12:32:14.348 3265-3265/com.project.android.test E/﹕ appName=com.project.android.test, acAppName=com.android.browser
11-20 12:32:14.348 3265-3265/com.project.android.test E/﹕ 0
我尝试搜索chown,发现它与更改文件的所有权有关,如here所述,
http://www.cyberciti.biz/faq/how-to-use-chmod-and-chown-command/
我认为这是由于尝试运行 su 造成的。我已经删除了命令数组,只保留了 su,并再次运行了应用程序,但我再次遇到了与 chown 相关的错误。所以,我认为运行su 有问题,但我想不通。
当我在 SO 上搜索如何运行 su 时,我发现我使用的方法与我使用的方法相同,它依赖于 getRunTime.exec。
我曾经读到su 需要一个有根设备才能正常运行,但我不确定这一点,因为我只在少数资源中看到过,对吗?
谁能告诉我代码中有什么问题以及如何解决?
感谢任何帮助。
编辑:我提供的错误日志的一行内容如下,"load_library(linker.cpp:761): library "libmaliinstr.so" not found"
我搜索了一下,发现有些手机像华为一样错过了这个库。我的设备是华为,所以它会导致这里提到的库相关错误:
Library "libmaliinstr.so" not found
但是我读到这个库不影响应用的运行,但是会影响su吗?
【问题讨论】:
标签: java android linux root chmod