link-adb-path-from-resource在java应用程序中执行shell命令

ru9i0ody  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(333)

我正在寻找一种直接从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命令中?

nnt7mjpx

nnt7mjpx1#

使用完整路径 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 以你的道路

相关问题