เวอร์ชั่นที่แก้ไขสำหรับแอพ (22.0.0) และแอปทดสอบ (21.0.3) นั้นแตกต่างกัน


179

หลังจากอัปเกรดเป็น API 22 และรองรับการแก้ไข lib 22 ฉันได้รับคำเตือนต่อไปนี้:

คำเตือน: ขัดแย้งกับการพึ่งพา 'com.android.support:support-annotations' เวอร์ชั่นที่แก้ไขสำหรับแอพ (22.0.0) และแอปทดสอบ (21.0.3) นั้นแตกต่างกัน

Gradle นั้นให้อภัยมากกว่า แต่ Android Studio ไม่มากนัก

ฉันไม่มีการอ้างอิงที่ประกาศด้วย 21.0.3 ... เป็นหนึ่งในไลบรารีที่ขึ้นต่อกันที่ใช้ 21.0.3 และ Google ลืมที่จะอัปเดตด้วยส่วนที่เหลือของชุดงานหรือไม่

build.gradleตัดกับความพิเศษของฉัน

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

อัปเดต: (ขอบคุณทำเครื่องหมาย)

ดูเหมือนว่ามันเป็นเอสเพรสโซ 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
dependenciesงานการไล่ระดับสีอาจช่วยให้คุณระบุผู้กระทำผิด: gradle.org/docs/current/userguide/ ......
CommonsWare

1
ขอบคุณมาร์ค ดูเหมือนว่าespresso-contribเป็นสาเหตุ ...
copolii

2
คุณสามารถลองexcludeปิดกั้นรุ่น 21.0.3 recyclerview-v7ดึงเข้ามาในรุ่น 22.0.0 ด้วยตัวคุณเองและอธิษฐานให้พวกเขารองรับespresso-contribความต้องการได้อย่างเพียงพอ โดยส่วนตัวฉันประหลาดใจที่คุณยังคงมีสติอยู่กับรายการพึ่งพาที่ยาวนาน ... :-)
CommonsWare

1
อ๋อ นี่เป็นการหลอกลวง หากคุณใส่คำตอบนั้นฉันจะให้ถั่ว :) androidTestCompile ('com.android.support.test.espresso: เอสเปรสโซ่ -contrib: 2.0') {ยกเว้นโมดูล: 'support-annotations'}
copolii

1
ปัญหาเดียวกันฉันได้รับการแก้ไขโดยการรีสตาร์ทง่ายหุ่นยนต์สตูดิโอ :)
Lakhwinder ซิงห์ล่อน

คำตอบ:


286

ขั้นตอนที่ # 1 เมื่อจัดการกับสิ่งต่าง ๆ นี้คือการคุ้นเคยกับบรรทัดคำสั่ง Gradle

ขั้นตอนที่ # 2 คือการเรียกใช้รายงานการพึ่งพา Gradle (เช่นgradle -q app:dependenciesจากรูทโครงการ) สิ่งนี้จะให้แผนผัง ASCII ดังที่แสดงในการอัปเดตคำถามและควรช่วยให้คุณระบุสิ่งที่ขอให้เวอร์ชันสิ่งประดิษฐ์ที่ขัดแย้งกัน

ขั้นตอนที่ # 3 คือการตัดสินใจว่าต้องเปลี่ยนอะไร คุณเลือกที่จะแทนที่เฉพาะความขัดแย้ง ( support-annotations) โดยส่วนตัวแล้วฉันจะไปกับรากของต้นไม้ผิดรุ่น ( recyclerview-v7) แต่สำหรับทุกคนที่ฉันรู้ว่าอาจไม่ใช่วิธีที่ดีที่สุดของการกระทำในกรณีนี้

ขั้นตอนที่ # 4 คือการเพิ่มexcludeคำสั่งเพื่อบล็อกสิ่งที่คุณเลือกในขั้นตอนที่ # 3:

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

ขั้นตอนที่ # 5 คือการทดสอบ heck จากการเปลี่ยนแปลงนี้ สิ่งที่คุณกำลังทำคือการบอกว่าespresso-contrib มีการจัดการกับรุ่น 22.0.0 support-annotationsของ ที่อาจใช้งานได้ ที่อาจไม่ ขึ้นอยู่กับความเข้ากันได้ย้อนหลังของความขัดแย้ง ในกรณีนี้support-annotationsควรจะดีกับมัน

