Kesalahan: Konflik dengan ketergantungan 'com.google.code.findbugs: jsr305'

241

Saya membuat proyek baru di Android Studio 2.2 Pratinjau 1 dengan Aplikasi Android dan modul Backend dengan Google Messaging. Ini adalah file aplikasi:

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')
}

Tapi itu memberi:

Kesalahan: Konflik dengan ketergantungan 'com.google.code.findbugs: jsr305'. Versi yang diselesaikan untuk aplikasi (1.3.9) dan aplikasi uji (2.0.1) berbeda. Lihat http://g.co/androidstudio/app-test-app-conflict untuk detailnya.

Saya baru mengenal Android dan tidak dapat menemukan kesalahan apa ini. Bagaimana saya memperbaikinya?

Rahul Garg
sumber

Jawaban:

642

Di aplikasi Anda, build.gradletambahkan yang berikut ini:

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

Menerapkan Gradle untuk hanya mengompilasi nomor versi yang Anda sebutkan untuk semua dependensi, tidak peduli nomor versi mana yang dependensi telah nyatakan.

gbhall
sumber
57
Mungkin bermanfaat untuk menjelaskan cuplikan ini.
Andrew Gallasch
18
@Andy secara eksplisit memberi tahu Gradle versi mana yang harus dikompilasi (tidak peduli nomor versi mana yang menyatakan dependensi) ... saat menegakkan v juga 2.0.1bekerja (apa pun, kedua versi harus dipaksa untuk identik).
Martin Zeitler
2
@ MartinZeitler tetapi tidak benar-benar menjelaskan dari mana masalah ini berasal. Saya hari ini mendapatkan masalah ini dengan 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
Terima kasih banyak. Ini masih sangat membantu setelah 3 setengah tahun. ;)
Kartik
1
@Kartik haha ​​jeeze, sudah lama sekali! Jangan khawatir, terima kasih, saya harap ini membantu! Saya sudah lama menghentikan pengembangan Android tapi saya yakin suatu hari saya akan mengambilnya lagi 😊
gbhall
170

Ini karena espresso. Anda dapat menambahkan yang berikut ke aplikasi Anda build.gradeuntuk mengurangi ini.

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') {
  exclude group: 'com.google.code.findbugs'
}
Santhosh
sumber
1
Tidak bekerja Pertanyaan yang ditetapkan sebagai jawaban berfungsi.
Warpzit
2
@Warpzit - Ini bekerja untuk saya (seperti halnya jawaban yang diterima).
Ted Hopp
@TedHopp Saya akhirnya melakukan sesuatu yang lain. Saya punya masalah dengan kompilasi gradle untuk youtube api jadi saya akhirnya menggunakan lib jar sebagai gantinya.
Warpzit
2
Ini kemungkinan besar jawaban yang dicari semua orang. Dalam kebanyakan kasus, Android Studio menyertakan Espresso secara default di daftar dependensi, dan Anda perlu mengecualikan beberapa hal untuk menggunakannya di samping perpustakaan lain. Terlepas dari apa yang dikatakan @Santhosh, saya jugaexclude group: 'com.android.support', module: 'support-annotations'
milosmns
1
Yah saya baru saja menghapus androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2') {kecualikan grup: 'com.google.code.findbugs'} dan berhasil: D karena terutama masalah dengan perbaikan Anda adalah bahwa beberapa orang sudah memiliki * androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2', {kecualikan grup: 'com.android.support', modul: 'support-annotations' }) * sesuatu seperti ini di file gradle mereka, dan menambahkan kecualikan lainnya adalah melempar pengecualian, semua skrip gradail hujan es, masih menjadi upvote untuk Anda :)
ShayHaned
31

METODE 1: Saya menghapus androidTestCompile pada garis inti-espresso yang secara otomatis termasuk dalam proyek baru. Kemudian kompilasi Android Studio saya bersih.

AndroidTestCompile ada di "build.gradle (Module: app)":

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

Saya tidak tahu apakah penghapusan ini akan memiliki masalah di jalan, tetapi pasti berhasil untuk proyek saya saat ini.

METODE 2: Menambahkan pengecualian pada karya findbugs juga:

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'
    })
    ...
}

METODE 3: Memaksa kompilasi dengan versi tertentu:

(Berikut ini saya paksakan untuk dikompilasi dengan versi yang lebih tinggi.)

dependencies {
    ...
    androidTestCompile 'com.google.code.findbugs:jsr305:3.0.0'
    ...
}
Liwen Zhao
sumber
ada pembaruan versi: androidTestCompile 'com.google.code.findbugs: jsr305: 3.0.1'
Insoft
18

Dari Panduan Pengguna Plugin Gradle :

Saat tes instrumentasi dijalankan, APK utama dan APK uji berbagi classpath yang sama. Gradle build akan gagal jika APK utama dan APK uji menggunakan pustaka yang sama (misalnya Guava) tetapi dalam versi yang berbeda. Jika gradle tidak mengetahui hal itu, aplikasi Anda dapat berperilaku berbeda selama pengujian dan selama menjalankan normal (termasuk menabrak salah satu kasus).

Agar pembangunan berhasil, pastikan kedua APK menggunakan versi yang sama. Jika kesalahannya adalah tentang dependensi tidak langsung (perpustakaan yang tidak Anda sebutkan di build.gradle), tambahkan saja dependensi untuk versi yang lebih baru ke konfigurasi

