Articles of groovy

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。

Eclipse使用旧的PATHvariables来执行Gradle Task中的命令行过程?

我使用Gradle Exec任务。 它执行一个命令行进程。 我想要执行的命令是: pod install 它需要安装椰壳 。 我做到了。 我使用pod –version从命令行检查它是否工作正常。 输出是最新版本,是0.37.2。 我的系统是OS X,我使用最新的Eclipse Luna版本。 我创build了一个自定义的Gradle Task: class InstallPodTask extends DefaultTask { @InputDirectory File srcDir @TaskAction def pod() { def xcodeProjectDir = // the dir the pod command is executed in try { project.exec { workingDir xcodeProjectDir executable "pod" args "install" } } catch (Exception […]

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

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

signedConfigs标记在升级到v22之后在build.gradle中给了我一个Lint错误

我已经在我的build.gradle(应用程序)文件中有一段时间的以下代码: signingConfigs { release { storeFile file("D:\\Android\\keystore\\myApp.jks") storePassword "myStorePw" keyAlias "myKeyAlias" keyPassword "MyKeyPw" } } 我刚刚升级到targetSdkVersion = 22,这意味着将SDK和构build工具升级到22。 现在整个部分在Android Studio(141.1793788)中以黄色突出显示,并显示以下消息: 'signingConfigs' cannot be applied to '(groovy.land.Closure<com.android.build.gradle.internal.dsl.SigningConfig>)' v22有没有改变,我需要知道? 我找不到文档。

在运行时为Android执行embedded在Java中的Groovy脚本

从2.4版开始,Groovy支持Android。 我想在我的Android应用程序中运行embedded在Java中的Groovy脚本。 本网站解释说,这是可能的: http : //melix.github.io/blog/2014/06/grooid2.html 修改Groovy语言的一个难点就是,正如我们所说的,Groovy是一种高度dynamic的语言。 它的一个function是在运行时执行脚本。 那么,如果我们想在设备上input一个Groovy脚本,并直接在它上面执行呢? 可能吗? 事实上,是的,这是可能的,因为你遵循这个过程: 您可以使用Groovy编写应用程序,但是最终,一旦应用程序正在运行,您将拥有要执行的Groovy源代码。 然后需要编译类,直接在设备上调用dex,将结果打包到本地文件系统的jar文件中,然后使用特殊的类加载器加载它。 那么为什么这是可能的,这个过程是非常复杂的,不是直接的,但更重要的是,这是非常缓慢的。 无论速度如何,我都感到非常兴奋。 这里有一个示例项目: https : //github.com/melix/grooidshell-example 。 不幸的是,我不太了解这个过程。 我有一个相当小的项目,但我不确定在哪里看到。 你能指出我在正确的方向执行Groovy脚本embedded在Java运行时为Android?