Ошибка: конфликт с зависимостью "com.google.code.findbugs: jsr305"

241

Я создал новый проект в Android Studio 2.2 Preview 1 с Android App и модулем 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 для компиляции только того номера версии, который вы указали для всех зависимостей, независимо от того, какой номер версии указаны в зависимостях.

gbhall
источник
57
Может быть полезно объяснить этот фрагмент.
Эндрю Галлаш
18
@ И он явно сообщает Gradle, какая версия должна быть скомпилирована (независимо от того, с каким номером версии зависит состояние зависимостей) ... при этом принудительно 2.0.1работает и v (независимо от того, обе версии должны быть идентичными).
Мартин Цайтлер,
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, ха-ха, боже, это было давно! Не беспокойтесь, спасибо, надеюсь, это помогло! Я давно прекратил разработку Android, но я уверен, что однажды я снова его заберу 😊
gbhall
170

Это связано с эспрессо. Вы можете добавить следующее в свои приложения, build.gradeчтобы смягчить это.

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') {
  exclude group: 'com.google.code.findbugs'
}
Santhosh
источник
1
Не работает. Вопрос, который задан как ответ, работает.
Warpzit
2
@Warpzit - это сработало для меня (как и принятый ответ).
Тед Хопп
@TedHopp Я фактически закончил тем, что делал кое-что еще. У меня была проблема с gradle compile для youtube api, поэтому я вместо этого использовал lib jar.
Warpzit
2
Скорее всего, это ответ, который ищут все. В большинстве случаев Android Studio по умолчанию включает Espresso в список зависимостей, и вам нужно исключить несколько вещей, чтобы использовать его вместе с другими библиотеками. Помимо того, что сказал @Santosh, я также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', модуль: 'support-annotations' }) * что-то вроде этого в их файле Gradle, и добавление еще одного исключения вызывает исключение, все сценарии града Gradle, по-прежнему для вас
upvote
31

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

AndroidTestCompile находится в "build.gradle (Module: app)":

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.

lkisac
источник
8

Причина, по которой это происходит, заключается в том, что diff-зависимости используют одну и ту же библиотеку diff-версии.
Итак, есть 3 шага или (1 шаг) для решения этой проблемы.

первый

Добавить

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

в ваш build.gradleфайл вandroid {...}

второй

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

третий

Нажмите в Clean Projectстроке меню андроид студии в Buildсписке.
Он перестроит проект, а затем removeкод в 1-м шаге.

Может быть, вам нужно просто выполнить 2-й шаг. Я не могу откатиться, когда происходит ошибка. Попробуй.

ElliotCui
источник
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-й зависимости. Добавьте одно из следующего в файл app-gradle:

androidTestCompile 'com.google.code.findbugs:jsr305:2.0.1'
androidTestCompile 'com.google.code.findbugs:jsr305:1.3.9'
nbtk
источник
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-файле у меня работает.

удалите эти строки в файле приложения:

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

Для реакции-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 deeplink dispatch и получил эту ошибку. мне также пришлось исключить группу findbugs из annotationProcessor.

//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'
    }
j2emanue
источник
0

РЕАГИРУЙТЕ НАРОДНОЕ

Если вы ищете решение для нативного реагирования, то напишите этот фрагмент в ваш файл сборки gradle для node_modules, например, firebase в моем случае.

android {
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.0'
    }
}
Фейсал Хасан
источник