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

Rah*_*arg 238 gradle google-cloud-messaging android-studio build.gradle android-gradle-plugin

我在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')
}
Run Code Online (Sandbox Code Playgroud)

但它给了:

错误:与依赖项'com.google.code.findbugs:jsr305'冲突.app(1.3.9)和测试app(2.0.1)的已解决版本有所不同.有关详细信息,请参阅http://g.co/androidstudio/app-test-app-conflict.

我是Android的新手,无法找到这个错误.我如何解决它?

gbh*_*all 632

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

android {
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
    }
}
Run Code Online (Sandbox Code Playgroud)

强制Gradle只编译您为所有依赖项声明的版本号,无论依赖项声明了哪个版本号.

  • 解释这个片段可能很有用. (57认同)
  • @Andy它明确地告诉Gradle将编译哪个版本(无论依赖项状态是哪个版本号)...同时强制执行v`2.0.1`也适用(无论如何,两个版本都需要强制相同). (18认同)
  • @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' (2认同)

San*_*osh 169

这是因为意式浓缩咖啡.您可以将以下内容添加到应用中build.grade以缓解此问题.

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

  • @Warpzit - 这对我有用(和接受的答案一样). (2认同)
  • 这很可能是每个人都在寻找的答案.在大多数情况下,Android Studio默认情况下会在依赖项列表中包含Espresso,您需要排除一些内容才能将其与其他库一起使用.除了@Santhosh所说的,我还'排除了组:'com.android.support',模块:'support-annotations' (2认同)

Liw*_*hao 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'
    })
    ...
}
Run Code Online (Sandbox Code Playgroud)

我不知道这个删除是否会有任何问题,但它肯定适用于我现在的项目.

方法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'
    })
    ...
}
Run Code Online (Sandbox Code Playgroud)

方法3:使用特定版本强制编译:(

在下面我强制它使用更高版本进行编译.)

dependencies {
    ...
    androidTestCompile 'com.google.code.findbugs:jsr305:3.0.0'
    ...
}
Run Code Online (Sandbox Code Playgroud)


lki*_*sac 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构建错误.


Ell*_*Cui 8

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

1

configurations.all {
    resolutionStrategy.force 'com.google.code.findbugs:jsr305:2.0.1'
}
Run Code Online (Sandbox Code Playgroud)

到你的build.gradle文件android {...}

第2

在android studio
run ./gradlew -q app:dependencies命令中打开终端.

第3

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

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


Wah*_*Haq 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'
Run Code Online (Sandbox Code Playgroud)

})


nbt*_*btk 6

正如您的日志中所述,问题是2个依赖项试图使用不同版本的第3个依赖项.将以下其中一项添加到app-gradle文件中:

androidTestCompile 'com.google.code.findbugs:jsr305:2.0.1'
androidTestCompile 'com.google.code.findbugs:jsr305:1.3.9'
Run Code Online (Sandbox Code Playgroud)