我针对Android5.0的Android应用程序包含如下代码:
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("/system/bin/am switch-user 0");
proc.waitFor();
proc.destroy();
}
catch (Exception e)
{}上面最简单的代码总是返回proc.exitValue的1,这意味着操作不允许。
但是,我通过/system/bin/am switch-user 0检查了adb shell的权限,显示如下:
shell@hammerhead:/system/bin $ ll am
ll am
-rwxr-xr-x root shell 210 2015-03-23 15:10 am显然,权限指示任何用户都可以执行am。
更奇怪的是:我可以从am (在非根模式下)成功地调用adb shell。
我还试图在根模式下禁用SELinux。测试表明,setenforce 0对Android5.0没有影响,也就是说,SELinux在Android5.0上是强制的。我可以在没有错误的情况下调用setenforce 0,但是sestatus仍然显示“启用了SELinux”。
根本原因是什么?
发布于 2015-04-08 09:12:56
我在Android模拟器上做了一些测试,如果执行/system/bin/am,它返回0;如果执行/system/bin/am switch-user 0,它返回1。
这意味着您确实拥有执行am的权限,但没有在app中执行命令am switch-user 0的权限。
发布于 2015-04-08 09:17:23
可能是SELinux问题,请尝试"setenforce 0“,但您需要根权限。另外,检查stderr可能有助于http://pastebin.com/BeRYG1Hi。
然而,应用程序不能拥有根权限。它只能是一个系统应用程序,但与root不一样。
https://stackoverflow.com/questions/29509826
复制相似问题