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

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

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

public static final String FACTORY_TEST

自:API级别1

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

这是最好的方式吗?

如果无法使用SDK,我如何使“根”应用程序工作?

  • 缺少蓝牙权限 - 但我的应用程序不使用它
  • adb shell的BroadcastReceiver权限
  • Android:通过AOSP源代码创建新的系统权限。
  • 以编程方式从android中的manifest.xml检索权限
  • 从SD卡读取数据的权限
  • 如何为libusb android应用程序提供/ dev / bus / usb权限?
  • Android 6.0权限.GET_ACCOUNTS
  • 如何检查目录路径的权限,并不会导致EACCES错误?
  • 你需要做的是:

     Process root = Runtime.getRuntime().exec("su"); 

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

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

     Process process = Runtime.getRuntime().exec("su"); 

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

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

    -c选项

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

    替代选项

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

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