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


106

ฉันยังใหม่กับการพัฒนาแอป Android เมื่อฉันพยายามสร้างโครงการใหม่ Android Project ... ข้อความต่อไปนี้ก็โผล่ขึ้นมา ..

ข้อผิดพลาด: การดำเนินการล้มเหลวสำหรับงาน ': app: preDebugAndroidTestBuild'

ขัดแย้งกับการพึ่งพา 'com.android.support:support-annotations' ในโครงการ ': app' เวอร์ชันที่แก้ไขแล้วสำหรับแอป (26.1.0) และแอปทดสอบ (27.1.1) แตกต่างกัน ดูhttps://d.android.com/r/tools/test-apk-dependency-conflicts.htmlสำหรับรายละเอียด ข้อมูล: งาน Gradle [: app: createDebugSources,: app: earnDebugAndroidTestSources,: app: mockableAndroidJar]

นี่คือภาพหน้าจอของโครงการของฉัน คลิกที่นี่เพื่อดูภาพหน้าจอของข้อผิดพลาดที่ฉันได้รับ

ฉันยังลองเพิ่มรหัสนี้ในการพึ่งพาของฉัน .. androidTestCompile 'com.android.support:support-annotations:23.3.0' สิ่งนี้ไม่ได้ผล ฉันยังลอง 27.1.1 และ 26.1.0 .. ซึ่งก็ไม่ได้ผลเช่นกัน


ตรวจสอบคำถามนี้: stackoverflow.com/q/43817004/9611523 หวังว่ามันจะช่วยได้

1
การอัปเดต Android Studio (ตลอดจนโปรแกรมจำลองและสิ่งอื่น ๆ หลังจากนั้น) ช่วยแก้ปัญหานั้นให้ฉันได้

ปัญหาเกิดจากการไล่ระดับคำอธิบายประกอบที่ไม่ได้มาตามค่าเริ่มต้นในการสร้างโครงการใหม่ของ Android Studio สิ่งนี้อาจช่วยคุณได้: readyandroid.wordpress.com/…
Ready Android

คำตอบ:


182

จากภาพหน้าจอของคุณฉันพบวิธีการทำงานสองวิธี:

วิธีแก้ปัญหาแรก : เพิ่มการอ้างอิงของโมดูลการไล่ระดับของคุณในบรรทัดนี้

compile 'com.android.support:support-annotations:27.1.1'

และซิงค์โครงการของคุณ

หมายเหตุ:หากคุณใช้ Android studio 3+ compileให้เปลี่ยนเป็นimplementation

แนวทางที่สอง : กำหนดค่าคุณสมบัติทั่วทั้งโครงการที่พบในเอกสารhttps://developer.android.com/studio/build/gradle-tips.html#configure-project-wide-properties

ในโครงการ gradle เพิ่มบรรทัดนี้:

// This block encapsulates custom properties and makes them available to all
// modules in the project.
ext {
    // The following are only a few examples of the types of properties you can define.
    compileSdkVersion = 26
    // You can also use this to specify versions for dependencies. Having consistent
    // versions between modules can avoid behavior conflicts.
    supportLibVersion = "27.1.1"
}

จากนั้นในการเข้าถึงส่วนนี้ให้เปลี่ยนcompileSdkVersionบรรทัดเป็น

compileSdkVersion rootProject.ext.compileSdkVersion

และในdependenciesส่วนเปลี่ยนไลบรารีที่นำเข้าให้เป็นดังนี้:

compile "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"

และซิงค์โครงการของคุณ

หมายเหตุ:หากคุณใช้ Android studio 3+ compileให้เปลี่ยนเป็นimplementation

สำหรับความแตกต่างระหว่างcompileและimplementationดูสิ่งนี้ ความแตกต่างระหว่างการใช้งานและการคอมไพล์ใน gradle คืออะไร


4
ฉันขอแนะนำให้ใช้ 'การใช้งาน' แทนการคอมไพล์
SanVed

60

เพิ่มบรรทัดด้านล่างในไฟล์ app.gradle ของคุณก่อนบล็อก Depencencies

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

นอกจากนี้ยังมีภาพหน้าจอด้านล่างเพื่อความเข้าใจที่ดีขึ้น

