Versi yang diselesaikan untuk aplikasi (22.0.0) dan aplikasi uji (21.0.3) berbeda

179

Setelah memutakhirkan ke API 22 dan mendukung revisi lib 22 saya mendapatkan peringatan berikut:

Peringatan: Konflik dengan ketergantungan 'com.android.support:support-annotations'. Versi yang diselesaikan untuk aplikasi (22.0.0) dan aplikasi uji (21.0.3) berbeda.

Gradle sendiri lebih memaafkan, tetapi Android Studio, tidak begitu banyak.

Saya tidak memiliki dependensi yang dideklarasikan dengan 21.0.3 ... apakah salah satu pustaka dependen menggunakan 21.0.3 dan Google lupa untuk memperbaruinya dengan sisa batch?

Saya build.gradledengan ekstra dipotong

android {
  compileSdkVersion 22
  buildToolsVersion '22'

  defaultConfig {
    applicationId "com.REDACTED.android"
    minSdkVersion 14
    targetSdkVersion 22
    renderscriptSupportModeEnabled true
    versionName '1.0.0'
    versionCode 100
  }

  buildTypes {
    release {
      minifyEnabled true
      zipAlignEnabled true
      signingConfig signingConfigs.release
    }

    debug {
      minifyEnabled false
      zipAlignEnabled true
      signingConfig signingConfigs.debug
    }
  }

  dependencies {
    provided 'org.projectlombok:lombok:1.16.2'
    googleCompile 'com.google.android.gms:play-services-base:6.5.87'
    compile 'com.android.support:support-v4:22.0.0'
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.android.support:support-v13:22.0.0'
    compile 'com.android.support:cardview-v7:22.0.0'
    compile 'com.android.support:palette-v7:22.0.0'
    compile 'com.android.support:support-annotations:22.0.0'
    compile 'com.github.chrisbanes.photoview:library:1.2.3'
    compile 'org.apache.commons:commons-lang3:3.3.2'
    compile 'commons-io:commons-io:2.4'
    compile 'commons-codec:commons-codec:1.10'
    compile 'com.jakewharton:butterknife:6.1.0'
    compile 'com.jakewharton:disklrucache:2.0.2'
    compile 'com.squareup:otto:1.3.6'
    compile 'com.squareup.picasso:picasso:2.5.0'
    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'com.squareup.okhttp:okhttp:2.2.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
    compile 'com.squareup.okio:okio:1.2.0'
    compile 'com.flaviofaria:kenburnsview:1.0.6'
    compile 'com.edmodo:cropper:1.0.1'
    compile 'com.getbase:floatingactionbutton:1.8.0'
    compile 'com.nispok:snackbar:2.10.2'
    compile 'com.github.ksoichiro:android-observablescrollview:1.5.0'
    compile 'in.srain.cube:grid-view-with-header-footer:1.0.9'
    compile 'de.hdodenhof:circleimageview:1.2.2'
    compile fileTree(dir: 'libs', include: '*.jar')
    // Test Only Dependencies
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'
  }

Pembaruan: (Terima kasih Tandai)

Sepertinya itu espresso-contrib

+--- com.android.support.test:testing-support-lib:0.1 (*)
\--- com.android.support.test.espresso:espresso-contrib:2.0
     +--- com.android.support:recyclerview-v7:21.0.3
     |    +--- com.android.support:support-annotations:21.0.3
     |    \--- com.android.support:support-v4:21.0.3
     |         \--- com.android.support:support-annotations:21.0.3
     +--- com.android.support:support-v4:21.0.3 (*)
     \--- com.android.support.test.espresso:espresso-core:2.0 (*)
copolii
sumber
5
dependenciesTugas Gradle mungkin dapat membantu Anda mengidentifikasi penyebabnya: gradle.org/docs/current/userguide/…
CommonsWare
1
Mark terima kasih. Sepertinya espresso-contribpenyebabnya ...
copolii
2
Anda dapat mencoba excludeuntuk memblokir edisi 21.0.3 recyclerview-v7, menarik edisi 22.0.0 sendiri, dan berdoa agar mereka cukup kompatibel untuk espresso-contribkebutuhan. Secara pribadi, saya kagum bahwa Anda mempertahankan kewarasan Anda dengan daftar dependensi yang panjang ... :-)
CommonsWare
1
Ya. Ini berhasil. Jika Anda menganggapnya sebagai jawaban, saya akan memberikan Anda kacang :) androidTestCompile ('com.android.support.test.espresso: espresso-contrib: 2.0') {kecualikan module: 'support-annotations'}
copolii
1
Masalah saya yang sama teratasi hanya dengan me-restart studio android sederhana :)
Lakhwinder Singh Dhillon

