>我正在开发一个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