Разрешенные версии для приложения (22.0.0) и тестового приложения (21.0.3) отличаются


179

После обновления до API 22 и поддержки lib revision 22 я получаю следующее предупреждение:

Предупреждение: конфликт с зависимостью 'com.android.support:support-annotations'. Разрешенные версии для приложения (22.0.0) и тестового приложения (21.0.3) отличаются.

Сам Gradle более щадящий, но Android Studio не так уж и много.

У меня нет зависимостей, объявленных с помощью 21.0.3 ... одна из зависимых библиотек использует 21.0.3, и Google забыл обновить ее до конца пакета?

Мой build.gradleс дополнениями вырезан

android {
  compileSdkVersion 22
  buildToolsVersion '22'

  defaultConfig {
    applicationId "com.REDACTED.android"
    minSdkVersion 14
    targetSdkVersion 22
    renderscriptSupportModeEnabled true
    versionName '1.0.0'
    versionCode 100
  }

  buildTypes {
    release {
      minifyEnabled true
      zipAlignEnabled true
      signingConfig signingConfigs.release
    }

    debug {
      minifyEnabled false
      zipAlignEnabled true
      signingConfig signingConfigs.debug
    }
  }

  dependencies {
    provided 'org.projectlombok:lombok:1.16.2'
    googleCompile 'com.google.android.gms:play-services-base:6.5.87'
    compile 'com.android.support:support-v4:22.0.0'
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.android.support:support-v13:22.0.0'
    compile 'com.android.support:cardview-v7:22.0.0'
    compile 'com.android.support:palette-v7:22.0.0'
    compile 'com.android.support:support-annotations:22.0.0'
    compile 'com.github.chrisbanes.photoview:library:1.2.3'
    compile 'org.apache.commons:commons-lang3:3.3.2'
    compile 'commons-io:commons-io:2.4'
    compile 'commons-codec:commons-codec:1.10'
    compile 'com.jakewharton:butterknife:6.1.0'
    compile 'com.jakewharton:disklrucache:2.0.2'
    compile 'com.squareup:otto:1.3.6'
    compile 'com.squareup.picasso:picasso:2.5.0'
    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'com.squareup.okhttp:okhttp:2.2.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
    compile 'com.squareup.okio:okio:1.2.0'
    compile 'com.flaviofaria:kenburnsview:1.0.6'
    compile 'com.edmodo:cropper:1.0.1'
    compile 'com.getbase:floatingactionbutton:1.8.0'
    compile 'com.nispok:snackbar:2.10.2'
    compile 'com.github.ksoichiro:android-observablescrollview:1.5.0'
    compile 'in.srain.cube:grid-view-with-header-footer:1.0.9'
    compile 'de.hdodenhof:circleimageview:1.2.2'
    compile fileTree(dir: 'libs', include: '*.jar')
    // Test Only Dependencies
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'
  }

Обновление: (спасибо Марк)

Похоже, это эспрессо

+--- com.android.support.test:testing-support-lib:0.1 (*)
\--- com.android.support.test.espresso:espresso-contrib:2.0
     +--- com.android.support:recyclerview-v7:21.0.3
     |    +--- com.android.support:support-annotations:21.0.3
     |    \--- com.android.support:support-v4:21.0.3
     |         \--- com.android.support:support-annotations:21.0.3
     +--- com.android.support:support-v4:21.0.3 (*)
     \--- com.android.support.test.espresso:espresso-core:2.0 (*)

5
dependenciesЗадание Gradle может помочь вам определить виновника: gradle.org/docs/current/userguide/…
CommonsWare

1
Спасибо Марк. Похоже, espresso-contribэто причина ...
copolii

2
Вы можете попробовать excludeзаблокировать редакцию recyclerview-v721.0.3, самостоятельно загрузить версию 22.0.0 и помолиться, чтобы они были достаточно совместимы для ваших espresso-contribнужд. Лично я поражен, что вы поддерживаете здравый смысл с этим длинным списком зависимостей ... :-)
CommonsWare

1
Ага. Это добилось цели. Если вы поставите это в качестве ответа, я дам вам бобы :) androidTestCompile ('com.android.support.test.espresso: espresso-contrib: 2.0') {исключить модуль: 'support-annotations'}
copolii

1
Моя же проблема была решена с помощью простого перезапуска студии Android :)
Lakhwinder Singh Dhillon

Ответы:


286

Шаг № 1, когда имеешь дело с такими вещами, это освоиться с командной строкой Gradle.

Шаг № 2 - запустить отчет о зависимостях Gradle (например,gradle -q app:dependencies из корня проекта). Это обеспечит дерево ASCII, как показано в обновлении вопроса, и должно помочь вам определить, что запрашивает конфликтующие версии артефакта.

Шаг № 3 - решить, что нужно заменить. Вы решили заменить только конфликт ( support-annotations). Лично я бы пошел с рутом дерева неправильной версии (recyclerview-v7 ), хотя, насколько я знаю, это может быть не лучшим вариантом действий в этом случае.

Шаг № 4 - добавить excludeдирективу, чтобы заблокировать то, что вы выбрали в Шаге № 3:

androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.0') {
    exclude module: 'support-annotations'
}

Шаг № 5, чтобы проверить черт из этого изменения. То, что вы делаете, говорит, что espresso-contrib имеет дело с выпуском 22.0.0 support-annotations. Это может сработать. Это не может. Это зависит от обратной совместимости конфликта. В этом случае support-annotationsдолжно быть довольно хорошо об этом.

Шаг № 6 состоит в том, чтобы потреблять напиток по вашему выбору, один подходящий для вашего региона и времени суток.


4
Я использовал, exclude group: 'com.android.support', module: 'support-annotations' так как ваша версия вызвала предупреждение «не могу определить типы аргументов» от gradle
appoll

