Ejecutar comando ADB desde el programa Java

El programa en el que estoy trabajando usa ADB (Android Debug Bridge) para enviar archivos a mi teléfono:

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();
    }

Quiero que el programa espere hasta que ADB termine la transmisión, pero ADB se ejecuta como un demonio y, por lo tanto, nunca termina. Pero el programa continúa de manera inmejorable y de alguna manera los archivos no se envían a mi teléfono (sin excepciones en el registro). Cuando ejecuto el comando desde la consola, funciona sin problemas.

¿Qué estoy haciendo mal? ¿Cómo envío archivos a través de ADB correctamente?

Nota lais.read() == -1 no funcionará, porque el demonio ADB escribetoda la salida a la salida estándar del sistema. He intentado enviarlo a un archivo de texto. Permaneció vacío y la salida aún estaba escrita en el terminal.

EDITAR: La lectura de ErrorStream del proceso ADB devolvió la ayuda de adb para cada unoadb push-mando. De nuevo: elexacto Los comandos (copiados desde la consola de Eclipse) funcionan en un terminal

Editar 2: Usando un ProcessBuilder en lugar deRUntime.getRuntime.exec() resultó en el siguiente error:

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

en el ProcessBuilder'sstart()-Método Lo mismo sucede cuando se usa una ruta absoluta para ADB (/usr/bin/adb). Las cadenas de entrada y archivo de salida también son rutas absolutas, como/home/sebastian/testfile y definitivamente existen. Al ejecutar los comandos desde el terminal (cadena "cmd" impresa, copiar y pegar), evreything todavía funciona bien.

Respuestas a la pregunta(3)

Su respuesta a la pregunta