2013-09-29 69 views
1

我想有一個應用程序(服務)在後臺運行,在定時器上運行procrank &將輸出寫入SD卡上的文件。基本上我想執行「/ system/xbin/procrank> /sdcard/procrank.txt」。在等待期間,我會對該文件進行一些[最小化]處理,以便在下次運行時覆蓋它。在Android上,無法從java應用程序運行procrank

這是在測試手機上,所以它可以被視爲「紮根」。我嘗試了很多不同的方式來運行命令而沒有成功。

當我使用這個:

 String[] cmd = { "/system/xbin/procrank > /sdcard/procrank_result.txt" }; 
     Process process = new ProcessBuilder() 
     .command(cmd) 
     .redirectErrorStream(true) 
     .start(); 
      BufferedReader in = new BufferedReader(
        new InputStreamReader(process.getInputStream())); 
      String line = ""; 
      while ((line = in.readLine()) != null) { 
       Log.i(Constants.TAG, "Line=" + line); 
      } 
     process.waitFor(); 

我得到一個IOException:

09-28 02:48:16.307: W/System.err(9579): java.io.IOException: Error running exec(). Command: [/system/xbin/procrank > /sdcard/procrank_result.txt] Working Directory: null Environment: [ANDROID_ROOT=/system, EMULATED_STORAGE_SOURCE=/mnt/shell/emulated, LOOP_MOUNTPOINT=/mnt/obb, ... 

所以我想我只會發出命令和讀取輸出:

 String[] cmd = { "/system/xbin/procrank" }; 
     Process process = new ProcessBuilder() 
     .command(cmd) 
     .redirectErrorStream(true) 
     .start(); 
      BufferedReader in = new BufferedReader(
        new InputStreamReader(process.getInputStream())); 
      String line = ""; 
      while ((line = in.readLine()) != null) { 
       Log.i(Constants.TAG, "Line=" + line); 
      } 
     process.waitFor(); 

但我從procrank得到一個我不明白的錯誤:

Line=Error creating kernel interface -- does this kernel have pagemap? 

任何人都可以幫助我嗎?

此外,我嘗試了很多不同的方法來發出命令,所以使用getRuntime()。exec過程的另一種變體可能不會工作,除非它與StackOverflow上的許多其他解決方案不同。

是的,我的SD卡是可寫的,/ SD卡相當於。我可以從adb shell發出命令並創建該文件。

如果試圖通過套接字連接到本地主機,然後發出命令,我會有更多的運氣嗎?

回答

0

這似乎是在手機上構建的問題,也可能是其他問題。

我不知道如何關閉這個問題。我可以關閉它嗎?

+0

我也收到此錯誤,但是當你用它通過PC的控制檯,它工作正常... –

0

太老了一個問題,但如果有人遇到這個問題:我也碰到這個問題。執行以下操作,解決了這個問題對我來說:

ADB等待換設備的根

ADB等待換設備重新安裝

亞行外殼procrank

相關問題