Jawaban:

286

Langkah # 1 ketika berhadapan dengan hal semacam ini adalah untuk merasa nyaman dengan baris perintah Gradle.

Langkah # 2 adalah menjalankan laporan dependensi Gradle (mis., gradle -q app:dependenciesDari root proyek). Ini akan memberikan pohon ASCII seperti yang ditunjukkan dalam pembaruan pertanyaan, dan itu akan membantu Anda mengidentifikasi apa yang meminta versi artefak yang saling bertentangan.

Langkah # 3 adalah memutuskan apa yang perlu diganti. Anda memilih untuk mengganti hanya konflik ( support-annotations). Secara pribadi, saya akan pergi dengan root dari pohon versi yang salah ( recyclerview-v7), meskipun untuk semua yang saya tahu itu mungkin bukan tindakan terbaik dalam kasus ini.

Langkah # 4 adalah menambahkan excludearahan untuk memblokir apa yang Anda pilih pada Langkah # 3:

androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.0') {
    exclude module: 'support-annotations'
}

Langkah # 5 adalah untuk menguji heck out dari perubahan ini. Apa yang Anda lakukan adalah mengatakan bahwa espresso-contrib harus berurusan dengan edisi 22.0.0 support-annotations. Itu mungkin berhasil. Itu mungkin tidak. Itu tergantung pada kompatibilitas konflik. Dalam hal ini, support-annotationsharusnya cukup bagus tentang hal itu.

Langkah # 6 adalah mengonsumsi minuman pilihan Anda, yang sesuai untuk lokal dan waktu Anda.

CommonsWare
sumber
4
Saya menggunakan exclude group: 'com.android.support', module: 'support-annotations' karena versi Anda memunculkan peringatan "tidak dapat menyimpulkan jenis argumen" dari gradle
appoll
2
Bekerja ... juga mempertimbangkan untuk menerapkan ini ke com.android.support.test: runner: 0.3, com.android.support.test: aturan: 0.3 dan com.android.support.test.espresso: espresso-core: 2.2
uudashr
Pada Langkah # 4, di mana Anda menambahkan arahan androidTestCompile? Jika saya mencoba menambahkan sintaks itu ke blok dependensi aplikasi saya, saya mendapatkan beberapa kesalahan sintaksis. Karena ini ditulis sekarang, agak sulit untuk mengatakan dengan tepat di mana Anda menambahkannya.
OYRM
1
@OYRM: "di mana Anda menambahkan arahan androidTestCompile?" - di dependencies. Lihat contoh ini dari Chiu-Ki Chan.
CommonsWare
16
Langkah # 6 adalah kunci di sini
Odaym
146

Apa yang saya lakukan untuk menyelesaikannya adalah menambahkan baris di bawah ini ke skrip build.gradle saya

androidTestCompile 'com.android.support:support-annotations:xx.x.x'

Ganti xx.x.xdengan versi anotasi dukungan apa pun yang digunakan aplikasi Anda - ini akan ditampilkan dalam dependensi Anda, atau pesan sinkronisasi Gradle sebagai: Resolved version for app (xx.x.x)jika ada masalah sinkronisasi.

Renan Nery
sumber
Wow. Saya melakukan ini untuk meningkatkan Junittetapi benar-benar untuk mendapatkan saya bisa melakukannya untuk dependensi lain juga.
Jared Burrows
10
Ini memang bagaimana sampel Google melakukannya , sebuah komentar bertuliskan "Paksa penggunaan anotasi dukungan dalam aplikasi pengujian, karena ini digunakan secara internal oleh modul pelari.".
desseim
Ini jawaban terbaik untukku. Catatan: Harus diperbarui ke '23 .1.1 ':androidTestCompile 'com.android.support:support-annotations:23.1.1'
David Manpearl
Terima kasih, dalam kasus saya, saluran sudah ada di sana, tetapi secara eksplisit menyatakan versi yang saling bertentangan, diperbarui ke versi yang diperlukan dan semuanya bekerja seperti pesona.
RAM237
bagaimana cara menambahkan ini ke build.gradle?
ubuntu_noob
58

Sebenarnya ini adalah bug dari versi pembaruan baru dari Espresso Contrib, Anda dapat merujuk solusi ini: android-testing / build.gradle

configurations.all {
    resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}
