首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么getRuntime().exec("/system/bin/am")总是返回“不允许的操作”?

为什么getRuntime().exec("/system/bin/am")总是返回“不允许的操作”?
EN

Stack Overflow用户
提问于 2015-04-08 08:39:26
回答 2查看 1.2K关注 0票数 1

我针对Android5.0的Android应用程序包含如下代码:

代码语言:javascript
复制
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的权限,显示如下:

代码语言:javascript
复制
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”。

根本原因是什么?

EN

回答 2

Stack Overflow用户

发布于 2015-04-08 09:12:56

我在Android模拟器上做了一些测试,如果执行/system/bin/am,它返回0;如果执行/system/bin/am switch-user 0,它返回1。

这意味着您确实拥有执行am的权限,但没有在app中执行命令am switch-user 0的权限。

票数 1
EN

Stack Overflow用户

发布于 2015-04-08 09:17:23

可能是SELinux问题,请尝试"setenforce 0“,但您需要根权限。另外,检查stderr可能有助于http://pastebin.com/BeRYG1Hi

然而,应用程序不能拥有根权限。它只能是一个系统应用程序,但与root不一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29509826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档