Вирішені версії для програми (22.0.0) та тестової програми (21.0.3) відрізняються


179

Після оновлення до API 22 та підтримки версії 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
Завдання Gradle dependenciesможе допомогти вам визначити винуватця: 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: правила: 0.3 і com.android.support.test.espresso: espresso-core: 2.2
uudashr

На кроці №4, куди ви додаєте директиву androidTestCompile? Якщо я спробую додати цей синтаксис до блоку залежностей мого додатка, я отримаю деякі синтаксичні помилки. Оскільки це написано зараз, трохи важко точно сказати, куди ви додали.
OYRM

1
@OYRM: "куди ви додаєте директиву androidTestCompile?" - в dependencies. Дивіться цей зразок від Chiu-Ki Chan.
CommonsWare

16
Крок №6 тут головний
Одайм

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 , коментар із текстом "Примусове використання анотацій підтримки в тестовому додатку, оскільки він використовується внутрішньо модулем бігуна".
дессейм

Це була найкраща відповідь для мене. Примітка. Потрібно оновити до '23 .1.1 ':androidTestCompile 'com.android.support:support-annotations:23.1.1'
David Manpearl

Дякую, у моєму випадку рядок уже був, але явно вказав конфліктну версію, оновлений до потрібної і все працювало як шарм.
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 - Link зламана
Mushtaq Джаміль

Це працювало для мене. Я поставив цей блок у "android {testOptions {<here>}}"
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

для sdkversion 25

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

3

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

Ви можете перевірити, чи має одна з бібліотек залежність від анотації про підтримку чи будь-яка бібліотека з названою помилково, і спробувати виключити її в gradle щось на зразок нижче

компілювати ("org.apache.maven: maven-ant-task: $ {mavenAntTaskVer} ‌") {виключити групу: 'junit'}

Помилка: конфлікт із залежністю 'junit: junit'. Вирішені версії для програми (3.8.1) та тестової програми (4.12) відрізняються. Деталі див. У g.co/androidstudio/app-test-app-conflict.

це була помилка, яку я отримував, тому я використав вище лінії gradle, щоб вирішити проблему


Це здається дійсно хорошим способом вирішити подібну проблему. Крім того, спробуйте запустити цей ./gradlew: app: командний рядок команд залежності в кореневому каталозі вашого проекту, він складе дерево про залежності вашого проекту та ретельно перевірить, тоді ви знайдете, звідки конфлікт.
відвертий jorsn

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, reciklier та дизайну. І вирішується додаванням наступних рядків

    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.