我终于找到了适用于Android / Gradle的东西,但到达那里似乎比原本应该复杂的多。
回顾一下-这是我要执行其主要方法的Java类:
软件包de.myapp.gradle;
public class ConfigureCustomer { public static void main(String[] args){ String customer = args[0]; String versionName = args[1]; System.out.println(String.format("Configuring customer %s with versionName %s", customer, versionName )); }}我想针对每种口味执行上述操作,并且仅针对发行版本(而非调试版本)执行上述操作,因此这是我的任务定义(您仍然必须使您的任务依赖于一个gradle构建任务,因此它可以执行-
我依赖为此,在preBuild任务上):
android {//Build type setup, signing configuration and other stuff}//After the android block my task definition follows:task buildPrintout(type: JavaExec) { android.applicationVariants.all { variant -> //Runt he java task for every flavor variant.productFlavors.each { flavor -> println "Triggering customer configuration for flavor " + flavor.name if (variant.buildType.name.equals('release')) { //Run the java task only for release builds //Cant find the runtime classpath in android/gradle so I'll directly link to my jar file here. The jarfile contains the class I want to run (with the main method) classpath += files("libs/my-jarfile.jar") //This is the fully qualified name of my class, including package name (de.myapp.gradle) and the classname (ConfigureCustomer) main = "de.myapp.gradle.ConfigureCustomer" //Pass in arguments - in this case the customer's name and the version name for the app (from AndroidManifest.xml) args flavor.name, variant.versionName } } }}您会注意到,我抛弃了将Class集成到要构建的android项目中的想法。取而代之的是,我将该类设为一个单独的项目,构建了一个jar文件,并将其放在我正在构建的android项目的libs文件夹中。
更新04.02.2015
我对上述内容做了一些修改,以使用javaexec方法而不是JavaExec Task类型:
preBuild.doFirst { android.applicationVariants.all { variant -> variant.productFlavors.each { flavor -> if (variant.buildType.name.equals('release')) { javaexec { println "Triggering customer build for flavor " + flavor.name classpath += files("libs/my-jarfile.jar") main = "de.myapp.gradle.ConfigureCustomer" args flavor.name, variant.versionName } println "Done building customer for flavor " + flavor.name } } }}这是另一个变体,我们在可重用(首选)任务中定义javaexec,然后将其添加为preBuild任务的依赖项:
//Define our custom task and add the closures as an action task buildCustomer << { android.applicationVariants.all { variant -> variant.productFlavors.each { flavor -> if (variant.buildType.name.equals('release')) { javaexec { println "Triggering customer build for flavor " + flavor.name classpath += files("libs/my-jarfile.jar") main = "de.myapp.gradle.ConfigureCustomer" args flavor.name, variant.versionName } println "Done building customer for flavor " + flavor.name } } } } //Make preBuild depend on our task preBuild.dependsOn buildCustomer如果您有任何疑问,请告诉我,我会尽力解答。



