从Android应用程序的Java桌面应用程序运行Gradle构建脚本

从Android应用程序的Java桌面应用程序运行Gradle构建脚本,java,android,javafx,build.gradle,Java,Android,Javafx,Build.gradle,我正试图通过按下build按钮,通过Java桌面应用程序自动构建Android应用程序,因为我需要更改一些清单值和字符串值。所有这些都完成了,但我需要执行“gradle AssemblereRelease-pMyProjectPath”,但我一直遇到问题。以下是我尝试过的组合: 测试1 ProcessBuilder builder = new ProcessBuilder("call", "gradle", "assemble ", "-p" , projectPath); 测试1的输出:

我正试图通过按下build按钮,通过Java桌面应用程序自动构建Android应用程序,因为我需要更改一些清单值和字符串值。所有这些都完成了,但我需要执行“gradle AssemblereRelease-pMyProjectPath”,但我一直遇到问题。以下是我尝试过的组合:

测试1

 ProcessBuilder builder = new ProcessBuilder("call", "gradle", "assemble ", "-p" , projectPath);
测试1的输出:

java.io.IOException:无法运行程序“call”:CreateProcess错误=2,系统找不到指定的文件

我尝试了“调用”,因为据我所知,gradle不是一个可执行文件(它是在黑暗中拍摄的)

测试2

 ProcessBuilder builder = new ProcessBuilder( "C:\\developer\\tools\\gradle-2.3\\bin\\gradle", "assemble ", "-p"+projectPath);
测试2的输出

 ProcessBuilder builder = new ProcessBuilder( "C:\\developer\\tools\\gradle-2.3\\bin\\gradle", "assemble ", "-p"+projectPath);
java.io.IOException:无法运行程序“C:\developer\tools\gradle-2.3\bin\gradle”:CreateProcess error=193,%1不是有效的Win32应用程序

gradle在我的环境路径中

测试3

 ProcessBuilder builder = new ProcessBuilder("cmd", "gradle", "assemble ", "-p" + projectPath);
测试3的输出:
--没有。没有输出。不知道它是否在运行

一个大问题是我没有在ProcessBuilder参数中包含“/C”

下面是我使用gradle从UI编译的工作版本:

  private void startGradleExecutorService() {
    statusLabel.setText("Building...");
    ExecutorService executor = Executors.newSingleThreadExecutor();
    executor.submit(() -> {

        ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/C", projectPath + "/gradlew assembleRelease -p" + projectPath, "--info");
        builder.redirectErrorStream(true);
        try {
            Process p = builder.start();
            BufferedReader stdout = new BufferedReader(
                    new InputStreamReader(p.getInputStream()));

            System.out.println("outputString:: " + stdout.readLine());

            while ((outputString = stdout.readLine()) != null) {
                System.out.println("outputString:: " + outputString);
                Platform.runLater(() -> {
                    //if you change the UI, do it here !

                    statusLabel.setText(outputString);

                });
                if (outputString.contains("BUILD")) {
                    break;
                }
            }
            p.getInputStream().close();
            p.getOutputStream().close();
            p.getErrorStream().close();
            p.destroy();
        } catch (IOException e) {
            e.printStackTrace();
        }
    });
}