gpt4 book ai didi

Java ADB shell 不返回任何内容

转载 作者:行者123 更新时间:2023-12-01 17:17:28 24 4
gpt4 key购买 nike

我想编写一个java程序来查找设备并列出其内容。为此,我首先通过 Java 的 Process 类启动“adb devices”并解析输出,这仅适用于 finde。然后我想触发这个命令:

adb shell -s DEVICE-SERIAL /sdcard/

当我将其放入终端时,我得到了正确的输出,即/sdcard/根目录中所有文件夹和文件的列表。

当我将其放入 Java 代码中时,没有任何返回。然而,Stderr 包含当您拼写错误 adb 命令时获得的标准帮助页面。有趣的是:为了调试,我输出发送到 ADB 的每个命令。如果我运行我的程序并复制完全相同的生成命令并在我的终端中运行它,它就可以正常工作。

这是为什么呢?作为引用,以下是我的代码摘录:

ADB.java:

public static String runShellCommand(Device d, String command) {
return runCommand(d, "shell " + command);
}

public static String runCommand(Device d, String command) {
Runtime runtime = Runtime.getRuntime();
String full = "";
String error = "";

try {
if (d != null) {
command = "-s " + d.getSerial() + " " + command;
}

System.out.println("Running command: adb " + command);
Process process = runtime.exec(new String[] {ADB_LOCATION, command});

process.waitFor();

BufferedReader stdin = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader errin = new BufferedReader(new InputStreamReader(process.getErrorStream()));

String line;

while ((line = stdin.readLine()) != null) {
full += line;
}

while ((line = errin.readLine()) != null) {
error += line;
}

if (!error.isEmpty()) {
System.err.println("\n=== ADB reports: ===");
System.err.println(error);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
System.out.println("App was overenthuasiastic. Couldn't wait for thread to finish.");
}

return full;
}

Device.java:

public ArrayList<Folder> getFoldersInDirectory(String dir) {
String[] list = ls(dir);

for (String s: list) {
System.out.println(s);
System.out.println(isFolderOrFile(dir + s));
}

// Just for debugging, gets completed once this runs.
return null;
}

protected String[] ls(String dir) {
String result = ADB.runShellCommand(this, "ls " + dir);
System.out.println(result);

return result.split("\n");
}

正如我之前所说,所有其他命令都运行得很好(我测试了设备、get-state、get-serialno)。

输出: Outputs

最佳答案

runtime.exec() 的参数错误。当您应该使用 {'adb', '-s', 'xxxx', 时,您正在使用 {'adb', '-s xxxx shell "ls/sdcard/"'} 'shell', 'ls/sdcard/'}

关于Java ADB shell 不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20984306/

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