我基本上想要从Application /system/bin/...
命令启动驻留在java
中的进程。
我尝试了所有类型的Runtime.process.exec()
选项
尝试了su
和ouputStream
组合,但没有任何东西可以启动应用程序。
我在设备和模拟器中使用代码,两者都没有运气。
我能够成功地从ADB Shell运行相同的命令(因为它具有root权限)。
设备已植根,我可以看到#当我使用adb来调试我的设备时,它也可以通过adb进入su。 根据我的搜索,我发现(从adb shell做ps后) 我可以从应用程序层运行任何带有lrwz - x - x权限的命令,例如(ls->工具箱,ps->工具箱),但是我无法执行任何其他未链接到的命令工具箱。
这不会执行ls
:
Process p = Runtime.getRuntime().exec("su");
DataOutputStream os=new DataOutputStream(p.getOutputStream());
os.writeBytes("ls \n");
os.flush();
但这确实会执行ls
:
Process p = Runtime.getRuntime().exec("ls");
如果我能在这方面得到任何帮助,我将非常感激!经过大量研究后,我发布了这篇文章。
答案 0 :(得分:2)
不是将ls \n
发送到su
命令的标准输入,而是尝试运行:
su -c ls
-c
的{{1}}选项要求它运行具有提升权限的命令,而不是启动交互式shell。
答案 1 :(得分:0)
尝试创建一个shell脚本文件(例如:init.sh)并在其中编写以下命令:
苏
重新启动
现在尝试执行此shell脚本 Runtime.getRuntime()。exec(“sh init.sh”);
如果重新启动droid,那么你可以在init.sh文件中编写所需的代码。跑吧。