Configurations.all บล็อก

  1. configurations.all block จะมีประโยชน์ก็ต่อเมื่อคุณต้องการให้ sdk เป้าหมายของคุณเป็น 26 หากคุณสามารถเปลี่ยนเป็น 27 ข้อผิดพลาดจะหายไปโดยไม่ต้องเพิ่มบล็อกการกำหนดค่าในไฟล์ app.gradle

  2. มีอีกวิธีหนึ่งหากคุณจะลบการใช้งานการทดสอบทั้งหมดออกจากไฟล์ app.gradle มันจะช่วยแก้ไขข้อผิดพลาดและในสิ่งนี้คุณไม่จำเป็นต้องเพิ่มบล็อกการกำหนดค่าและคุณไม่จำเป็นต้องเปลี่ยนเวอร์ชัน targetdk

หวังว่าจะช่วยได้


ขอบคุณช่วยเวลาของฉัน
Manikandan K

1
@ManikandanK ยินดีช่วยเหลือ!
Harsh Jain

ขอสรรเสริญสำหรับคำแนะนำที่สมบูรณ์! (คำตอบมากมายเกี่ยวกับเรื่องประเภทนี้ก็เหมือนกับ "เพิ่มสิ่งนี้:" บังคับ "com.android.support:support-annotations:26.1.0 '" ที่มีบริบทน้อย / ไม่มีเลย! (น่าเศร้าที่ฉันยังคงได้รับแบบเดิม สร้างข้อผิดพลาดในกรณีของฉัน"ไม่พบ com.android.support:support-annotations:27.0.0 ต้องการโดย: trainingiq: bugsnag-react-native: unspecified> com.bugsnag: bugsnag-android: 4.3.1"
Dronz

35

หากคุณใช้เวอร์ชัน26ภายในเวอร์ชันอ้างอิงควรเป็น1.0.1และ3.0.1เช่นดังต่อไปนี้

  androidTestImplementation 'com.android.support.test:runner:1.0.1'
  androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

หากคุณใช้เวอร์ชัน27ภายในเวอร์ชันอ้างอิงควรเป็น1.0.2และ3.0.2เช่นดังต่อไปนี้

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

2
ขอพระเจ้าอวยพรคุณ Android อาจสนับสนุนห้องสมุดเวอร์ชันเน่าในนรก!
Muhammad Naderi

ดังนั้นตัวช่วยสร้างสตูดิโอ Android จึงสร้างโครงการตั้งแต่เริ่มต้นโดยมีข้อผิดพลาด? ¬¬
Sebastian Breit

สิ่งที่เกี่ยวกับ28 ?
alizulfuqar

27

หากคุณใช้ Android Studio 3.1 + ขึ้นไป

เพียงแค่ใส่สิ่งนี้ในการอ้างอิงระดับประถมศึกษาของคุณ:

implementation 'com.android.support:support-annotations:27.1.1'

โดยรวมแล้วเป็นแบบนี้:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation 'com.android.support:support-annotations:27.1.1'
}

ขอบคุณเพื่อนความรักมากมาย
amilab

23

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

implementation ('com.android.support:support-annotations:27.1.1')

หวังว่านี่จะช่วยแก้ปัญหาของคุณได้;)

แก้ไข

