我想读取ADB logcat(https://developer.android.com/studio/command-line/adb)的输出。我有这样的代码(测试):
try {
Process p = Runtime.getRuntime().exec("sh -c adb logcat");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream()));
while(true) {
String s = bufferedReader.readLine();
if(s == null) {
continue;
}
System.out.println("From process: " + s);
}
} catch (IOException e) {
e.printStackTrace();
}
但这不会打印任何内容。如果执行此操作:
Process p = Runtime.getRuntime().exec("sh -c ls");
有效。
答案 0 :(得分:0)
好的,我太快问了SO的问题。
我读取错误流而不是输入流,并且发现找不到程序ADB。需要提供完整路径:
ProcessBuilder processBuilder = new ProcessBuilder("/home/UserName/Soft/Android/Sdk/platform-tools/adb", "logcat");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream()));
但是在另一台计算机上的路径是不同的。此外,您还可以在每台计算机上进行符号链接,并在代码中仅使用“ adb”作为路径:
sudo ln -s /home/UserName/Soft/Android/Sdk/platform-tools/adb /bin/adb
ProcessBuilder processBuilder = new ProcessBuilder("adb", "logcat");
这不是最佳解决方案,可以部分解决问题。如果在实例化ProcessBuilder对象时仅使用“ adb”,而无需进行符号链接,那就太好了。因为在计算机的每个磁盘位置上,我都可以在终端中使用ADB,所以它是可见的,但是在此代码中没有。在Windows中,我知道这是在“系统环境”>“路径”中。在Linux中,我编写了命令“ printenv”,但在android&adb中看不到任何东西。