从Java程序执行ADB命令
我正在使用的程序使用ADB(Android调试桥)将文件发送到手机:
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();
}
我希望程序等待ADB完成传输,但是ADB作为守护程序运行,因此永远无法完成。但是该程序仍在继续运行,并且某种程度上文件没有发送到我的手机(日志中没有例外)。当我从控制台运行命令时,它可以正常工作。
我究竟做错了什么?如何正确通过ADB发送文件?
注意:这is.read() == -1
将不起作用,因为ADB守护程序会将 所有输出
写入系统标准输出。我尝试将其转发到文本文件中。它保持为空,并且输出仍然写入终端
:读取ADB进程的ErrorStream返回每个adb push
命令的adb帮助。再次: 确切的
命令(从Eclipse控制台复制)在终端中工作
:使用ProcessBuilder而不是RUntime.getRuntime.exec()
导致以下错误:
java.io.IOException: Cannot run program "adb -s 0123456789ABCDEF push "inputfile "outputfile""": error=2, File or directory not found
在ProcessBuilder的start()
-method上使用ADB(/usr/bin/adb
)的绝对路径时,也会发生同样的情况。inputfile和outputfile字符串也是绝对路径,就像/home/sebastian/testfile
并且肯定存在。从终端运行命令时(打印字符串“
cmd”,复制并粘贴),evreything仍然可以正常工作。
回答:
我终于让它工作了:
ProcessBuilder pb = new ProcessBuilder("adb", "-s", "0123456789ABCDEF", "push", inputfile, outputfile);Process pc = pb.start();
pc.waitFor();
System.out.println("Done");
我不知道ProcessBuilder
字符串中的空格有什么问题,但是最后,它正在起作用…
以上是 从Java程序执行ADB命令 的全部内容, 来源链接: utcz.com/qa/426764.html