运行 Android 应用与 Spock 和 Java 8 的问题
Problems running Android app with Spock and Java 8
这是我的设置。我有一个包含几个 Java(不是 Android)模块的 Android 项目。
最近我开始使用Spock(这是一个基于JUnit和Groovy的测试框架)。
在 Java 模块上,我只是像这样使用 groovy 插件:
apply plugin: 'groovy'
然后包括这些依赖项:
dependencies {
testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
testCompile 'org.codehaus.groovy:groovy-all:2.4.6'
testCompile 'cglib:cglib-nodep:3.1'
testCompile 'org.objenesis:objenesis:2.2'
}
在我的 Android 主应用程序上,我进行了此设置。在根项目上我有这个类路径依赖:
classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.9'
然后在我应用的应用程序模块上:
apply plugin: 'groovyx.grooid.groovy-android'
并这样配置:
androidGroovy {
options {
configure(groovyOptions) {
// used so groovy can do it's magic, I think, not 100% sure
javaAnnotationProcessing = true
}
}
skipJavaC = true // if disabled my CPU melts for some reason
}
我还通过在 Android 上使用 Jack 标志启用了 Java 8:
jackOptions {
enabled true
}
所有测试 运行 与 Spock 完美结合(甚至是应用程序模块上的测试)。但是,当我尝试 运行 设备或模拟器上的应用程序时,我从 Android studio 收到多个错误。错误发生在任务中:compileDebugGroovyWithJack
并且它抱怨无法从外部依赖项(包括支持库)中找到任何 类:
以前有人遇到过这个问题吗?这是一个相当大的障碍:(
此 "should" 工作假设 JVM 测试的方式 运行 仍然与将 jack 添加到工具链之前相同。那就是 compileJava 仍然是一项任务,因为那是 groovy Android 插件所依赖的。
也就是说,这不受支持,可能需要以不同的方式连接到新进程中。
好的,经过进一步调查,我发现这里有两件事在起作用:
- 我在
androidGroovy
扩展中有 skipJavaC = true
,否则编译器将接管我的 cpu,但是
- 这是由于将标志
org.gradle.parallel
设置为 true 造成的。
一旦我注释掉这两个配置,项目就可以完美编译。通过 check
并部署到模拟器 :)
这是我的设置。我有一个包含几个 Java(不是 Android)模块的 Android 项目。
最近我开始使用Spock(这是一个基于JUnit和Groovy的测试框架)。
在 Java 模块上,我只是像这样使用 groovy 插件:
apply plugin: 'groovy'
然后包括这些依赖项:
dependencies {
testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
testCompile 'org.codehaus.groovy:groovy-all:2.4.6'
testCompile 'cglib:cglib-nodep:3.1'
testCompile 'org.objenesis:objenesis:2.2'
}
在我的 Android 主应用程序上,我进行了此设置。在根项目上我有这个类路径依赖:
classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.9'
然后在我应用的应用程序模块上:
apply plugin: 'groovyx.grooid.groovy-android'
并这样配置:
androidGroovy {
options {
configure(groovyOptions) {
// used so groovy can do it's magic, I think, not 100% sure
javaAnnotationProcessing = true
}
}
skipJavaC = true // if disabled my CPU melts for some reason
}
我还通过在 Android 上使用 Jack 标志启用了 Java 8:
jackOptions {
enabled true
}
所有测试 运行 与 Spock 完美结合(甚至是应用程序模块上的测试)。但是,当我尝试 运行 设备或模拟器上的应用程序时,我从 Android studio 收到多个错误。错误发生在任务中:compileDebugGroovyWithJack
并且它抱怨无法从外部依赖项(包括支持库)中找到任何 类:
以前有人遇到过这个问题吗?这是一个相当大的障碍:(
此 "should" 工作假设 JVM 测试的方式 运行 仍然与将 jack 添加到工具链之前相同。那就是 compileJava 仍然是一项任务,因为那是 groovy Android 插件所依赖的。
也就是说,这不受支持,可能需要以不同的方式连接到新进程中。
好的,经过进一步调查,我发现这里有两件事在起作用:
- 我在
androidGroovy
扩展中有skipJavaC = true
,否则编译器将接管我的 cpu,但是 - 这是由于将标志
org.gradle.parallel
设置为 true 造成的。
一旦我注释掉这两个配置,项目就可以完美编译。通过 check
并部署到模拟器 :)