2017-01-23 168 views
-1

我試圖以編程方式在Android設備上執行一些shell命令。我能夠運行一些命令但未能運行所有命令。舉個例子,我能夠運行以下命令:在Android Studio的ADB Shell中執行命令

executeCommandLine(「ls」) 
executeCommandLine(「netstat –atun」) 

,但現在我需要運行未正確執行以下命令:

$ adb push netstat3 /data/local/tmp/ 
$ adb shell 
$ chmod 755 /data/local/tmp/netstat3 
$ /data/local/tmp/netstat3 

我寫信給執行上述功能Android中提到的命令。該函數爲我提供了像「ls」和「netstat -atun」這樣的命令的正確輸出,但是不會爲下一個命令提供正確的響應。我executeCommandLine功能如下:

public String executeCommandLine(String commandLine) { 
    try { 
    Process process; 
    process = Runtime.getRuntime().exec(commandLine); 

    BufferedReader reader = new BufferedReader(
       new InputStreamReader(process.getInputStream())); 
    String read; 
    StringBuilder output=new StringBuilder(); 
    while ((read = reader.readLine())!=null){ 
     output.append(read); 
     output.append("\n"); 
     Log.d("executed command ", output.toString()); 
    } 
    reader.close(); 
    process.waitFor(); 
    return output.toString(); 
    } catch (IOException e) { 
    throw new RuntimeException(e); 
    } catch (InterruptedException e) { 
    throw new RuntimeException(e); 
    } 
} 

我想知道我可以爲我的所有命令的響應。

+0

如果我沒有錯,你的意思是說你想在你的應用程序中的Android手機上以編程方式執行這些命令? –

+0

是的,我想在我的應用程序中的Android手機上以編程方式執行。 – Bouba

+0

你正試圖在應用程序內運行'adb push'? –

回答

1

正如你可以閱讀there

的Android調試橋(ADB)是一種多用途的命令行工具,可以讓你有一個模擬器實例或連接Android設備

您嘗試執行通信adb在Android設備上的命令,這是沒有意義的,因爲adb是在計算機上運行的命令行實用程序,在Android設備上沒有adb

+0

_「在Android設備上沒有adb」_不太正確。以特定操作系統版本或根據製造商'adb'二進制文件開始的以太網已經在'system/bin'下發布。 _「你正試圖在Android設備上執行adb命令,這是沒有意義的_ _在大多數情況下,它不會,除非你知道你在做什麼...... @Bouba [This answer](http:///stackoverflow.com/questions/34104119/why-does-exec-start-a-adb-daemon/34112381#34112381)可能會給你進一步的澄清,除了當前的答案。 – Onik

+0

從他們的特定版本的Android的任何鏈接,他們開始運輸它與adb?我不明白它是如何有用的。 – Divers

+0

當然!鏈接在我提供的答案中(即,[這一個](http://www.slideshare.net/tetsu.koba/adbandroid-debug-bridge-how-it-works))。有關於如何使用的解釋(從幻燈片36開始)。 – Onik