2013-07-18 4 views
1

Я написал следующий код и не могу понять, как решить эту ошибку. Не уверен, что эта информация окажется полезной, но я использую Mac и использую редактор IntelliJ.Как запустить команду adb через файл Java?

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

В результате «Исключение в потоке„основного“java.io.IOException: Не могу запустить программу„ADB“: ошибка = 2, Нет такого файла или каталога»

Однако, когда я бегу команда «adb devicees» из терминала. Я получаю список устройств, подключенных к моему компьютеру.

Для интересующихся, это полная трассировка стека.

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?).

Как это:

Process process = runtime.exec(new String[] {"/usr/bin/adb", "devices"}); 
+0

Я попытался сделать изменения, предложенные, а также добавлен полный путь к ADB, который на моей машине:/Applications/Android \ SDK/платформенные инструменты /, к сожалению, , эта же ошибка сохраняется. –

+1

@JustinPapez «Android SDK» содержит пробел в своем имени или это просто опечатка в вашем комментарии? Попробуйте скопировать команду в путь по пути к пробелу без пробелов, чтобы проверить, не сохраняется ли такая же ошибка. –

+0

Я протестировал это в своем Linux-окне, и следующее работает отлично для меня: Runtime.getRuntime(). Exec (new String [] {"/ tmp/space dir/ls", "-l"}); Обратите внимание, что я не избегаю пространства в имени каталога. –

Смежные вопросы