1

我基本上想/system/bin/...从 Applicationjava命令启动一个驻留在其中的进程。我尝试了所有类型的Runtime.process.exec()选项也尝试了suouputStream组合,但没有任何东西能够启动应用程序。我在设备和模拟器中使用代码,两者都没有运气。我能够从 ADB Shell 成功运行相同的命令(因为它具有 root 权限)。

该设备已root,当我使用adb调试我的设备时,我可以看到#,它也可以通过adb进入su。根据我的搜索,我发现(在从 adb shell 执行 ps 之后)我能够从应用层运行具有 lrwz--x--x 权限的任何命令,例如 (ls->toolbox, ps->toolbox) 但我我无法执行未链接到工具箱的任何其他命令。

这不执行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");

如果我能在这里得到任何帮助,我将不胜感激!经过大量研究后,我将其发布。

4

2 回答 2

2

ls \n与其发送到su命令的标准输入,不如尝试运行:

su -c ls

要求它以提升的权限运行命令而不是启动交互式 shell的-c选项。su(1)

于 2012-05-03T21:58:51.357 回答
0

尝试创建一个 shell 脚本文件(例如:init.sh)并在其中写入以下命令:

重启

现在尝试通过 Runtime.getRuntime().exec("sh init.sh"); 执行这个 shell 脚本。

如果这重新启动了您的机器人,那么您可以在 init.sh 文件中编写所需的代码并运行它。

于 2012-05-03T07:57:15.317 回答