ขั้นตอนที่ # 6 คือการดื่มเครื่องดื่มที่คุณเลือกหนึ่งที่เหมาะสมสำหรับสถานที่และเวลาของคุณ


4
ผมใช้ exclude group: 'com.android.support', module: 'support-annotations' ตั้งแต่รุ่นคุณยกคำเตือน "ไม่สามารถอนุมานประเภทอาร์กิวเมนต์" จาก gradle
appoll

2
ใช้งานได้ ... ยังพิจารณาที่จะใช้สิ่งนี้กับ com.android.support.test: นักวิ่ง: 0.3, com.android.support.test: กฎ: 0.3 และ com.android.support.test.espresso: espresso-core: 2.2
uudashr

ในขั้นตอนที่ # 4 คุณจะเพิ่มคำสั่ง androidTestCompile นั้นไว้ที่ไหน หากฉันพยายามเพิ่มไวยากรณ์นั้นลงในบล็อกการอ้างอิงของแอพของฉันฉันจะได้รับข้อผิดพลาดทางไวยากรณ์ อย่างที่เขียนตอนนี้มันค่อนข้างยากที่จะบอกได้อย่างแม่นยำว่าคุณเพิ่มไว้ที่ไหน
OYRM

1
@OYRM: "คุณกำลังเพิ่มคำสั่ง androidTestCompile นั้นอยู่ที่ไหน?" - dependenciesใน ดูตัวอย่างนี้จาก Chiu-Ki Chan
CommonsWare

16
ขั้นตอนที่ # 6 คือกุญแจที่นี่
Odaym

146

สิ่งที่ฉันทำเพื่อแก้ไขคือเพิ่มบรรทัดด้านล่างลงในสคริปต์ build.gradle ของฉัน

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

แทนที่xx.x.xด้วยคำอธิบายประกอบแบบสนับสนุนที่แอปของคุณกำลังใช้อยู่ซึ่งจะแสดงในการอ้างอิงของคุณหรือข้อความซิงค์ Gradle เป็น: Resolved version for app (xx.x.x)หากมีการซิงค์ปัญหา


ว้าว. ฉันทำสิ่งนี้เพื่ออัปเกรดJunitแต่โดยรวมฉันสามารถทำได้เพื่อการพึ่งพาอื่น ๆ เช่นกัน
Jared Burrows

10
นี่เป็นวิธีที่ Google ทำตัวอย่างความคิดเห็นที่อ่าน "บังคับใช้คำอธิบายประกอบการสนับสนุนในแอปทดสอบเนื่องจากมีการใช้ภายในโดยโมดูลนักวิ่ง"
desseim

นี่คือคำตอบที่ดีที่สุดสำหรับฉัน หมายเหตุ: ต้องอัปเดตเป็น '23 .1.1 ':androidTestCompile 'com.android.support:support-annotations:23.1.1'
David Manpearl

ขอบคุณในกรณีของฉันมีบรรทัดอยู่แล้ว แต่ระบุรุ่นที่ขัดแย้งกันอย่างชัดเจนได้รับการอัปเดตเป็นสิ่งที่จำเป็นและทุกอย่างทำงานได้อย่างมีเสน่ห์
RAM237

วิธีเพิ่มลงใน build.gradle
ubuntu_noob

58

ที่จริงแล้วมันเป็นข้อผิดพลาดของ Espresso Contrib เวอร์ชั่นอัปเดตใหม่คุณสามารถอ้างอิงวิธีแก้ปัญหานี้: android-testing / build.gradle

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

2
นี่เป็นปัญหาของฉัน จองตั๋วเป็นที่นี่
theblang

3
สิ่งนี้สร้างคำเตือนทางออกของ @ RenanNery ดีกว่า
Diego Palomar

ไม่ได้ผล ฉันยังคงได้รับข้อผิดพลาดความขัดแย้งเนื่องจากandroidTestCompile 'com.android.support.test:runner:0.5'
IgorGanapolsky

1
@bony - ลิงก์เสียหาย
Mushtaq Jameel

สิ่งนี้ใช้ได้สำหรับฉัน ฉันใส่บล็อกนี้ใน "android {testOptions {<here>}}"
jwehrle

