java - 如何使用 gradle API 从 Java 程序生成 apk 文件?如果可能的话,如何将它也安装到模拟器上?

标签 java android ant gradle

我正在开发一个 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,我的程序能够毫无问题地完成上述任务。感谢这篇文章中的答案 Run ant from Java

但是,现在越来越多的安卓开源应用开始使用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();
    }
} 

关于java - 如何使用 gradle API 从 Java 程序生成 apk 文件?如果可能的话,如何将它也安装到模拟器上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26984642/

相关文章:

java - 在 Java 中创建一个 ArrayList?

android - 在 Android 中运行 FFmpeg 可执行二进制文件

java - 如何触发软键盘?

android - 使用 Jenkins 签署应用程序

jenkins - 无法在 Jenkins 中启动新的奴隶

java - 使用模式组查找第一个单词

android - 我在哪里可以找到有关 android 特定权限的更多信息

java - gwt-maven-插件 : Plugin requires Maven version 2. 1

Ant (1.6.5) - 如何在一个 <condition> 或 <if> 中设置两个属性

java - SQLite + 可序列化、SQLite + GSON,还是只是适用于我的 Android 应用程序的普通 SQLite?