栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Android Studio Gradle:执行静态Java方法(从ANT迁移到Gradle)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android Studio Gradle:执行静态Java方法(从ANT迁移到Gradle)

我终于找到了适用于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

如果您有任何疑问,请告诉我,我会尽力解答。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509769.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号