【问题标题】:How can I get root permissions through the Android SDK?如何通过 Android SDK 获得 root 权限?
【发布时间】:2011-03-14 00:45:00
【问题描述】:

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

我在文档中看到了this link,特别注明了the FACTORY_TEST permission

public static final String FACTORY_TEST

自:API 级别 1

作为制造商测试运行 应用程序,以 root 用户身份运行。 仅当设备处于 在制造商测试模式下运行。 常数值: "android.permission.FACTORY_TEST"

这是最好的方法吗?

如果无法使用 SDK,我怎样才能使“根”应用程序工作?

【问题讨论】:

  • 请注意,虽然这个被点赞的问题有很多点赞的答案,但这个答案是错误且无用的,而且它不准确地暗示的机制本身早已被删除。它一无所获,源于对 Android 所依赖的 Linux 内核和 Unix 安全和进程模型的根本误解。

标签: android sdk permissions manifest root


【解决方案1】:

你需要做的是这样的:

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

这会导致 SuperUser 显示,这让您可以允许或阻止它的 root 访问。如果用户没有root,这种方法可能不起作用。 Here 是您可以测试它的一种方式。

【讨论】:

  • 这不会使应用程序本身以 root 身份运行。在支持它的系统上,它的作用是允许应用程序在以 root 身份运行的新进程中启动帮助程序。此外,上面显示的代码几乎什么也没做,因为没有启动任何工作进程。这可能会显示其中一个 su hack 的用户确认对话框,并可能缓存用户的选择,这样如果再次调用 su,就不会再次询问他们。但是还没有以 root 身份运行。
  • 同意 Chris 上面的评论 - 您需要一个工作进程来运行并从该进程中获取结果以确定您是否具有 root 权限。
  • @Mohit:您发布的link 并非在所有情况下都有效。检查255 并非万无一失。最好做isRooted = (p.exitValue() != 0) ? false : true;之类的事情。
【解决方案2】:

首先让我们掌握基本知识。 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 的终端窗口或控制台在命令执行完成或已启动的任何程序已关闭后立即返回到以前用户的帐户。(@ 987654321@)

备用选项

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

【讨论】:

  • 不,/system/app 中的应用程序也不能以 root 身份运行。他们或许能够获得更多 Android 级别的权限,但仍然不是 root。
  • 为了通过root,您必须使用系统证书签名。正如 Chris 所说,将应用程序放在 /system/app 或运行“su”等变通方法不会让您的应用程序以 root 身份运行。
  • @flicflac 我认为使用系统证书签名仍然不会使您的应用程序以 root 身份运行。它只会为您提供更多权限(Android 级别)。还是我错了?谢谢!
【解决方案3】:

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

【讨论】:

  • 好的,Google 先生 :) 我应该重新表述我的问题“如何让应用程序以 root 身份运行?”
  • @Rob - 你不能。大多数辅助进程可以以 root 身份运行,而不是应用程序本身。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 2022-08-16
  • 2012-05-30
  • 2013-05-29
  • 2011-06-21
相关资源
最近更新 更多