0

我有一个可能很容易解决的问题,但我似乎找不到答案。

我正在尝试在 Android 设备上运行的不同进程上执行 strace。我通过将 strace 二进制文件复制到 /system/xbin (就像模拟器一样)成功地做到了这一点,并且工作得很好。我的问题是我通过引导加载程序复制了二进制文件,我不希望用户必须通过它。

所以我发现这个很棒的教程可以在应用程序中运行二进制文件:

http://gimite.net/en/index.php?Run%20native%20executable%20in%20Android%20App

我按照教程进行操作:

  • 将 strace 的二进制文件复制到 /data/data/com.mypackage
  • 将执行权限更改为二进制文件(我也尝试过 777)
  • 尝试执行它

    进程进程 = Runtime.getRuntime().exec("/data/data/com.mypackage/strace -p PID -o /sdcard/folder_I_know_it_works");

我知道该命令是正确的,因为当我从 /xbin/system 执行它时,它可以完美运行。当我运行从我的应用程序中复制的那个时,我得到空输出。我只为自己的流程获得正确的输出,所以我知道这是一个权限问题。

当然,我还没有提到我对我的应用程序拥有 root 权限。我还尝试将 strace 二进制文件的所有者更改为 root:root 和 system:system,什么都没有。

总结一下:我需要在从应用程序复制到手机内存的二进制文件上获得与在 /xbin/strace 上找到的二进制文件相同的权限

我究竟做错了什么?

另一个好的解决方案是找到一种方法,将 strace 从具有 root 权限的应用程序中复制到 /system/xbin。有任何想法吗?

提前非常感谢!

4

1 回答 1

1

找到了答案,以防它对其他人有用。

Process process = Runtime.getRuntime().exec("su");
OutputStream os;
os = process.getOutputStream();
os.write("your linux command here".getBytes());
os.close();

您基本上只是简单地将 su 作为一个进程运行并通过其输出流发送命令。

稍后您可能需要调用 process.wait()

于 2012-04-09T18:25:50.517 回答