23

โปรดอ้างอิงhttps://github.com/JakeWharton/u2020/blob/05a57bf43b9b61f16d32cbe8717af77cd608b0fb/build.gradle#L136-L140

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

นี่เป็นการแก้ไขปัญหาของฉัน

หรือคุณสามารถเรียกใช้ gradlew บน windows และ. / gradlew สำหรับ mac / linux สิ่งนี้จะดาวน์โหลดการพึ่งพาของคุณเมื่อจำเป็น


1
สิ่งนี้ยังช่วยฉันในวันนี้ (2018-11-10) แต่ด้วยรุ่น 26.1.0 เพื่อหลีกเลี่ยงความขัดแย้งกับรุ่น 27.1.1
JB Rainsberger

8

ฉันพบปัญหานี้เช่นเดียวกับความขัดแย้งอื่น ๆ ที่เกี่ยวข้องกับappcompatและวิธีแก้ปัญหาที่ฉันพบคือการเพิ่มคอมไพล์ทดสอบและตั้งค่าเป็น sdk ที่คุณใช้งานอยู่ ในกรณีของฉันคือ 25 ดังนั้นจึงมีลักษณะเช่นนี้:

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

นอกจากนี้อย่างที่คุณเห็นฉันเพิ่มการพึ่งพาการออกแบบซึ่งเกี่ยวข้องกับ Android Material Design

หวังว่ามันจะช่วย =)



3

คุณสามารถรัน gradlew บน windows และ. / gradlew สำหรับ mac / linux สิ่งนี้จะดาวน์โหลดการพึ่งพาของคุณเมื่อจำเป็น

คุณสามารถตรวจสอบว่าหนึ่งในห้องสมุดมีการพึ่งพาคำอธิบายประกอบการสนับสนุนหรือห้องสมุดใด ๆ ที่มีชื่อมีข้อผิดพลาดและพยายามที่จะแยกออกเป็นบางส่วนดังนี้

คอมไพล์ ("org.apache.maven: maven-ant-task: $ {mavenAntTaskVer} ‌") {ยกเว้นกลุ่ม: 'junit'}

ข้อผิดพลาด: ขัดแย้งกับการพึ่งพา 'junit: junit' เวอร์ชั่นที่แก้ไขสำหรับแอพ (3.8.1) และแอปทดสอบ (4.12) นั้นแตกต่างกัน ดู g.co/androidstudio/app-test-app-conflict สำหรับรายละเอียด

นี่เป็นข้อผิดพลาดที่ฉันได้รับดังนั้นฉันจึงใช้ข้อมูลบนบรรทัด gradle ด้านบนเพื่อแก้ไขปัญหา


นี่เป็นวิธีที่ดีมากในการแก้ปัญหาเช่นนี้ และนอกจากนี้ให้ลองรันบรรทัดคำสั่ง. / gradlew: app: dependenciesภายใต้ไดเรกทอรีรากโครงการของคุณมันจะสร้างแผนภูมิเกี่ยวกับการอ้างอิงของโครงการของคุณและตรวจสอบอย่างรอบคอบจากนั้นคุณจะพบว่าข้อขัดแย้งนั้นมาจากที่ใด
แฟรงค์ Jorsn

2

เพียงลบบรรทัดเหล่านี้ในไฟล์ build.gradle ของคุณ:

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

มันไม่ทำงานอย่างนั้น มันทำให้เกิดข้อผิดพลาดเพิ่มเติมกับโครงการ

0

นี่เป็นปัญหาทั่วไปในการทดสอบเครื่องมือตามที่ระบุไว้ที่นี่และสามารถแก้ไขได้ง่ายๆโดยการเพิ่มการอ้างอิงสำหรับ androidTestCompile ภายใน build.gradle ในกรณีที่ความขัดแย้งของฉันเกิดขึ้นใน appcompat, recyclerview และการพึ่งพาการออกแบบ และแก้ไขโดยเพิ่มบรรทัดต่อไปนี้

    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

ฉันมีปัญหาเดียวกันกับ 26.0.0 และ 27.1.1 และจริง ๆ แล้วแค่อัปเกรดเป็นรุ่นก่อนหน้าในภายหลังทำให้ใช้งานได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.