我正在尝试从 android 应用程序执行 PID 的 strace 命令。代码段如下:
Runtime.getRuntime().exec("strace -p 20436 -o /mnt/sdcard/sampleTrace11.txt");
文件sampleTrace11.txt已创建但为空。当我从 shell 命令提示符执行相同的命令时,文件会写入数据。谁能帮帮我吗..
我希望它与权限相关。一个好方法是使用run-as
from adb shell
。例如,假设您的应用程序是com.srooth.fancyapp
,请执行以下操作:
adb shell run-as com.srooth.fancyapp strace -p 20436 -o /mnt/sdcard/sampleTrace11.txt
如果这不起作用,您知道这与 的权限有关com.srooth.fancyapp
,并且您可以期望在从 Java 中运行时获得相同的结果。
一些可能的权限问题:
您的应用无权写入 SD 卡。此功能将由以您的用户身份运行的所有其他应用程序继承,因此确保您AndroidManifest.xml
指定权限很重要:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
如果有问题的进程不是您的应用程序的一部分,它将以不同的用户身份运行。因此,您的应用程序将无权检查它。对此您无能为力,除了使用有根电话并添加su -c
到命令行之前。
其他几个想法:
Runtime.getRuntime().exec()
尝试使用ProcessBuilder
类,而不是 using 。这将使您能够做各种有用的事情: