Помилка: конфлікт із залежністю 'com.google.code.findbugs: jsr305'


241

Я створив новий проект в Android Studio 2.2 Preview 1 за допомогою програми Android та Backend модуля з Google Messaging. Це файл програми:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    defaultConfig {
        applicationId "com.xxx.xxx"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1'
    compile 'com.google.android.gms:play-services-gcm:9.0.0'
    testCompile 'junit:junit:4.12'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support:support-annotations:23.4.0'
    compile project(path: ':backend', configuration: 'android-endpoints')
}

Але це дає:

Помилка: конфлікт із залежністю 'com.google.code.findbugs: jsr305'. Вирішені версії програми (1.3.9) та тестової програми (2.0.1) відрізняються. Докладні відомості див. У розділі http://g.co/androidstudio/app-test-app-conflict .

Я новачок в Android і не можу знайти, що це за помилка. Як це виправити?

Відповіді:


642

У додаток build.gradleдодайте наступне:

android {
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
    }
}

Змушує Gradle компілювати лише номер версії, який ви вказали для всіх залежностей, незалежно від того, який номер версії вказали залежності.


57
Можливо, буде корисно пояснити цей фрагмент.
Ендрю Галлаш

18
@Andy чітко повідомляє Gradle, яку версію слід скласти (незалежно від того, який номер версії має стан залежності) ... і примусово виконувати v 2.0.1роботи (що завгодно, обидві версії повинні бути змушені бути однаковими).
Мартін Цайтлер

2
@MartinZeitler, але це насправді не пояснює, звідки ця проблема. Я сьогодні отримую цю проблему з testImplementation 'junit: junit: 4.12' androidTestImplementation 'com.android.support.test: runner: 1.0.1' androidTestImplementation 'com.android.support.test.espresso: espresso-core: 3.0.1'
fralbo

1
Дякую тонну. Це справді корисно ще через 3 з половиною роки. ;)
Картик

1
@Kartik haha ​​jeeze, це було давно! Не хвилюйтесь, дякую, сподіваюся, це допомогло! Я давно зупинив розробку Android, але впевнений, що одного разу я знову підберу її 😊
gbhall

170

Це пов’язано з еспресо. Ви можете додати наступне до своїх програм, build.gradeщоб пом'якшити це.

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') {
  exclude group: 'com.google.code.findbugs'
}

1
Не працює. Питання, яке задається як відповідь, працює.
Warpzit

2
@Warpzit - Це працювало для мене (як і прийнята відповідь).
Тед Хопп

@TedHopp Я фактично закінчив щось інше. У мене виникла компіляція gradle для api youtube, тому я в кінцевому підсумку використовував jar lib.
Warpzit

2
Це, швидше за все, відповідь, яку всі шукають. У більшості випадків Android Studio за замовчуванням включає Espresso у списку залежностей, і вам потрібно виключити пару речей, щоб використовувати його поряд з іншими бібліотеками. Крім того, що сказав @Santhosh, я такожexclude group: 'com.android.support', module: 'support-annotations'
milosmns

1
Ну щойно я видалив androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2') {виключити групу: 'com.google.code.findbugs'}, і це спрацювало: D, оскільки в першу чергу проблема з ваше виправлення полягає в тому, що деякі люди вже мають * androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2', {виключити групу: 'com.android.support', модуль: 'підтримка-анотації' }) * щось подібне у їхньому файлі gradle, а додавання ще одного виключення - це виняток, усі сценарії граду градусів, все ще актуальне для вас :)
ShayHaned

31

МЕТОД 1: Я видалив androidTestCompile з еспресо-основної лінії, яка автоматично була включена в новий проект. Тоді моя Android Studio збирає чисто.

AndroidTestCompile знаходиться у "build.gradle (Модуль: додаток)":

dependencies {
    ...
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    ...
}

Я не знаю, чи матиме це видалення якісь проблеми в дорозі, але це, безумовно, працює для мого поточного проекту зараз.

МЕТОД 2: Додавання виключення до Findbugs також працює:

dependencies {
    ...
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
        exclude group: 'com.google.code.findbugs'
    })
    ...
}

МЕТОД 3: Примушування компілювати з певною версією:

(Далі я змушую її компілювати з вищою версією.)

dependencies {
    ...
    androidTestCompile 'com.google.code.findbugs:jsr305:3.0.0'
    ...
}

є оновлення версії: androidTestCompile 'com.google.code.findbugs: jsr305: 3.0.1'
Insoft

18

З посібника користувача Gradle Plugin :

Коли тести інструментарію виконуються, і основний APK, і тестовий APK мають однаковий клас. Збірка Gradle не вдасться, якщо основний APK і тестовий APK використовують одну і ту ж бібліотеку (наприклад, Guava), але в різних версіях. Якщо gradle цього не зрозуміла, ваш додаток може поводитися по-різному під час тестів та під час звичайного запуску (включаючи збої в одному з випадків).

