java - 为什么 getRuntime().exec ("/system/bin/am") 总是返回 "Operation not permitted"?

标签 java android linux shell permissions

我的针对 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/

相关文章:

linux - 是否可以从 linux 控制台调用应用程序选择窗口(右键单击->打开方式->其他)?

android - 已删除 gen 文件夹,eclipse 现在不生成它 :(

c# - 如何在 Xamarin/Monogame 中使用 Google Play 排行榜

java - 使用C/C++/Java获取基本硬件信息

java - 类型不匹配 : cannot convert from element type User to Object[]

java - 跳过了 104 帧!应用程序可能在其主线程上做了太多工作

linux - 将目录存储为变量供以后在 linux 脚本中使用

python - 脚本在 IDLE 中返回输出,而不是在 CLI 上执行时

java - spring-data-cassandra 如何实现通用存储库

java - 如何在java中创建新的拨号连接?