我的针对Android 5.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
(在无根模式下)。
我还尝试在rooted模式下禁用SELinux。测试显示setenforce 0
对Android 5.0没有影响,即在Android 5.0上强制执行SELinux。我可以毫无错误地致电setenforce 0
,但sestatus
仍会显示“SELinux已启用”。
根本原因是什么?
答案 0 :(得分:1)
我在Android L模拟器上做了一些测试,如果你执行/system/bin/am
,它会返回0;如果执行/system/bin/am switch-user 0
,则返回1.
这意味着您执行具有执行am
的权限,但无权在应用中执行命令am switch-user 0
。
答案 1 :(得分:1)
可能是SELinux问题,请尝试“setenforce 0”,但您需要root权限。 同时检查stderr可能有助于http://pastebin.com/BeRYG1Hi
但是,应用程序不能拥有root权限。它只能是一个系统应用程序,但与root不同。