2
Работает ... также подумайте о том, чтобы применить это к com.android.support.test: runner: 0.3, com.android.support.test: rules: 0.3 и com.android.support.test.espresso: espresso-core: 2.2
Уудашр

На шаге 4, куда вы добавляете директиву androidTestCompile? Если я пытаюсь добавить этот синтаксис в блок зависимостей моего приложения, я получаю некоторые синтаксические ошибки. Как это написано сейчас, довольно сложно точно сказать, где вы его добавили.
OYRM

1
@OYRM: "куда вы добавляете директиву androidTestCompile?" - в dependencies. Смотрите этот образец от Чиу-Ки Чан.
CommonsWare

16
Шаг № 6 является ключевым здесь
Odaym

146

Я решил добавить следующую строку в мой скрипт build.gradle.

androidTestCompile 'com.android.support:support-annotations:xx.x.x'

Замените xx.x.xна любую версию аннотаций поддержки, которую использует ваше приложение - это будет показано в ваших зависимостях или в сообщении синхронизации Gradle следующим образом: Resolved version for app (xx.x.x)при возникновении проблем с синхронизацией.


Вот это да. Я делаю это для обновления, Junitно вполне возможно, что я могу сделать это и для других зависимостей.
Джаред Берроуз

10
Это действительно , как образцы Google сделать это , комментарий чтение «Использование Сила поддержки аннотаций в тестовом приложении, так как он используется внутренне модулем бегуна.».
desseim

Это был лучший ответ для меня. Примечание: необходимо обновить до '23 .1.1 ':androidTestCompile 'com.android.support:support-annotations:23.1.1'
Дэвид Мэнпирл

Спасибо, в моем случае строка уже была там, но явно указала конфликтующую версию, обновленную до требуемой, и все работало как чудо.
RAM237

как добавить это в build.gradle?
ubuntu_noob

58

На самом деле это ошибка новой версии Espresso Contrib, вы можете обратиться к этому временному решению : android-testing / build.gradle

configurations.all {
    resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}

2
Это была моя проблема. Билет здесь .
theblang

3
Это создает предупреждение, решение @ RenanNery лучше
Диего Паломар

Это не работает Я все еще получаю ошибку конфликта из-заandroidTestCompile 'com.android.support.test:runner:0.5'
Игорь Ганапольский

1
@bony - Ссылка не работает
Mushtaq Jameel

Это сработало для меня. Я поставил этот блок в "Android {testOptions {<здесь>}}"
jwehrle

23

Пожалуйста, обратитесь https://github.com/JakeWharton/u2020/blob/05a57bf43b9b61f16d32cbe8717af77cd608b0fb/build.gradle#L136-L140

configurations.all {
  resolutionStrategy {
    force 'com.android.support:support-annotations:23.1.1'
  }
}

Это решило мою проблему.

В качестве альтернативы вы можете запустить gradlew в Windows и ./gradlew для mac / linux, чтобы при необходимости загрузить вашу зависимость


1
Это также помогло мне сегодня (2018-11-10), но с версией 26.1.0, чтобы избежать конфликта с версией 27.1.1.
JB Rainsberger

8

Я также столкнулся с этой проблемой, а также с другими конфликтами, связанными с appcompat, и решением, которое я нашел, было добавление тестовых компиляций и установка их в SDK, который вы используете в настоящее время. В моем случае это 25, так что это выглядит так:

androidTestCompile 'com.android.support:support-annotations:25.+'
androidTestCompile 'com.android.support:appcompat-v7:25.+'
androidTestCompile 'com.android.support:support-v4:25.+'
androidTestCompile 'com.android.support:recyclerview-v7:25.+'
androidTestCompile 'com.android.support:design:25.+'

Кроме того, как вы можете видеть, я добавил зависимость дизайна, которая связана с Android Material Design.

Надеюсь, это поможет =)


8

для сдкверсион 25

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

3

вы можете запустить gradlew в Windows и ./gradlew для mac / linux, чтобы при необходимости загрузить вашу зависимость.

Вы можете проверить, зависит ли одна из библиотек от аннотации поддержки или какая-либо библиотека с ошибкой названа, и попытаться исключить ее в gradle, как показано ниже

compile ("org.apache.maven: maven-ant-tasks: $ {mavenAntTaskVer} ‌") {исключить группу: 'junit'}

Ошибка: конфликт с зависимостью «junit: junit». Разрешенные версии для приложения (3.8.1) и тестового приложения (4.12) отличаются. См. G.co/androidstudio/app-test-app-conflict для деталей.

это была ошибка, которую я получал, поэтому я использовал выше градли, чтобы исправить проблему


Кажется, это действительно хороший способ решить эту проблему. И, кроме того, попробуйте запустить эту командную строку ./gradlew: app: dependencies в корневом каталоге вашего проекта, она создаст дерево зависимостей вашего проекта и тщательно проверит, а затем вы обнаружите, откуда возник конфликт.
Фрэнк Джорсн

2

Просто удалите эти строки в вашем файле build.gradle:

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

Это не работает таким образом. Это вызывает больше ошибок для проекта

0

Это распространенная проблема в тестировании инструментария, как указано здесь, и ее можно решить, просто добавив зависимости для androidTestCompile в build.gradle. В моем случае конфликт возник в зависимостях appcompat, recyclerview и design. И решается добавлением следующих строк

    androidTestCompile 'com.android.support:appcompat-v7:23.4.0'
    androidTestCompile 'com.android.support:recyclerview-v7:23.4.0'
    androidTestCompile 'com.android.support:design:23.4.0'

0

У меня была та же проблема с 26.0.0 и 27.1.1, и фактически я просто обновлял предыдущую, чтобы позже заставить ее работать.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.