如何通过Android SDK获得root权限?
我正在学习Android编程,我想制作一个必须以root身份运行的应用程序。合乎逻辑的是在Android Manifest中添加一个root权限。如何通过Android SDK获得root权限?
我的文档中看到this link,尤其是注意到the FACTORY_TEST
permission:
public static final String FACTORY_TEST
自:API级别1
运行作为一个工厂测试 程序,运行根用户。 仅当在制造商测试模式下运行的设备为 时才可用。 恒值: “android.permission.FACTORY_TEST”
是,最好的方法是什么?
如果无法使用SDK,我该如何让“root”应用程序工作?
你需要做的是一样的东西:
Process root = Runtime.getRuntime().exec("su");
这会导致超级用户才能显示,它可以让你允许或从根目录访问阻断它。如果用户没有根,这种方法可能无法正常工作。 Here是一种可以测试的方法。
太棒了!谢谢Mohit。 – Rob 2011-03-14 01:14:53
这不会使应用程序本身以root身份运行。它在支持它的系统上做了什么,它允许应用程序在以root身份运行的新进程中启动帮助程序。此外,上面显示的代码几乎完成,因为没有工作进程启动。这可能会做的只是显示其中一个su hack的用户确认对话框,并且可能会缓存用户的选择,以便不会再询问是否再次调用su。但是没有任何东西可以作为root运行。 – 2012-12-28 15:51:50
同意上面的Chris的评论 - 你需要一个工作进程来运行,并从这个过程中得到结果,以确定你是否拥有root权限。 – ChuongPham 2013-02-03 17:36:20
SDK不提供以root身份运行应用程序的方法。
好的,Google先生:)我应该重新说明我的问题“我如何让应用程序以root身份运行?” – Rob 2011-03-14 01:12:48
@Rob - 你不能。至多助手进程可以作为root运行,而不是应用程序本身。 – 2016-05-28 19:21:30
首先让我们了解基础知识。 Android在底下运行Linux内核。现在,如果您必须以超级用户权限运行您的进程(以root身份运行),唯一的方法是通过command line
来执行您的进程,因为它是直接与内核进行交互的唯一方式。在运行任何命令之前,您还需要使用su
。也正如克里斯在他的评论中提到的第一个答案
Process process = Runtime.getRuntime().exec("su");
几乎什么都不会做。它只会要求使用对话框的超级使用权限。你可以做的是不是仅仅执行su
你可以用苏执行你的流程如下
Process process = Runtime.getRuntime().exec(new String[] { "su", "-c", yourCommand});
-c选项
其中最常用的苏的几个选项是-c,这告诉su to execute the command that directly follows it on the same line
。这样的命令作为新用户执行,然后在命令执行完成后或者任何启动的程序关闭后,运行su的终端窗口或控制台立即返回到前一个用户的帐户。(More details )
备用选项
替代上述方法彼此的方式,可能工作是使用命令行应用程序复制你/system/app/
目录。然后你的应用程序将以root权限自动运行(与系统应用程序相同)(More on Android partitions)
不,系统/应用程序**中的应用程序不能以超级用户身份**运行。他们可能能够获得更多Android级别的权限,但仍然不是root用户。 – 2014-05-20 15:13:05
为了以root身份登录,您必须使用系统证书签名。就像Chris说的那样,将应用程序放入/ system/app或运行“su”的解决方法不会让您的应用程序以root身份运行。 – flicflac 2014-10-03 08:00:10
@flicflac我认为使用系统证书签名仍然不会让您的应用以root身份运行。它只会给你更多权限(Android级别)。或者我错了?谢谢! – sjkm 2016-11-17 10:35:37
请注意,虽然这个upvoted问题有很多upvotes的答案,但**答案是错误的和无用的**,它不准确地暗示的机制本身已经被删除了。它没有任何成就,并且源于对Linux内核和Unix安全性以及Android所依赖的流程模型的根本误解。 – 2016-05-28 19:23:06