เกือบลืมคุณสามารถประกาศคุณสมบัติพิเศษเพียงรายการเดียว ( https://docs.gradle.org/current/userguide/writing_build_scripts.html#sec:extra_properties ) สำหรับเวอร์ชันไปที่ไฟล์ gradle ของโครงการ (หรือไฟล์ด้านบนของคุณ) และ ประกาศการสนับสนุนของคุณหรือเพียงตัวอย่างนี้คำอธิบายประกอบเวอร์ชัน var

ext.annotation_version = "27.1.1"

จากนั้นในโมดูลของคุณ gradle แทนที่ด้วย:

implementation ("com.android.support:support-annotations:$annotation_version")

สิ่งนี้คล้ายกับโซลูชัน @emadabel ซึ่งเป็นทางเลือกที่ดีสำหรับการทำเช่นนี้ แต่ไม่มีบล็อกหรือrootprojectคำนำหน้า


1
ขอบคุณ desgraci วิธีแก้ปัญหาข้างต้นช่วยฉัน
BharathRao

หลังจากเพิ่มบรรทัดนี้ตอนนี้ฉันได้รับข้อผิดพลาด "Error: Execution failed for task ': app: processDebugManifest'> การรวมรายการ Manifest ล้มเหลวโดยมีข้อผิดพลาดหลายรายการโปรดดูบันทึก" โปรดช่วยฉันแก้ปัญหาอย่างไร
Basant

@ สบายดีฉันจะต้องดูว่าปัญหาใดเนื่องจากเป็นปัญหาในการดำเนินการ gradle ของคุณมันจะดีกว่าถ้าเปิดคำถามสำหรับสิ่งนี้
desgraci

ขออภัยที่ตอบช้า @desgraci ฉันมีปัญหานี้สั้น ๆ โดยการอัปเกรด IDE
Basant

@ ดีใจที่ได้ทราบ!
desgraci

9

การเพิ่มสิ่งนี้ใน build.gradle (แอปโมดูล) ใช้งานได้สำหรับฉัน:
คอมไพล์ 'com.android.support:support-annotations:27.1.1'


7

ไม่ต้องกังวลมันง่ายมาก:

ไปที่โครงสร้างไดเร็กทอรี "Project" จากนั้นไปที่ "Gradle Scripts" จากนั้นไปที่ "build.gradle (Module: app)" แล้วดับเบิลคลิก

ตอนนี้ - เลื่อนโปรแกรมลงและไปที่ส่วนการอ้างอิง: ชอบด้านล่าง


การอ้างอิง {

implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

}


ตอนนี้ลบโค้ดสองบรรทัดสุดท้ายแล้วสร้างแอพใหม่และตอนนี้มันจะใช้งานได้

การอ้างอิงควรเป็น:


การอ้างอิง {

implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'

}


สร้างแอปใหม่และใช้งานได้จริง !!


คุณไม่ได้อธิบายสิ่งที่คุณลบ / เพิ่ม จะเกิดอะไรขึ้นถ้าจำเป็นต้องใช้ไลบรารีการทดสอบที่นี่?
TheRealChx101

3

ไปที่ build.gradle (แอปโมดูล) ในโครงการของคุณ:

ป้อนคำอธิบายภาพที่นี่

ติดตามรูปภาพและเปลี่ยนเวอร์ชันเหล่านั้น:

compileSdkVersion: 27
targetSdkVersion: 27

และถ้า android studio เวอร์ชัน 2: เปลี่ยนสายด้วยบรรทัดนี้:

compile 'com.android.support:appcompat-v7:27.1.1'

else เปลี่ยนบรรทัดด้วยบรรทัดนี้:

implementation 'com.android.support:appcompat-v7:27.1.1'

และหวังว่าคุณจะแก้ปัญหาได้



1

อีกวิธีง่ายๆในการแก้ปัญหานี้คือแก้ไขbuild.gradle(แอป) ของคุณ:

  1. ไปที่androidแท็กและเปลี่ยนcompileSdkVersion 26เป็นcompileSdkVersion 27
  2. ไปที่defaultConfigแท็กและเปลี่ยนtargetSdkVersion 26เป็นtargetSdkVersion 27
  3. ต้องdependenciesแท็กและเปลี่ยนimplementation 'com.android.support:appcompat-v7:26.1.0'เป็นimplementation 'com.android.support:appcompat-v7:27.1.1'

1

ฉันมีปัญหาเดียวกันใน build.gradle (Module: app) เพิ่มบรรทัดรหัสต่อไปนี้ภายในการอ้างอิง:

dependencies 
{
   ...
   compile 'com.android.support:support-annotations:27.1.1'
}

มันทำงานให้ฉันอย่างสมบูรณ์แบบ


1

การอัปเดตที่สำคัญ

ไปที่ระดับโครงการ build.gradle กำหนดตัวแปรส่วนกลาง

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext.kotlinVersion = '1.2.61'

    ext.global_minSdkVersion = 16
    ext.global_targetSdkVersion = 28
    ext.global_buildToolsVersion = '28.0.1'
    ext.global_supportLibVersion = '27.1.1'
}

ไปที่ระดับแอป build.gradle และใช้ตัวแปรส่วนกลาง

