Android AssertJ 1.0.0 с Android-градиентом 1.1.1

Вот часть моего 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) // eg 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 не найдены

Я столкнулся с тем же вопросом. Это исправило это для меня:

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

ОК. Проблема, что android-assertj является android-assertj библиотекой. Поэтому нам нужно добавить дополнительные усилия, чтобы гарантировать, что aar распакован для build\intermediates .

Я уверен, что эта функциональность была включена в robolectric-gradle . Но пока это не работает.

Чтобы исправить проблему, я загрузил android-assertj и разархивировал ее. Я переименовал classes.jar в android-assertj.jar (приветствую старые времена) и перешел в папку lib .

И я заменил зависимость android-asserj следующей в моей градиенте:

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

Таким образом, тесты компилируются и могут запускаться. Но неудача.

Чтобы исправить это, я также добавил местоположение файла манифеста в config:

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

После этого тесты работают с консоли, но не с AS. Мне нужно танцевать сейчас с ресурсами AppCompat 🙂

Счастливое тестирование!

UPD: Это обходное решение не требуется с последним плагином для Android

Принятый ответ не сработал для меня. Однако, добавив следующее, работа была для меня:

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

а также:

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

На основе https://stackoverflow.com/a/29947562/2832027

Вам нужно изменить:

 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