Các phiên bản đã giải quyết cho ứng dụng (22.0.0) và ứng dụng thử nghiệm (21.0.3) khác nhau


179

Sau khi nâng cấp lên API 22 và hỗ trợ sửa đổi lib 22 Tôi nhận được cảnh báo sau:

Cảnh báo: Xung đột với sự phụ thuộc 'com.android.support:support-annotations'. Các phiên bản đã giải quyết cho ứng dụng (22.0.0) và ứng dụng thử nghiệm (21.0.3) khác nhau.

Bản thân Gradle dễ tha thứ hơn, nhưng Android Studio, không quá nhiều.

Tôi không có phụ thuộc được khai báo với 21.0.3 ... là một trong những thư viện phụ thuộc sử dụng 21.0.3 và Google quên cập nhật nó với phần còn lại của lô?

Của tôi build.gradlevới các tính năng bổ sung

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

Cập nhật: (Cảm ơn Mark)

Hình như đó là 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 (*)

5
dependenciesNhiệm vụ Gradle có thể giúp bạn xác định thủ phạm: gradle.org/docs/civerse/userguide/ Kẻ
CommonsWare

1
Cảm ơn Mark. Có vẻ như đó espresso-contriblà nguyên nhân ...
copolii 11/03/2015

2
Bạn có thể thử excludechặn phiên bản 21.0.3 recyclerview-v7, tự mình kéo phiên bản 22.0.0 và cầu nguyện rằng chúng đủ tương thích với espresso-contribnhu cầu của họ. Cá nhân tôi rất ngạc nhiên khi bạn duy trì sự tỉnh táo của mình với danh sách phụ thuộc dài đó ... :-)
CommonsWare

1
Vâng. Điều này đã lừa Nếu bạn đưa ra câu trả lời, tôi sẽ cung cấp cho bạn các loại đậu :) androidTestCompile ('com.android.support.test.espresso: espresso-contrib: 2.0') {loại trừ mô-đun: 'support-annotations'}
copolii

1
Vấn đề tương tự của tôi đã được giải quyết chỉ bằng cách khởi động lại studio android đơn giản :)
Lakhwinder Singh Dhillon

Câu trả lời:


286

Bước # 1 khi làm việc với loại điều này là để làm quen với Gradle dòng lệnh.

Bước # 2 là chạy báo cáo phụ thuộc Gradle (ví dụ: gradle -q app:dependenciestừ gốc dự án). Điều này sẽ cung cấp cây ASCII như được hiển thị trong bản cập nhật cho câu hỏi và nó sẽ giúp bạn xác định những gì đang yêu cầu cho các phiên bản tạo tác xung đột.

Bước # 3 là quyết định những gì cần thay thế. Bạn đã chọn để thay thế chỉ xung đột ( support-annotations). Cá nhân, tôi đã đi với gốc của cây phiên bản sai ( recyclerview-v7), mặc dù đối với tất cả tôi biết rằng đó có thể không phải là cách hành động tốt nhất trong trường hợp này.

Bước # 4 là thêm lệnh excludeđể chặn những gì bạn đã chọn trong Bước # 3:

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

Bước # 5 là kiểm tra sự thay đổi này. Những gì bạn đang làm là nói rằng espresso-contrib để đối phó với các phiên bản 22.0.0 của support-annotations. Điều đó có thể làm việc. Điều đó có thể không. Nó phụ thuộc vào khả năng tương thích ngược của xung đột. Trong trường hợp này, support-annotationsnên khá tốt về nó.

Bước # 6 là tiêu thụ đồ uống bạn chọn, một loại thích hợp cho địa phương và thời gian trong ngày của bạn.


4
Tôi đã sử dụng exclude group: 'com.android.support', module: 'support-annotations' kể từ khi phiên bản của bạn đưa ra cảnh báo "không thể suy ra các loại đối số" từ lớp
appoll

2
Hoạt động ... cũng xem xét để áp dụng điều này cho com.android.support.test: người chạy: 0,3, com.android.support.test: quy tắc: 0,3 và com.android.support.test.espresso: espresso-core: 2.2
uudashr

Trong Bước # 4, bạn đang thêm lệnh androidTestCompile đó ở đâu? Nếu tôi cố gắng thêm cú pháp đó vào khối phụ thuộc của ứng dụng, tôi sẽ gặp một số lỗi cú pháp. Vì điều này được viết bây giờ, thật khó để nói chính xác nơi bạn thêm nó.
OYRM

1
@OYRM: "bạn đang thêm lệnh androidTestCompile đó ở đâu?" - trong dependencies. Xem mẫu này từ Chiu-Ki Chan.
CommonsWare

16
Bước # 6 là chìa khóa ở đây
Odaym

146

Những gì tôi đã làm để giải quyết nó là thêm dòng dưới đây vào tập lệnh build.gradle của tôi

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

Thay thế xx.x.xbằng bất kỳ phiên bản chú thích hỗ trợ nào mà ứng dụng của bạn đang sử dụng - điều này sẽ được hiển thị trong phần phụ thuộc của bạn hoặc thông báo đồng bộ hóa Gradle như: Resolved version for app (xx.x.x)nếu có sự cố đồng bộ hóa.


