2

这是我的设置。我有一个带有几个 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它抱怨无法从外部依赖项(包括支持库)中找到任何类:

在此处输入图像描述

有没有人遇到过这个问题?这是一个相当大的障碍:(

4

2 回答 2

0

假设 JVM 测试的运行方式仍然与将 jack 添加到工具链之前的方式相同,那么这个“应该”工作。那就是 compileJava 仍然是一项任务,因为这是 groovy Android 插件所依赖的。

话虽如此,这不受支持,可能需要以不同的方式连接到新流程中。

于 2016-05-19T00:02:32.130 回答
0

好的,经过进一步调查,我发现这里有两件事在起作用:

  • skipJavaC = trueandroidGroovy扩展中,否则编译器会接管我的 cpu,但是
  • 这是由于将标志org.gradle.parallel设置为 true 造成的。

一旦我注释掉了这两种配置,项目就可以完美编译。传递check和部署到模拟器:)

于 2016-05-23T22:49:24.373 回答