运行 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 并部署到模拟器 :)