Android AssertJ 1.0.0与Android gradle 1.1.1

时间:2015-02-27 09:37:04

标签: android gradle android-gradle assertj android-assertj

以下是我发生冲突的build.gradle的一部分:

...
dependencies {
  classpath 'com.android.tools.build:gradle:1.1.1'
}
...
testCompile( 'com.squareup.assertj:assertj-android:1.0.0' )
...

我在日志中看到的问题:

WARNING: Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app (21.0.3) and test app (20.0.0) differ.

显然它从类路径中删除了冲突的依赖项。我不确定它是gradle还是android gradle插件。

我接下来试过了:

  testCompile( 'com.squareup.assertj:assertj-android:1.0.0' ) {
    exclude group: 'com.android.support', module: 'support-annotations'
  }

但我仍然有编译错误,因此排除了依赖。

我接下来试过了:

configurations.all {
  resolutionStrategy {
    // fail eagerly on version conflict (includes transitive dependencies)
    // e.g. multiple different versions of the same dependency (group and name are equal)
    failOnVersionConflict()

    // force certain versions of dependencies (including transitive)
    //  *append new forced modules:
    force 'com.android.support:support-annotations:21.0.3'
    //  *replace existing forced modules with new ones:
    forcedModules = ['com.android.support:support-annotations:21.0.3']
  }
}

但看起来它没有用,因为它没有在第一次冲突中失败,而且我仍然有编译错误。

你的建议是什么?

UPDATE 删除依赖是什么意思 - 我看到很多assertj未找到的编译错误

4 个答案:

答案 0 :(得分:7)

我遇到了同样的问题。这为我解决了这个问题:

testCompile('com.squareup.assertj:assertj-android:1.0.0'){
    exclude group: 'com.android.support', module:'support-annotations'
}

答案 1 :(得分:0)

确定。 android-assertj aar 库的问题。因此,我们需要额外的努力来确保将aar解压缩到build\intermediates

我很确定此功能已包含在robolectric-gradle插件中。但它暂时不起作用。

要解决问题,我已下载android-assertj aar 并解压缩。我将classes.jar重命名为android-assertj.jar(欢迎旧时代)并转移到 lib 文件夹。

我在gradle中将android-asserj依赖替换为next:

  testCompile files( 'lib/android-assertj.jar' )
  testCompile 'org.assertj:assertj-core:1.6.0'

因此测试已编译并能够运行。但是失败了。

要解决此问题,我还将清单文件的位置添加到配置:

@Config( emulateSdk = 18, reportSdk = 18, manifest = "src/main/AndroidManifest.xml" )

此测试是在控制台上运行,而不是从AS运行。我现在必须用AppCompat资源跳舞:)

快乐测试!

UPD:最新的Android gradle插件

不需要此解决方法

答案 2 :(得分:0)

接受的答案对我不起作用。但是,添加以下内容对我有用:

androidTestCompile 'com.android.support:support-annotations:23.0.1'

和:

testCompile 'com.android.support:support-annotations:23.0.1'

基于https://stackoverflow.com/a/29947562/2832027

答案 3 :(得分:-2)

您需要更改:

testCompile( 'com.squareup.assertj:assertj-android:1.0.0' ) {
    exclude group: 'com.android.support', module: 'support-annotations'
}

为:

compile('com.squareup.assertj:assertj-android:1.0.0') {
    exclude group: 'com.android.support', module: 'support-annotations'
}

同时确保您的测试文件夹名为test,而不是androidTest