错误:与依赖项“ com.google.code.findbugs:jsr305”冲突


241

我在Android Studio 2.2 Preview 1中使用Android App 创建了一个新项目,并在Google Messaging中使用了Backend模块。这是应用程序文件:

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的新手,无法找到此错误。我如何解决它?

Answers:


641

在您的应用程序中build.gradle添加以下内容:

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

强制Gradle仅针对所有依赖项编译您声明的版本号,无论依赖项声明了哪个版本号。


57
解释此片段可能很有用。
安德鲁加拉施2016年

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
万分感谢。三年半之后,这仍然很有帮助。;)
Kartik

1
@Kartik哈哈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-这对我有用(接受的答案也是如此)。
Ted Hopp

@TedHopp我实际上结束了其他事情。我在针对youtube api进行gradle编译时遇到了问题,因此最终使用了lib jar。
Warpzit

2
这很可能是每个人都在寻找的答案。在大多数情况下,Android Studio默认情况下在依赖项列表中包括Espresso,并且您需要排除一些事项才能与其他库一起使用。除了@Santhosh所说的以外,我还exclude group: 'com.android.support', module: 'support-annotations'
虚报了

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文件中类似这样,并添加另一个exclude会引发异常,所有的雹子脚本都对您仍然
有用

31

方法1:我删除了espresso-core行上的androidTestCompile,该行自动包含在新项目中。然后我的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'c​​om.google.code.findbugs:jsr305:
3.0.1'– Insoft,

18

Gradle插件用户指南中

运行检测测试时,主APK和测试APK都共享相同的类路径。如果主APK和测试APK使用相同的库(例如Guava),但版本不同,则Gradle构建将失败。如果gradle无法捕捉到,您的应用程序在测试和正常运行期间的行为可能会有所不同(包括其中一种情况的崩溃)。

要使构建成功,只需确保两个APK使用相同版本即可。如果错误是与间接依赖关系有关(在build.gradle中未提及的库),只需将较新版本的依赖关系添加到配置中

将此行添加到build.gradle依赖项中,以对两个APK使用较新的版本:

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

供将来参考,您可以检查Gradle控制台,该控制台将在错误旁边提供一个有用的链接,以帮助解决任何gradle构建错误。


8

发生这种情况的原因是diff依赖项使用相同的diff版本库。
因此,有3个步骤或(1个步骤)来解决此问题。

第一

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

到您的build.gradle文件中android {...}

第二名

在Android Studio中
运行打开终端./gradlew -q app:dependencies命令。

第三名

Clean ProjectBuild列表中的android studio菜单栏中单击。
它将重建项目,然后 remove在第一步中编码。

也许您只需要执行第二步。发生错误时,我无法回滚。试试。


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个依赖项试图使用不同版本的3rd依赖项。将以下内容之一添加到app-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(和其他几个人)有一个建议,建议排除对espresso的相同依赖关系,这应该以相同的方式进行,但是如果项目还有其他依赖于同一库的依赖关系(com.google .code.findbugs:jsr305),同样,我们也会遇到同样的问题。因此,为了使用这种方法,您需要从依赖com.google.code.findbugs:jsr305的所有项目依赖项中排除同一组。我个人发现,Espresso Contrib和Espresso Intents也使用com.google.code.findbugs:jsr305。

我希望这种想法将有助于某人意识到这里到底发生了什么以及事情如何工作(不仅仅是复制粘贴一些代码):)。



2

删除gradle文件中的espresso依赖项对我有用。

删除应用程序gradle文件中的这些行:

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

3
如果您只是删除espresso依赖项,则无法再测试您的应用程序,因此该解决方案显然无法正常工作。
海因里希

1

这些谁是获得同样的错误的Android 3.0.1,可以通过简单的更新解决其版本compileSdkVersiontargetSdkVersion 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深度链接分发并收到此错误。我还必须从annotationProcessor中排除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'
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.