在Android应用程序上执行基于Root访问的命令

时间:2012-05-03 00:17:43

标签: android c adb

我基本上想要从Application /system/bin/...命令启动驻留在java中的进程。 我尝试了所有类型的Runtime.process.exec()选项 尝试了suouputStream组合,但没有任何东西可以启动应用程序。 我在设备和模拟器中使用代码,两者都没有运气。 我能够成功地从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");

如果我能在这方面得到任何帮助,我将非常感激!经过大量研究后,我发布了这篇文章。

2 个答案:

答案 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文件中编写所需的代码。跑吧。