2017-01-23 2 views
-1

Я пытаюсь выполнить некоторые команды оболочки на устройстве Android программно. Я могу запускать некоторые команды, но не смог запустить их все. В качестве примера я могу выполнить следующие команды:Выполнение команд в оболочке ADB в Android Studio

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 Debug Bridge (ADB) является универсальным инструментом командной строки, которая позволяет общаться с экземпляром эмулятора или подключенного к Android устройства

Вы пытаетесь выполнить adb на устройствах Android, что не имеет смысла, потому что adb - это утилита командной строки, которая работает на компьютере и на устройстве Android нет adb.

+0

_ «нет adb на устройстве Android». Не совсем корректно. Эфир, начинающийся с конкретной версии ОС или в зависимости от производителя 'adb', был отправлен в' system/bin'. _ «Вы пытаетесь выполнить команды adb на устройствах Android, что не имеет смысла» _ В большинстве случаев это не так, если вы не знаете, что делаете ... @Bouba [Этот ответ] (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