Wykonaj polecenie ADB z programu Java

Program, nad którym pracuję, używa ADB (Android Debug Bridge) do wysyłania plików do mojego telefonu:

for (String s : files)
    String cmd = "adb -s 0123456789ABCDEF push " + s + " /mnt/sdcard/" + s;
    try {
        InputStream is = Runtime.getRuntime().exec(cmd).getInputStream();
        while (is.read() != -1) {}
    } catch (IOException e) {
        e.printStackTrace();
    }

Chcę, aby program czekał, aż ADB zakończy transmisję, ale ADB działa jako demon i dlatego nigdy nie kończy. Ale program jest kontynuowany niezmiernie i jakoś pliki nie są wysyłane do mojego telefonu (bez wyjątków w dzienniku). Kiedy uruchamiam polecenie z konsoli, działa bez problemów.

Co ja robię źle? Jak prawidłowo przesyłać pliki przez ADB?

Zanotujis.read() == -1 nie zadziała, ponieważ demon ADB piszewszystkie wyjścia do standardowego wyjścia systemu. Próbowałem przekazać go do pliku tekstowego. Pozostał pusty, a wyjście nadal było zapisywane na terminalu

EDYTOWAĆ: Odczytanie strumienia błędów procesu ADB zwróciło pomoc adb dla każdegoadb push-dowództwo. Ponownie: Thedokładny komendy (skopiowane z konsoli Eclipse) działają w terminalu

EDYCJA 2: Używanie ProcessBuildera zamiastRUntime.getRuntime.exec() spowodował następujący błąd:

java.io.IOException: Cannot run program "adb -s 0123456789ABCDEF push "inputfile "outputfile""": error=2, File or directory not found

w ProcessBuilderstart()-metod To samo dzieje się, gdy używasz ścieżki bezwzględnej dla ADB (/usr/bin/adb). Ciągi wejściowe i wyjściowe są również ścieżkami bezwzględnymi/home/sebastian/testfile i zdecydowanie istnieje. Podczas uruchamiania poleceń z terminala (ciąg „cmd” drukowane, kopiowanie i wklejanie) wszystko nadal działa poprawnie.

questionAnswers(3)

yourAnswerToTheQuestion