我試圖從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