如何通过Android SDK获得root权限?

Rob*_*Rob 23 permissions sdk android manifest root

我正在学习Android编程,我想创建一个必须以root身份运行的应用程序.合乎逻辑的是在Android Manifest中添加root权限.

我在文档中看到了这个链接,特别注意到FACTORY_TEST权限:

public static final String FACTORY_TEST

自:API级别1

作为制造商测试应用程序运行,以root用户身份运行.仅在设备以制造商测试模式运行时可用.常量值:"android.permission.FACTORY_TEST"

这是最好的方式吗?

如果无法使用SDK,我该如何使"root"应用程序工作?

Moh*_*nde 30

你需要做的是:

Process root = Runtime.getRuntime().exec("su");
Run Code Online (Sandbox Code Playgroud)

这会导致SuperUser显示,这允许您从root访问权限允许或阻止它.如果用户未植根,则此方法可能不起作用.是一种可以测试它的方法.

  • 这不会使应用程序本身以root身份运行.在支持它的系统上,这样做允许应用程序在以root身份运行的新进程中启动帮助程序.此外,上面显示的代码几乎没有任何结果,因为没有启动工作进程.所有可能做的就是显示其中一个suck的用户确认对话框,并且可以缓存用户的选择,以便不再询问是否进行了另一次su调用.但是还没有任何东西以root身份运行. (24认同)
  • 好极了!谢谢莫希特. (2认同)
  • @Mohit:您发布的[link](http://www.stealthcopter.com/blog/2010/01/android-requesting-root-access-in-your-app/)不会在所有情况下都有效.检查"255"并非万无一失.最好做一些像`isRooted =(p.exitValue()!= 0)的东西?false:true;`. (2认同)

Ani*_*kur 14

首先让我们正确掌握基础知识.Android在下面运行Linux内核.现在,如果你必须以超级用户权限运行你的进程(以root身份运行),唯一的方法就是执行你的进程,command line因为这是你可以直接与内核交互的唯一方法.您还需要su在运行任何命令之前使用.正如克里斯在他对第一个答案的评论中提到的那样

Process process = Runtime.getRuntime().exec("su");
Run Code Online (Sandbox Code Playgroud)

几乎没有任何成就.它只会使用对话框询问超级使用权限.您可以做的不是执行,su而是可以使用su执行您的流程,如下所示

Process process = Runtime.getRuntime().exec(new String[] { "su", "-c", yourCommand});
Run Code Online (Sandbox Code Playgroud)

-c选项

其中最常用的几个选项是-c,它告诉我们su to execute the command that directly follows it on the same line.这样的命令作为新用户执行,然后运行su的终端窗口或控制台在命令完成执行后或在其启动的任何程序关闭后立即返回到前用户的帐户.(更多细节)

替代选项

替代上述方法可能有用的另一种方法是使用命令行将app复制到/system/app/目录.然后您的应用程序将以root权限自动运行(与系统应用程序相同)

  • 不,/ system/app**中的应用程序也不以root**身份运行.他们可能能够获得更多Android级权限,但仍然不是root权限. (7认同)
  • @flicflac 我认为使用系统证书签名仍然不会使您的应用程序以 root 身份运行。它只会为您提供更多权限(Android 级别)。还是我错了?谢谢! (2认同)

Rom*_*Guy 9

SDK不提供以root身份运行应用程序的方法.

  • 好的,谷歌先生:)我应该重新提出我的问题"如何让应用程序以root身份运行?" (18认同)