kurus
sumber
2
Ini masalah saya. Tiket ada di sini .
theblang
3
Ini menciptakan peringatan, solusi @ RenanNery lebih baik
Diego Palomar
Itu tidak berhasil. Saya masih mendapatkan kesalahan konflik karenaandroidTestCompile 'com.android.support.test:runner:0.5'
IgorGanapolsky
1
@ kurus - Tautan rusak
Mushtaq Jameel
Ini berhasil untuk saya. Saya meletakkan blok ini di "android {testOptions {<here>}}"
jwehrle
23

Silakan merujuk https://github.com/JakeWharton/u2020/blob/05a57bf43b9b61f16d32cbe8717af77cd608b0fb/build.gradle#L136-L140

configurations.all {
  resolutionStrategy {
    force 'com.android.support:support-annotations:23.1.1'
  }
}

Ini menyelesaikan masalah saya.

Atau Anda dapat menjalankan gradlew di windows dan ./gradlew untuk mac / linux ini akan mengunduh ketergantungan Anda saat diperlukan

maruti060385
sumber
1
Ini juga membantu saya hari ini (2018-11-10), tetapi dengan versi 26.1.0, untuk menghindari konflik dengan versi 27.1.1.
JB Rainsberger
8

Saya juga mengalami masalah ini serta konflik lain yang melibatkan appcompat dan solusi yang saya temukan adalah menambahkan kompilasi tes dan mengaturnya ke SDK yang sedang Anda gunakan. Dalam kasus saya ini 25, jadi terlihat seperti ini:

androidTestCompile 'com.android.support:support-annotations:25.+'
androidTestCompile 'com.android.support:appcompat-v7:25.+'
androidTestCompile 'com.android.support:support-v4:25.+'
androidTestCompile 'com.android.support:recyclerview-v7:25.+'
androidTestCompile 'com.android.support:design:25.+'

Selanjutnya, seperti yang Anda lihat saya menambahkan ketergantungan desain, yang terkait dengan Desain Material Android.

Semoga ini membantu =)

gmartinsnull
sumber
8

untuk sdkversion 25

     androidTestCompile 'com.android.support:support-annotations:25.2.0'
dc10
sumber
3

Anda dapat menjalankan gradlew di windows dan ./gradlew untuk mac / linux ini akan mengunduh ketergantungan Anda saat diperlukan.

Anda dapat memeriksa apakah salah satu pustaka memiliki ketergantungan pada anotasi dukungan atau pustaka mana pun yang namanya salah dan mencoba untuk mengecualikannya secara bertahap seperti di bawah ini

kompilasi ("org.apache.maven: maven-semut-tugas: $ {mavenAntTaskVer} ‌") {kecualikan grup: 'junit'}

Kesalahan: Konflik dengan ketergantungan 'junit: junit'. Versi yang diselesaikan untuk aplikasi (3.8.1) dan aplikasi uji (4.12) berbeda. Lihat g.co/androidstudio/app-test-app-conflict untuk detailnya.

ini adalah kesalahan yang saya dapatkan sehingga saya menggunakan garis gradle di atas untuk memperbaiki masalah

maruti060385
sumber
Ini sepertinya cara yang sangat baik untuk menyelesaikan masalah seperti ini. Dan di samping itu, cobalah untuk menjalankan ini ./gradlew: app: baris perintah dependensi di bawah direktori root proyek Anda, itu akan membuat pohon tentang dependensi proyek Anda, dan memeriksa dengan cermat, kemudian Anda akan menemukan dari mana konflik berasal.
frank jorsn
2

Hapus saja baris-baris ini di file build.gradle Anda:

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
shiv om Bhardwaj
sumber
Itu tidak bekerja seperti itu. Ini menyebabkan lebih banyak kesalahan pada proyek
0

Ini adalah masalah umum dalam uji instrumentasi seperti yang dinyatakan di sini dan dapat diatasi hanya dengan menambahkan dependensi untuk androidTestCompile di dalam build.gradle. Dalam kasus saya, konflik muncul di appcompat, recyclerview, dan dependensi desain. Dan diselesaikan dengan menambahkan baris berikut

    androidTestCompile 'com.android.support:appcompat-v7:23.4.0'
    androidTestCompile 'com.android.support:recyclerview-v7:23.4.0'
    androidTestCompile 'com.android.support:design:23.4.0'
cammando
sumber
0

Saya mengalami masalah yang sama dengan 26.0.0 dan 27.1.1 dan sebenarnya hanya meningkatkan yang sebelumnya untuk membuatnya berfungsi.

Senjata X
sumber