2013-07-18 48 views
1

我寫了下面的代碼,不能完全弄清楚如何解決這個錯誤。不知道這些信息是否有用,但我使用Mac並使用編輯器IntelliJ。如何通過Java文件運行adb命令?

public class TestCode { 
    public static void main(String[] args) throws Exception { 
     Runtime runtime = Runtime.getRuntime(); 
     Process process = runtime.exec("adb devices"); 
    } 
} 

結果是主要的‘產生java.io.IOException:不能運行程序「‘在線程異常’亞行’:錯誤= 2,沒有這樣的文件或目錄」

然而,當我運行命令「adb設備」從終端我得到連接到我的電腦的設備列表。

對於那些有興趣的人,以下是完整的堆棧跟蹤。

Exception in thread "main" java.io.IOException: Cannot run program "adb": error=2, No such file or directory 
    at java.lang.ProcessBuilder.processException(ProcessBuilder.java:478) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:457) 
    at java.lang.Runtime.exec(Runtime.java:593) 
    at java.lang.Runtime.exec(Runtime.java:431) 
    at java.lang.Runtime.exec(Runtime.java:328) 
    at com.sonos.acr.test.TestCode.main(TestCode.java:6) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 
Caused by: java.io.IOException: error=2, No such file or directory 
    at java.lang.UNIXProcess.forkAndExec(Native Method) 
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:53) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:91) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:452) 
    ... 9 more 

預先感謝您的建議,建議和/或幫助。

回答

5

您需要使用exec(String[] cmdarray)函數發送參數,函數的單參數版本將空格中的字符串拆分,並且如果路徑包含空格,則會造成麻煩。

您還需要指定完整路徑(可能是/ usr/bin/adb?)。

像這樣:

​​
+0

我試圖讓你建議的修改,並且還添加了完整路徑,亞行,這在我的機器上是:/應用/ Android的\ SDK /平臺工具/,遺憾的是,同樣的錯誤仍然存​​在。 –

+1

@JustinPapez「Android SDK」是否在其名稱中包含空格,或者它僅僅是評論中的拼寫錯誤?嘗試將命令複製到您選擇的directoy到沒有空格的路徑以檢查是否仍然存在相同的錯誤 –

+0

我在我的Linux機器上測試了這個,並且以下工作適合我: Runtime.getRuntime()。exec( new String [] {「/ tmp/space dir/ls」,「-l」}); 請注意,我不會轉義目錄名稱中的空格。 –

相關問題