以root权限运行安卓程序

9

我可以把我的程序作为root用户运行吗?我知道如何运行命令行本地实用工具,但是如何以root用户身份运行Java程序?


请看这个链接:https://dev59.com/I2435IYBdhLWcg3wpx2x - Romain Piel
我在这里为你找到了一个库,请看一下: https://code.google.com/p/roottools/wiki/Usage@RomainPiel 免费使用。 - gumuruh
1个回答

13

以下代码适用于你的情况:

try {
    Process process = Runtime.getRuntime().exec("su");
    process.waitFor();
} catch (IOException e) {
    e.printStackTrace();
} catch (InterruptedException e) {
    e.printStackTrace();
}

你可以使用以下命令:

exec(new String[] { "su", "-c", COMMAND });

祝好,Tim


2
是的,我知道。但是如何以root权限运行非命令行的Android Java应用程序? - artem
10
你做不到。要以root身份运行,你必须使用命令行,因为这是直接与Linux内核交互的唯一方式。但你可以使用命令行将应用程序复制到/system/app/目录中,然后你就拥有系统应用程序的相同权限。另外,请查看RootTools(http://code.google.com/p/roottools/)。它非常有助于运行root。 - Reed
1
刚刚测试了一下/system/app的理论,但对我来说并没有起作用。有人能确认它是否有效吗? - CatShoes
1
@Jakar:没问题:http://stackoverflow.com/questions/25799038/failed-running-an-app-as-root - Luis A. Florit
1
单个字符串无法工作,因为您的Runtime对象不是shell,也不会解析该行。它将看到整个字符串作为命令,没有任何参数。运行'su'不会更改API,因为'su'命令是子进程。内核授予'su' root,因为它已设置setuid位并由root拥有。因此,su是根用户,其子级(您传递的行)将被拥有并作为该用户运行。父级(您的Android应用程序)不会因运行其他应用程序而改变。那将是一个可怕的安全问题。没有简单的“获取root”API可以使运营商满意。 - Evan Langlois
显示剩余14条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接