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

После обновления до 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 (*)

10 ответов

Решение

Шаг № 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 состоит в том, чтобы потреблять напиток по вашему выбору, один подходящий для вашего региона и времени суток.

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

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

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

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

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

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

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

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

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

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

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

Я также столкнулся с этой проблемой, а также с другими конфликтами, связанными с 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.

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

Вы можете запустить 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.

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

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

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

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

Это распространенная проблема в тестировании инструментария, как указано здесь, и ее можно решить, просто добавив зависимости для 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'
Другие вопросы по тегам