从Java程序执行ADB命令
我正在开发的程序使用ADB(Android Debug Bridge)向我的手机发送文件:
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守护进程将所有输出写入系统标准输出。我试着把它转发到一个文本文件中。它保持为空,输出仍然被写入终端
EDIT:读取ADB进程的错误流会为每个adb push
-命令返回ADB帮助。同样地,exact命令(从Eclipse控制台复制)在终端中工作
编辑2:使用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()
-方法中
使用ADB的绝对路径(/usr/bin/adb
)时也会发生同样的情况。inputfile和outputfile字符串也是绝对路径,比如/home/sebastian/testfile
,并且绝对存在。当从终端运行命令(字符串“cmd”打印、复制和粘贴)时,evreything仍然可以正常工作
# 1 楼答案
最好给出ADB执行的完整路径:如下
$ANDROID_HOME/platform-tools/adb devices
以下是您可以使用的完整代码:
# 2 楼答案