app build.gradle

android {
    compileSdkVersion global_targetSdkVersion
    buildToolsVersion global_buildToolsVersion
    defaultConfig {
        minSdkVersion global_minSdkVersion
        targetSdkVersion global_targetSdkVersion
}
...

dependencies {
    implementation "com.android.support:appcompat-v7:$global_supportLibVersion"
    implementation "com.android.support:recyclerview-v7:$global_supportLibVersion"
    // and so on...
}

บางไลบรารี build.gradle

android {
    compileSdkVersion global_targetSdkVersion
    buildToolsVersion global_buildToolsVersion
    defaultConfig {
        minSdkVersion global_minSdkVersion
        targetSdkVersion global_targetSdkVersion
}
...

dependencies {
    implementation "com.android.support:appcompat-v7:$global_supportLibVersion"
    implementation "com.android.support:recyclerview-v7:$global_supportLibVersion"
    // and so on...
}

วิธีแก้ปัญหาคือทำให้เวอร์ชันของคุณเหมือนกับในโมดูลทั้งหมด เพื่อให้คุณไม่มีความขัดแย้ง

เคล็ดลับสำคัญ

ฉันรู้สึกว่าเมื่อฉันได้อัปเดตเวอร์ชันทุกอย่าง - gradle, sdks, libraries ฯลฯ แล้วฉันก็พบข้อผิดพลาดน้อยลง เนื่องจากนักพัฒนากำลังทำงานอย่างหนักเพื่อให้การพัฒนาบน Android Studio เป็นเรื่องง่าย

มีเวอร์ชันล่าสุด แต่เสถียรเวอร์ชันที่ไม่เสถียรอยู่alphaเสมอbetaและrcไม่ต้องสนใจเวอร์ชันเหล่านี้ในการพัฒนา

ฉันได้อัปเดตทั้งหมดด้านล่างในโครงการของฉันแล้วและฉันไม่พบข้อผิดพลาดเหล่านี้อีกต่อไป

ขอให้สนุกกับการเขียนโค้ด! :)


0

หากการเปลี่ยนเวอร์ชัน sdk เป้าหมายไม่สามารถช่วยได้หากคุณมีการพึ่งพาเวอร์ชันใด ๆ ให้3.0.2เปลี่ยนเป็นไฟล์3.0.1.

เช่นการเปลี่ยนแปลง

androidTestImplementation 'com.android.support.test.espresso:espresso-contrib:3.0.2'

ถึง

androidTestImplementation 'com.android.support.test.espresso:espresso-contrib:3.0.1'

0

ทางออกที่ดีคือการอธิบายในคำอธิบายอย่างเป็นทางการ ฉันทิ้งคำตอบที่ได้ให้ไว้ก่อนหน้านี้ไว้ใต้เส้นแนวนอน

ตามวิธีแก้ปัญหามี:

ใช้แท็กภายนอกและเขียนโค้ดต่อไปนี้ด้านล่างในไฟล์build.gradleระดับบนสุด คุณกำลังจะเปลี่ยนเวอร์ชันเป็นตัวแปรแทนที่จะเป็นหมายเลขเวอร์ชันคงที่

ext {
    compileSdkVersion = 26
    supportLibVersion = "27.1.1"
}

เปลี่ยนหมายเลขเวอร์ชันคงที่ในไฟล์build.gradleระดับแอปที่มี(Module: app)อยู่ใกล้

android {
    compileSdkVersion rootProject.ext.compileSdkVersion // It was 26 for example
    // the below lines will stay
}

// here there are some other stuff maybe

dependencies {
    implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
    // the below lines will stay
}

ซิงค์โครงการของคุณและคุณจะไม่มีข้อผิดพลาด


คุณไม่จำเป็นต้องเพิ่มอะไรในสคริปต์ Gradle ติดตั้ง SDK ที่จำเป็นและปัญหาจะได้รับการแก้ไข

ในกรณีของคุณให้ติดตั้งไลบรารีด้านล่างจากPreferences> Android SDKหรือTools> Android> SDK Manager

ป้อนคำอธิบายภาพที่นี่


0

เพิ่มบรรทัดนี้ภายใต้การอ้างอิงในไฟล์ gradle ของคุณ

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