我正在寻找一种直接从java应用程序运行adb命令的方法。在搜索堆栈溢出时,我找到了以下用于运行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命令中?
1条答案
按热度按时间nnt7mjpx1#
使用完整路径
adb.exe
这样你就不需要把它加到%PATH%
.如果你开门的话
cmd
然后跑C:\...\adb.exe devices
会有用的或者在shell中执行此命令来设置路径,
编辑:添加
adb.exe
在你的resources
与调用类位于同一个包中的文件夹。然后加载它,并将它写到您碰巧知道的另一个位置(或者生成一个相对于jar所在位置的路径,例如。System.getProperty("user.dir"
); )然后调用
adb.exe
以你的道路