如何使用 gradle API 从 Java 程序生成 apk 文件?如果可能,如何将其安装到模拟器中



>我正在开发一个Java程序,可以构建Android apk文件,然后将其安装到模拟器中,然后运行测试。代码如下所示:

    /*
 * Generate APK through ANT API Method
 */
public static void generateApkThroughAnt(String buildXMLPath) {
    File antBuildFile = new File(buildXMLPath);
    Project p = new Project();
    p.setUserProperty("ant.file", antBuildFile.getAbsolutePath());
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    PrintStream ps = new PrintStream(os);
    DefaultLogger consoleLogger = new DefaultLogger();
    consoleLogger.setErrorPrintStream(System.err);
    consoleLogger.setOutputPrintStream(ps);
    consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
    p.addBuildListener(consoleLogger);
    BuildException ex = null;
    try {
        p.fireBuildStarted();
        p.init();
        ProjectHelper helper = ProjectHelper.getProjectHelper();
        p.addReference("ant.projectHelper", helper);
        helper.parse(p, antBuildFile);
        p.executeTarget("clean");
        p.executeTarget("debug");   // build a new apk file
        //p.executeTarget("test");   // run test against project
        //p.executeTarget("installd");  //install new apk file to vd
        try {
            // test for capturing output results
            String output = os.toString("UTF8");
            System.out.println("this is captured output: "+ output);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    } catch (BuildException e) {
        ex = e;
    } finally {
        p.fireBuildFinished(ex);
    }
}

到目前为止,使用 Apache Ant,我的程序能够毫无问题地完成上述任务。感谢这篇文章中的答案 从 Java 运行蚂蚁

然而,现在越来越多的Android开源应用程序正在使用gradle。我想知道是否有可能使用 gradle 完成上述类似的任务?gradle 是否有我可以使用的类似 API?谢谢!

这是我

找到的解决方案。希望它可以帮助任何也有类似需求的人。Gradle 工具 API 完美地解决了这个问题。

/*
 * perform Gradle tasks such as compile, build, test
 */
public static void performGradleTasks(String path, String ... tasks)
{
    GradleConnector connector = GradleConnector.newConnector();
    connector.forProjectDirectory(new File(path));
    ProjectConnection connection = connector.connect();
    try {
        // Configure the build
        BuildLauncher launcher = connection.newBuild();
        launcher.forTasks(tasks);
        launcher.setStandardOutput(System.out);
        launcher.setStandardError(System.err);
        // Run the build
        launcher.run();
    } finally {
        // Clean up
        connection.close();
    }
} 

还有另一种方法可以在不修改build.gradle文件的情况下对APK进行签名,该文件是zipalign和apksigner。例如,如果您使用的构建工具是 27.0.3,您可以在 [您的 android sdk 文件夹]/build-tools/27.0.3 中找到它们。然后,您可以使用 ProcessBuilder 在 Java 代码中执行它们。看拉链对齐APKSIGNER

最新更新