我有一个可能很容易解决的问题,但我似乎找不到答案。
我正在尝试在 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。有任何想法吗?
提前非常感谢!