我的针对 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)
{}
上面最简单的代码总是返回 1 of proc.exitValue
,这意味着Operation not permitted。
但是,我通过adb shell
检查了/system/bin/am switch-user 0
的权限,显示如下:
shell@hammerhead:/system/bin $ ll am
ll am
-rwxr-xr-x root shell 210 2015-03-23 15:10 am
显然,权限表明任何用户都可以执行am
。
更奇怪的是:我可以从adb shell
(在无根模式下)成功调用am
。
我还尝试在 root 模式下禁用 SELinux。测试表明setenforce 0
对Android 5.0没有影响,即SELinux在Android 5.0上强制执行。我可以毫无错误地调用 setenforce 0
,但是 sestatus
仍然显示“SELinux Enabled”。
根本原因是什么?
最佳答案
我在Android L模拟器上做了一些测试,如果你执行/system/bin/am
,它返回0;如果你执行 /system/bin/am switch-user 0
,它返回 1。
这意味着你确实有执行am
的权限,但是没有权限执行命令am switch-user 0
应用程序。
关于java - 为什么 getRuntime().exec ("/system/bin/am") 总是返回 "Operation not permitted"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29509826/