Articles of groovy

每个变种的Android Gradle自定义任务

我有一个使用Gradle构建的Android应用程序,其中包含BuildTypes和Product Flavors(变体)。 我可以运行此命令来构建一个特定的apk: ./gradlew testFlavor1Debug ./gradlew testFlavor2Debug 我必须在每个变体的build.gradle中创建一个自定义任务,例如: ./gradlew myCustomTaskFlavor1Debug 我为此创建了一个任务: android.applicationVariants.all { variant -> task (“myCustomTask${variant.name.capitalize()}”) { println “*** TEST ***” println variant.name.capitalize() } } 我的问题是,所有变体都调用了这个任务,而不是我正在运行的唯一variables。 输出: ./gradlew myCustomTaskFlavor1Debug *** TEST *** Flavor1Debug *** TEST *** Flavor1Release *** TEST *** Flavor2Debug *** TEST *** Flavor2Release 预期产量: ./gradlew myCustomTaskFlavor1Debug *** TEST *** Flavor1Debug 如何定义自定义任务,动态,每个变体,然后使用正确的变体调用它?

如何在Gradle构建脚本(Android)中定义和使用常量?

我正在使用Gradle作为其构建系统的Android应用程序。 我的目标是使用值(包名称)作为applicationId : productFlavors { orange { applicationId “com.fruits.android.orange” // … 但也要通过BuildConfig公开它,以便Java代码可以访问它。 此访问必须来自外部风格(即,应用程序的免费版本需要知道付费版本的软件包名称,以便它可以提示用户在Play商店中进行升级)。 所以我想做那样的事情: productFlavors { orange { applicationId orangeProPackage // … buildConfigField ‘String’, ‘ORANGE_PRO_PACKAGE’, “$orangeProPackage” // ? 只有我不确定如何定义orangeProPackage以便它在整个build.gradle中可见,并且不会破坏脚本。 因为有几种不同的味道,最好是我能以某种方式将所有这些常量分组(我猜?): def proPackages = [ orange: “…” apple: “…” banana: “…” ] 然后以一种干净,描述性的方式引用它们,如proPackages.orange等。 问题是,如何实现这一目标? 这不是重复的是否可以在Gradle中声明一个可用于Java的variables? 我已经看到了这个问题(以及其他一些问题)。 我知道如何声明buildConfigFields,我已经有很多了。 我的问题是重用与buildConfigField 和 applicationId相同的值。

在Android上使用Groovy

随着ASMDEX (dex文件的ASM )和dexmaker的出现 ,不应该将Groovy移植到Android吗? 两个框架都允许在运行时生成dex字节码。 据我了解,无法在内存中修改APK中的dex类。 但是不可能将这些类复制到可写内存,在运行时修改这些副本并使用它们吗? 还需要移植什么来处理dex类文件? CGLIB ?

在Intellij / Android Studio中调试Gradle构建文件

我有时遇到Gradle的模糊问题。 有时,如果我正在阅读源文件或添加println语句以确定我能做什么以及状态是什么,这会有所帮助。 但我真的想放置一个断点并列出variables的内部状态。 可以使用Android Studio或IntelliJ吗? 我也喜欢按住Ctrl键单击DSL关键字,这样我就可以获得一些上下文。 只是放置一个断点并从gradle任务列表中单击“debug”不起作用,它只是在不停止的情况下运行任务。

Android Studio无法加载类’org.codehaus.groovy.runtime.typehandling.ShortTypeHandling’

我安装了Android Studio,当我尝试从gradle导入项目时,出现解决错误 : 无法加载类’org.codehaus.groovy.runtime.typehandling.ShortTypeHandling’。 我删除了我的Users .gradle文件夹中的文件,并尝试了不同的gradle版本。 我不知道如何解决这个问题。

Android Gradle:在构建时动态更改versionName

我试图通过使用自定义版本的gradle-release插件来模拟Android中的Maven发布插件: https : //github.com/townsfolk/gradle-release 有趣的步骤是: 检查未提交的更改 步骤版本代码并从版本名称中删除-SNAPSHOT后缀 建立 步骤版本名称并为下一个开发版本添加-SNAPSHOT后缀 但是生成的APK总是具有以前的版本(即1.0.0-SNAPSHOT而不是1.0.0)。 版本号在gradle.properties中存储并正确更新,因此我假设我需要更新数据模型中的版本以使更改生效。 我的android插件配置: defaultConfig { versionCode versionCode as int // taken from gradle.properties versionName versionName // taken from gradle.properties minSdkVersion 10 targetSdkVersion 19 } 我试过的事情: preBuild < variant.versionName = versionName } } 但是变体中没有versionName。 preBuild < type.versionName = versionName } } 但是types中没有versionName。 preBuild < flavor.versionName = versionName […]

Gradle Android依赖产品风格

我想知道是否有一个根项目的方式来定义/注入它的依赖项中的一些属性。 更具体地说,我遇到的问题是,一个库项目必须知道在运行组装/编译任务之前是否需要“自由”或“专业”Java源和其他资源。 有点像为库项目指定产品风格(从父项目inheritance而来),但Android插件不支持Gradle。 改变图书馆项目结构,即创build“自由”和“专业”库不是一个选项。 编辑:到目前为止我已经达到的最好的是这样的: root: build.gradle android { … productFlavors { free, pro } sourceSets { free { project(':..:lib') { groupFreePro = 'free' // java.srcDirs = ['src', 'free/src'] } } pro { project(':..:lib') { groupFreePro = 'pro' // java.srcDirs = ['src', 'pro/src'] } } … } } 库: gradle.build android { … sourceSets { […]

如何在Gradle构build脚本(Android)中定义和使用常量?

我正在使用Gradle作为构build系统的Android应用程序。 我的目标是使用一个值(一个包名称)作为applicationId : productFlavors { orange { applicationId "com.fruits.android.orange" // … 而且通过BuildConfig公开它,以便Java代码可以访问它。 这种访问必须从外部的味道(即免费版本的应用程序需要知道付费版本的包名称,以便它可以提示用户在Play商店升级)。 所以我想要这样做: productFlavors { orange { applicationId orangeProPackage // … buildConfigField 'String', 'ORANGE_PRO_PACKAGE', "$orangeProPackage" // ? 只有我不知道如何定义orangeProPackage以便它在整个build.gradle中可见并且不会中断脚本。 既然有几种不同的口味,那么最好能把这些常量按这种方式组合起来(我想呢?): def proPackages = [ orange: "…" apple: "…" banana: "…" ] 然后以proPackages.orange等清晰描述的方式引用它们。 问题是,如何做到这一点? 这是不是重复的是否有可能在Gradle中声明一个可用于Java的variables? 我已经看到了这个问题(和其他一些问题)。 我知道如何声明buildConfigFields,我已经有很多了。 我的问题是关于重用与buildConfigField 和 applicationId相同的值。

如何从头开始设置Android Studio项目,使我可以使用groovy

Groovy的2.4版本附带官方支持android应用程序开发http://docs.codehaus.org/display/GROOVY/Groovy+2.4+release+notes 。 先前在Android开发中使用eclipse,没有Android Studio的经验,也没有Gradle的经验,现有的使用Android Studio设置groovy android项目的说明(例如http://docs.groovy-lang.org/docs/next/ html / documentation / tools-groovyc.html#section-android , https://github.com/groovy/groovy-android-gradle-plugin或http://hosain.net/2015/02/07/getting-started -with-android-development-using-groovy-2.4-and-android-studio.html )太模糊了,不适合我,而且它们使用的版本号的区别很混乱。 我希望看到针对Android Studio 1.2.1.1 for Linux的详细逐步说明,并解释如何决定版本号。

用RobolectrictestingAndroid库

我创build了一个可以在Android环境中使用的库。 目前它包含普通旧Groovy对象 ,没有Android依赖关系。 那些POGO的testing没有问题。 为了扩展库的function,我创build了从Android类inheritance或依赖它们的类,我也想testing它们。 当然,testing应该是库的一部分,不应该作为包含库的Android应用程序项目的一部分来实现。 我知道一个应用程序可以在Robolectric的帮助下进行testing,并且工作得很好,但是如果没有整个Android应用程序,我认为没有可能使用它。 有没有一种方法来testingAndroid的依赖和Robolectric库? 我正在使用Android Studio 1.2。