5

我有一部只安装了 su 二进制文件的 Android 手机,它可以工作,这意味着我可以将 shell 插入手机并运行“su”命令,我将成为 root。

当我尝试通过代码运行命令时,无论我尝试以哪种方式运行它,它似乎都不起作用。我尝试了以下命令的许多不同变体。

Runtime.getRuntime().exec("su -c ps");

当我在另一个安装了 Superuser.apk 或 SuperSU.apk 应用程序的 root 手机上运行此命令时,我收到一个对话框,询问我是否要允许它以 root 权限运行。当 apk 不存在时,它永远不会询问并且命令永远不会起作用。

我尝试在第一部手机上安装 apk,但它们似乎没有做任何事情。所以,正如最初的问题所问的那样——>有没有办法在没有安装 SU 应用程序的情况下从应用程序内运行提升的命令?

4

4 回答 4

6

这可能是因为您需要将命令su作为参数传递给,如下所示:
su -c 'ls -l'
或者您可能需要指定完整路径su,但我不明白为什么它不能按照您的方式工作: Runtime.exec("/system/bin/su -c ps")
或者也许
Runtime.exec("/system/bin/su -c \'ps\'")

尝试检查此命令的输出:System.getenv("PATH")

另一种变体可能是Runtime.exec("su -c \'ls -s \'")
确保您不要忘记转义单引号,因为它们是实际的String.

这就是我发现工作最一致的方式,它也适用于没有安装 Superuser 或 SuperSU 的设备,因为这些应用程序只侦听当应用程序尝试运行命令时发出的广播根。@Boardy SuperSU 和 Superuser 拦截广播,因此充当应用程序和 root 权限之间的中间人,但它对于 root 设备不是必需的。如果您想对以 root 身份运行命令的应用程序有更多的控制权,这是必要的,但即便如此,它仍然只限制您决定哪些应用程序,而不是哪些命令,被赋予 root 权限。

此外,您可能想查看RootTools,更具体地说,该RootTools.isAccessGiven()命令为您的应用程序请求 root 权限。

资料来源:通过 ADB 以 root 身份启动脚本

于 2013-01-20T17:14:41.073 回答
2

并非所有版本的 Android 'su' 都会接受从命令行参数执行的命令。

如果他们不这样做,您将需要让“su”启动一个特权 shell,获取它的输入文件描述符,并将命令输入其中。这已经在 Stackoverflow 上多次介绍过。

于 2013-03-16T22:52:42.550 回答
1

我相信您需要安装 SU 应用程序,因为它们为用户提供了是否应允许该应用程序以 root 身份运行的问题。

于 2013-01-14T12:53:05.393 回答
-3

你应该能够做到这一点。

尝试 :

adb root shell ls -l

于 2014-10-28T19:50:08.193 回答