gpt4 book ai didi

java - 从 Java 程序执行 ADB 命令

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:32:34 24 4
gpt4 key购买 nike

我正在开发的程序使用 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 作为守护进程运行,因此永远不会完成。但是程序会立即继续,并且文件不会以某种方式发送到我的手机(日志中没有异常(exception))。当我从控制台运行命令时,它运行正常。

我做错了什么?如何通过 ADB 正确发送文件?

注意:is.read() == -1 将不起作用,因为 ADB 守护进程将所有输出 写入系统标准输出。我试过将它转发到一个文本文件中。它保持为空,输出仍然写入终端

编辑:读取 ADB 进程的 ErrorStream 返回每个 adb push 命令的 adb 帮助。再次说明:精确 命令(从 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) 时也会发生同样的情况。输入文件和输出文件字符串也是绝对路径,如 /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 - 从 Java 程序执行 ADB 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20922600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com