我有一个安装了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应用程序的情况下从应用程序内运行提升命令?
这可能是因为您需要将命令传递给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权限.
| 归档时间: |
|
| 查看次数: |
20832 次 |
| 最近记录: |