Ồ Tôi làm điều này để nâng cấp Junitnhưng hoàn toàn vì tôi có thể làm điều đó cho các phụ thuộc khác.
Jared Burrows

10
Đây thực sự là cách các mẫu Google thực hiện nó , một bình luận có nội dung "Buộc sử dụng các chú thích hỗ trợ trong ứng dụng thử nghiệm, vì nó được sử dụng bên trong mô-đun chạy.".
desseim

Đây là câu trả lời tốt nhất cho tôi. Lưu ý: Phải cập nhật lên '23 .1.1 ':androidTestCompile 'com.android.support:support-annotations:23.1.1'
David Manpearl

Cảm ơn, trong trường hợp của tôi, dòng đã có sẵn, nhưng tuyên bố rõ ràng một phiên bản mâu thuẫn, được cập nhật thành yêu cầu và mọi thứ hoạt động như một bùa mê.
RAM237

Làm thế nào để thêm cái này vào build.gradle?
ubfox_noob

58

Trên thực tế, đây là một lỗi của phiên bản cập nhật mới của Espresso Contrib, bạn có thể tham khảo cách giải quyết này: android-tests / build.gradle

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

2
Đây là vấn đề của tôi. Vé ở đây .
theblang

3
Điều này tạo ra một cảnh báo, giải pháp của @ RenanNery là tốt hơn
Diego Palomar

Điều đó không hiệu quả. Tôi vẫn nhận được lỗi xung đột vìandroidTestCompile 'com.android.support.test:runner:0.5'
IgorGanapolsky 22/03/2016

1
@bony - Liên kết bị hỏng
Mushtaq Jameel

Điều này làm việc cho tôi. Tôi đặt khối này vào "android {testOptions {<here>}}"
jwehrle

23

Vui lòng tham khảo https://github.com/JakeWharton/u2020/blob/05a57bf43b9b61f16d32cbe8717af77cd608b0fb/build.gradle#L136-L140

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

Điều này đã giải quyết vấn đề của tôi.

Ngoài ra, bạn có thể chạy gradlew trên windows và ./gradlew cho mac / linux, điều này sẽ tải xuống sự phụ thuộc của bạn khi cần


1
Điều này cũng giúp tôi ngày hôm nay (2018-11-10), nhưng với phiên bản 26.1.0, để tránh xung đột với phiên bản 27.1.1.
JB Rainsberger

8

Tôi cũng gặp phải vấn đề này cũng như các xung đột khác liên quan đến appcompat và giải pháp tôi tìm thấy là thêm các biên dịch thử nghiệm và đặt chúng vào sdk mà bạn hiện đang sử dụng. Trong trường hợp của tôi là 25, vì vậy nó trông như thế này:

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.+'

Hơn nữa, như bạn có thể thấy tôi đã thêm phụ thuộc thiết kế, có liên quan đến Thiết kế Vật liệu Android.

Hy vọng nó sẽ giúp =)


8

cho sdkversion 25

     androidTestCompile 'com.android.support:support-annotations:25.2.0'

3

bạn có thể chạy gradlew trên windows và ./gradlew cho mac / linux, điều này sẽ tải xuống sự phụ thuộc của bạn khi cần.

Bạn có thể kiểm tra xem một trong các thư viện có phụ thuộc vào chú thích hỗ trợ hay bất kỳ thư viện nào có tên bị lỗi hay không và cố gắng loại trừ nó trong một lớp giống như bên dưới

biên dịch ("org.apache.maven: maven-ant-task: $ {mavenAntTaskVer} ‌") {loại trừ nhóm: 'junit'}

Lỗi: Xung đột với sự phụ thuộc 'Junit: Junit'. Các phiên bản đã giải quyết cho ứng dụng (3.8.1) và ứng dụng thử nghiệm (4.12) khác nhau. Xem g.co/androidstudio/app-test-app-conflict để biết chi tiết.

đây là lỗi tôi gặp phải vì vậy tôi đã sử dụng dòng trên lớp để khắc phục sự cố


Đây có vẻ là một cách thực sự tốt để giải quyết vấn đề như thế này. Và ngoài ra, hãy thử chạy dòng lệnh này ./gradlew: app: phụ thuộc trong thư mục gốc dự án của bạn, nó sẽ tạo một cây về các phụ thuộc của dự án của bạn và kiểm tra cẩn thận, sau đó bạn sẽ tìm thấy xung đột từ đâu.
thẳng thắn jorsn

2

Chỉ cần xóa các dòng này trong tệp build.gradle của bạn:

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

Nó không hoạt động theo cách đó. Nó gây ra nhiều lỗi hơn cho dự án

0

Đây là vấn đề phổ biến trong kiểm tra thiết bị như đã nêu ở đây và có thể được giải quyết đơn giản bằng cách thêm các phụ thuộc cho androidTestCompile bên trong build.gradle. Trong trường hợp của tôi, xung đột nảy sinh trong appcompat, tái chế và phụ thuộc thiết kế. Và giải quyết bằng cách thêm các dòng sau

    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'

0

Tôi đã gặp vấn đề tương tự với 26.0.0 và 27.1.1 và thực sự chỉ cần nâng cấp phiên bản cũ lên sau để nó hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.