Tambahkan baris ini ke dependensi build.gradle Anda untuk menggunakan versi yang lebih baru untuk kedua APK:

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

Untuk referensi di masa mendatang, Anda dapat memeriksa Konsol Gradle Anda dan itu akan memberikan tautan bermanfaat di sebelah kesalahan untuk membantu dengan kesalahan pembangunan gradle.

lkisac
sumber
8

Alasan mengapa hal ini terjadi adalah karena dependensi menggunakan lib versi diff yang sama.
Jadi, ada 3 langkah atau (1 langkah) untuk menyelesaikan masalah ini.

1

Menambahkan

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

ke build.gradlefile Anda diandroid {...}

Ke-2

Buka terminal di perintah android studio
run ./gradlew -q app:dependencies.

Ke-3

Klik Clean Projectdari menu bar studio android dalam Builddaftar.
Ini akan membangun kembali proyek, dan kemudian removekode pada langkah 1.

Mungkin Anda hanya perlu menjalankan langkah ke-2. Saya tidak bisa mengembalikan ketika kesalahan terjadi. Selamat mencoba.

ElliotCui
sumber
7

Ketika saya menambahkan module: 'jsr305'sebagai pernyataan pengecualian tambahan, semuanya bekerja dengan baik untuk saya.

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

})

Wahib Ul Haq
sumber
6

Masalahnya, sebagaimana dinyatakan dalam log Anda, adalah 2 dependensi mencoba menggunakan versi dependensi ke-3 yang berbeda. Tambahkan salah satu dari berikut ini ke file app-gradle:

androidTestCompile 'com.google.code.findbugs:jsr305:2.0.1'
androidTestCompile 'com.google.code.findbugs:jsr305:1.3.9'
nbtk
sumber
4
  1. Jawaban yang diterima adalah salah satu cara untuk memperbaiki masalah, karena itu hanya akan menerapkan beberapa strategi untuk ketergantungan yang bermasalah (com.google.code.findbugs: jsr305) dan itu akan menyelesaikan masalah di sekitar proyek, menggunakan beberapa versi dari ketergantungan ini. Pada dasarnya ini akan menyelaraskan versi perpustakaan ini di dalam keseluruhan proyek.

  2. Ada jawaban dari @Santhosh (dan beberapa orang lain) yang menyarankan untuk mengecualikan ketergantungan yang sama untuk espresso, yang seharusnya bekerja dengan cara yang sama, tetapi jika proyek memiliki beberapa dependensi lain yang bergantung pada perpustakaan yang sama (com.google .code.findbugs: jsr305), sekali lagi kita akan memiliki masalah yang sama. Jadi untuk menggunakan pendekatan ini, Anda harus mengecualikan grup yang sama dari semua dependensi proyek, yang bergantung pada com.google.code.findbugs: jsr305. Saya pribadi menemukan bahwa Espresso Contrib dan Intents Espresso juga menggunakan com.google.code.findbugs: jsr305.

Saya harap pemikiran ini akan membantu seseorang untuk menyadari apa sebenarnya yang terjadi di sini dan bagaimana segala sesuatunya bekerja (bukan hanya menyalin tempel beberapa kode) :).

Stoycho Andreev
sumber
3

Tambahkan ini ke dependensi untuk memaksakan menggunakan perpustakaan findbugs versi terbaru:

compile 'com.google.code.findbugs:jsr305:2.0.1'
Ayman Al-Absi
sumber
2

menghapus ketergantungan espresso dalam file gradle berfungsi untuk saya.

hapus baris-baris itu di file gradle aplikasi:

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
Kai Wang
sumber
3
Jika Anda hanya menghapus ketergantungan espresso, Anda tidak dapat menguji aplikasi lagi sehingga solusi ini jelas tidak berfungsi.
Heinrich
1

Mereka yang mendapatkan kesalahan yang sama di Android 3.0.1, dapat menyelesaikannya hanya dengan memperbarui versi dari compileSdkVersion dan targetSdkVersion untuk 27 dan juga Melaksanakan com.android.support:appcompat-v7:27.1.1' di dependensi .

Arjun
sumber
1

Dalam proyek ': aplikasi' Anda dapat menambahkan yang berikut ke file app / build.gradle Anda:

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

Untuk reaksi-asli-firebase , menambahkan ini ke app/build.gradlebagian dependensi membuatnya berfungsi untuk saya:

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}
Indivision Dev
sumber
Ini adalah pertama kalinya saya melihat bendera {force = true}. Saya mencobanya dan langsung bekerja untuk saya. Saya perlu menjaga androidx.appcompat di v1.0.2 untuk proyek saya karena perpustakaan yang saya tambahkan memiliki ketergantungan yang diatur ke v1.1.0.
MikeOscarEcho
0

Saya mencoba menggunakan pengiriman deeplink airbnb dan mendapatkan kesalahan ini. saya juga harus mengeluarkan grup findbugs dari 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
sumber
0

REAKSI ALAMI

Jika Anda mencari reaksi solusi asli, maka tulis snippet ini dalam file build gradasi node_modules Anda, mis. Firebase dalam kasus saya.

android {
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.0'
    }
}
Faisal Hassan
sumber