问题在于Groovy Android Gradle插件(使Groovy在Android上工作)无法与Android插件版本为
1.1.0-rcX
的插件简单地配合使用。
这里有一个非常有趣的代码片段,直接来自groovyx.grooid.GroovyAndroidPlugin
,版本为0.3.5
(当前最新版本,这里是源代码)。
def getRuntimeJars(Project project, plugin) {
int index
switch (getAndroidPluginVersion(project)) {
case ~/0\.9\..*/:
index = 0
break
case ~/0\.10\..*/:
case ~/0\.11\..*/:
case ~/0\.12\..*/:
case ~/0\.13\..*/:
case ~/0\.14\..*/:
case ~/1\.0\..*/:
index = 1
break
default:
index = RUNTIMEJARS_COMPAT.size()-1
}
def fun = RUNTIMEJARS_COMPAT[index]
fun(plugin)
}
以及RUNTIMEJARS_COMPAT
的定义:
private static List RUNTIMEJARS_COMPAT = [
{ it.runtimeJars },
{ it.bootClasspath }
]
因此,在Android Gradle版本0.9.x
和0.10.0
之间,API必须已经发生了变化(是的,我知道 - 那些Google开发人员总是在改变一切 :[)。因此,让我们来看看Android插件版本中制造这个问题的类 1.0.0
:
> javap -cp [path to proper jar] com.android.build.gradle.AppPlugin:
public class com.android.build.gradle.AppPlugin extends com.android.build.gradle.BasePlugin implements org.gradle.api.Plugin<org.gradle.api.Project> {
...
public java.util.List super$2$getBootClasspath();
...
嗯!我们需要的方法在父类
com.android.build.gradle.BasePlugin
中。但是在版本
1.1.0-rc3
中没有这样的方法。另外,
com.android.build.gradle.AppPlugin
的API完全改变了,所以简单的
if(version)
无法解决这个问题。
我猜在作者更新插件之前,Groovy Android Gradle插件不可能在单元测试中工作(自
1.1.0
以来)。
那么我们就等待吧。