Щоб збірка була успішною, просто переконайтесь, що обидва APK використовують однакову версію. Якщо помилка стосується непрямої залежності (бібліотека, яку ви не згадували у build.gradle), просто додайте до конфігурації залежність нової версії.

Додайте цей рядок до залежностей build.gradle, щоб використовувати новішу версію для обох APK:

compile('com.google.code.findbugs:jsr305:2.0.1')

Для подальшого ознайомлення ви можете перевірити консоль Gradle, і вона надасть корисне посилання поруч із помилкою, щоб допомогти з будь-якими помилками побудови gradle.


8

Причина, чому це трапляється, полягає в тому, що різницька залежність використовує одну і ту ж ліб різної версії.
Отже, є 3 кроки або (1 крок) для вирішення цієї проблеми.

1-й

Додайте

configurations.all {
    resolutionStrategy.force 'com.google.code.findbugs:jsr305:2.0.1'
}

до вашого build.gradleфайлу вandroid {...}

2-й

Відкрийте термінал в команді
запуску андроїд-студії ./gradlew -q app:dependencies.

3-й

Клацніть Clean Projectу Buildсписку рядка меню андроїд-студії .
Він відновить проект, а потім removeкод на 1-му кроці.

Можливо, вам потрібно просто виконати другий крок. Я не можу відкатати, коли виникає помилка. Спробуйте.


7

Коли я додав module: 'jsr305'як додатковий засіб виключення, для мене все вийшло чудово.

 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
exclude module: 'jsr305'

})


6

Проблема, як зазначено у ваших журналах, - це 2 залежності, які намагаються використовувати різні версії 3-ї залежності. Додайте одне з наступного до файлу gradle програми:

androidTestCompile 'com.google.code.findbugs:jsr305:2.0.1'
androidTestCompile 'com.google.code.findbugs:jsr305:1.3.9'

4
  1. Прийнята відповідь є одним із способів виправити проблему, оскільки вона просто застосує певну стратегію для проблемної залежності (com.google.code.findbugs: jsr305), і вона вирішить проблему навколо проекту, використовуючи деяку версію цієї залежності. В основному це вирівняє версії цієї бібліотеки всередині проекту.

  2. Є відповідь від @Santhosh (та ще кількох людей), які пропонують виключити ту саму залежність від еспресо, яка повинна працювати аналогічно, але якщо проект має деякі інші залежності, які залежать від тієї ж бібліотеки (com.google .code.findbugs: jsr305), знову будемо мати те саме питання. Тож для використання цього підходу вам потрібно буде виключити ту саму групу з усіх залежностей проекту, які залежать від com.google.code.findbugs: jsr305. Я особисто виявив, що Espresso Contrib та Espresso Intents також використовують com.google.code.findbugs: jsr305.

Я сподіваюся, що ці думки допоможуть комусь зрозуміти, що саме тут відбувається і як все працює (не просто скопіюйте вставити якийсь код) :).


3

Додайте це до залежностей, щоб змусити використовувати останню версію бібліотеки findbugs:

compile 'com.google.code.findbugs:jsr305:2.0.1'

2

видалити залежності еспресо у файлі gradle працює для мене.

видаліть ці рядки з файлу gradle програми:

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})

3
Якщо ви просто видалите залежність від еспресо, ви більше не можете тестувати свою програму, тому це рішення явно не працює.
Генріх

1

Ті , хто отримує таку ж помилку в Android 3.0.1, може розв'язати цю проблему просто оновити версію про compileSdkVersion і targetSdkVersion до 27 , а також Реалізувати com.android.support:appcompat-v7:27.1.1 'в залежності .


1

У проекті ": app" ви можете додати наступне у файл app / build.gradle:

android {
 configurations.all {
    resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
 }
 }

1

Для react-native-firebase , додавши це до app/build.gradleрозділу залежності, він змусив мене працювати:

implementation('com.squareup.okhttp3:okhttp:3.12.1') { force = true }
implementation('com.squareup.okio:okio:1.15.0') { force = true }
implementation('com.google.code.findbugs:jsr305:3.0.2') { force = true}

Це перший раз, коли я бачив прапор {force = true}. Я спробував це, і це спрацювало відразу. Мені потрібно було тримати androidx.appcompat на v1.0.2 для мого проекту, оскільки бібліотека, яку я додав, має цю залежність, встановлену на v1.1.0.
MikeOscarEcho

0

я намагався використати диспетчер посилання з поштою airbnb і отримав цю помилку. Мені довелося також виключити групу findbugs з анотаціїПроцесор.

//airBnb
    compile ('com.airbnb:deeplinkdispatch:3.1.1'){
        exclude group:'com.google.code.findbugs'
    }
    annotationProcessor ('com.airbnb:deeplinkdispatch-processor:3.1.1'){
        exclude group:'com.google.code.findbugs'
    }

0

РЕАГУЙТЕ НАТИВ

Якщо ви шукаєте нативне рішення реагувати, тоді запишіть цей фрагмент у ваш уражений node_modules gradle файл збірки, наприклад, firebase в моєму випадку.

android {
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.0'
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.