我正在寻找一种直接从java应用程序运行adb命令的方法。在Stack Overflow上搜索时,我找到了以下运行shell命令的解决方案,
public class Utils {
private static final String[] WIN_RUNTIME = {"cmd.exe", "/C"};
private static final String[] OS_LINUX_RUNTIME = {"/bin/bash", "-l", "-c"};
private Utils() {
}
private static <T> T[] concat(T[] first, T[] second) {
T[] result = Arrays.copyOf(first, first.length + second.length);
System.arraycopy(second, 0, result, first.length, second.length);
return result;
}
public static List<String> runProcess(boolean isWin, String... command) {
System.out.print("command to run: ");
for (String s : command) {
System.out.print(s);
}
System.out.print("\n");
String[] allCommand = null;
try {
if (isWin) {
allCommand = concat(WIN_RUNTIME, command);
} else {
allCommand = concat(OS_LINUX_RUNTIME, command);
}
ProcessBuilder pb = new ProcessBuilder(allCommand);
pb.redirectErrorStream(true);
Process p = pb.start();
p.waitFor();
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String _temp = null;
List<String> line = new ArrayList<String>();
while ((_temp = in.readLine()) != null) {
//System.out.println("temp line: " + _temp);
line.add(_temp);
}
System.out.println("result after command: " + line);
return line;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
这很好用,但我找不到将adb.exe路径添加到shell命令的解决方案,以便我可以执行adb命令。
我的项目结构如下:
我正在尝试使用以下方式将adb路径与系统默认shell路径一起追加,
Utils.runProcess(true, "/resources/adb.exe devices");
有没有办法将资源中的adb.exe路径附加到shell命令中?
答案 0 :(得分:0)
使用adb.exe
的完整路径,不要将其添加到%PATH%
。
例如。如果您打开cmd
并运行C:\...\adb.exe devices
,则可以使用
或者在shell中执行此命令以设置路径
setx path "%path%;C:\..."
修改:将adb.exe
文件夹中的resources
添加到与您的通话类相同的包中。然后加载它并将其写入您碰巧知道的另一个位置(或生成相对于您的jar所在位置的路径,例如System.getProperty("user.dir"
);
)
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("adb.exe").getFile());
// now copy this file to a location you already know eg. C:\...\temp\adb.exe
然后使用您拥有的路径调用adb.exe