是否可以以root用户身份运行shell命令,只安装了su二进制文件而没有安装SuperSU或Superuser apk?

bri*_*tey 5 android root su

我有一个安装了su二进制文件的Android手机,它可以工作,这意味着我可以将shell加入手机并运行'su'命令,我将成为root用户.

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

Runtime.getRuntime().exec("su -c ps");
Run Code Online (Sandbox Code Playgroud)

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

我尝试在第一部手机上安装apks,但他们似乎什么也没做.所以,正如原始问题所问 - >有没有办法在没有安装SU应用程序的情况下从应用程序内运行提升命令?

cne*_*xus 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.

这就是我发现的工作方式最一致,它也适用于没有安装超级用户或SuperSU的设备,因为这些应用程序只监听应用程序尝试运行命令时发出的广播根.@Boardy SuperSU和超级用户拦截广播,因此在应用程序和root权限之间充当中间人,但对于有根设备它不是必需的.如果您希望更多地控制以root身份运行命令的应用程序,那么这是必要的,但即使这样,它仍然只限制您决定哪些应用程序而不是哪些命令具有root权限.

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

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