我试图从Android应用程序中优化strace命令的PID。代码段如下:来自Android应用程序的Strace命令写入空文件
Runtime.getRuntime().exec("strace -p 20436 -o /mnt/sdcard/sampleTrace11.txt");
文件sampleTrace11.txt被创建,但它是空的。当我从shell命令提示符执行相同的命令时,文件被写入数据。任何人都可以请帮我..
我试图从Android应用程序中优化strace命令的PID。代码段如下:来自Android应用程序的Strace命令写入空文件
Runtime.getRuntime().exec("strace -p 20436 -o /mnt/sdcard/sampleTrace11.txt");
文件sampleTrace11.txt被创建,但它是空的。当我从shell命令提示符执行相同的命令时,文件被写入数据。任何人都可以请帮我..
我期望它的权限相关。一个好方法是从adb shell
使用run-as
。例如,假设您的应用程序是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
类。直到进程完成
感谢您回复Adrian ...似乎它与您指出的内容有关...它对主应用程序的processId(写代码的应用程序)工作正常。但是,当它试图strace任何其他应用程序,问题出现......我正在使用模拟器,它的根源..我尝试与su -c选项也,但不工作:( – srooth 2013-02-12 20:12:14
你测试过'strace'的完整路径吗? – 2013-02-10 16:58:13
@sputnick如果'strace'没有启动,它不会创建一个空文件(请注意,使用'-o'选项,而不是输出重定向或类似的东西) – 2013-02-10 17:19:48
你能告诉我该怎么做吗? – srooth 2013-02-10 17:35:13