ไม่สามารถรวม dex


307

ฉันมี Android Studio Beta ฉันสร้างโครงการใหม่ด้วยการคอมไพล์โมดูลเก่าของฉัน แต่เมื่อฉันลองเปิดแอพมันไม่ได้เปิดขึ้นด้วยข้อความ:

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.

com.android.builder.dexing.DexArchiveMergerException: ไม่สามารถรวม dex

แต่ฉันไม่รู้วิธีแก้ไขข้อผิดพลาดนี้ ฉัน googled นี้หลายชั่วโมง แต่ไม่ประสบความสำเร็จ

ระดับโครงการของฉัน:

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

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-beta6'
        classpath "io.realm:realm-gradle-plugin:3.7.1"
        classpath 'com.google.gms:google-services:3.1.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        google()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

แอปของฉันไล่ระดับ:

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "parad0x.sk.onlyforyou"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
        }
    }
    compileOptions {
        targetCompatibility 1.7
        sourceCompatibility 1.7
    }
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
    lintOptions {
        checkReleaseBuilds false
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    //noinspection GradleCompatible
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
    compile project(path: ':loginregisterview')


}

และโมดูลของฉันจะไล่ระดับ:

    apply plugin: 'com.android.library'
apply plugin: 'realm-android'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 26
        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'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.0.2'
    compile 'com.android.support:support-v4:26.1.0'
    compile 'com.github.bumptech.glide:glide:4.0.0'
    testCompile 'junit:junit:4.12'
    compile project(path: ':parser')

}

โมดูลที่สองของฉัน:

     apply plugin: 'com.android.library'
apply plugin: 'realm-android'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    realm {
        syncEnabled = true
    }
    useLibrary 'org.apache.http.legacy'

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile 'junit:junit:4.12'
    //  compile 'com.android.support:appcompat-v7:23.1.0'

    //   compile 'com.fasterxml.jackson.core:jackson-core:2.9.0'
 //   compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.0'
 //   compile 'com.fasterxml.jackson.core:jackson-databind:2.9.0'
    compile 'com.google.code.gson:gson:2.6.2'
}

____________finding_________

เมื่อฉันไม่ได้นำเข้าโมดูลที่สอง (parser) แอพไม่ทำงานผิดพลาดใน dex แต่เมื่อโมดูลที่ไม่ได้นำเข้าแอปไม่ทำงาน : D: D


6
หากใครได้รับปัญหาเดียวกันในรุ่น Android Studio 3.0 เสถียรฉันขอแนะนำให้คุณอ่านคำตอบstackoverflow.com/questions/46949761/และดูว่ามันสามารถช่วยคุณได้หรือไม่
Bhavesh Patadiya

1
ฉันมีปัญหาเดียวกันและฉันทำตามทุกวิธีที่กล่าวถึงในหน้านี้ แต่ไม่ได้ช่วยฉันเลยฉันจึงไปที่การไล่ระดับสีค้างไว้ที่เคอร์เซอร์ในแต่ละไลบรารีเพื่อตรวจสอบเวอร์ชันใหม่ของพวกเขาว่ามีหรือไม่ ผู้ที่มีรุ่นใหม่ดังนั้นฉันจึงอัปเดตซิงค์เกรดและเรียกใช้ มันทำงานได้
Shahzad Afridi

คำตอบ:


293

ฉันมีปัญหาเดียวกันเมื่อฉันอัปเดตจากไปcom.google.android.gms:play-services:11.2.2 com.google.android.gms:play-services:11.4.0วิธีนี้แก้ไขได้สำหรับฉัน:

  1. สะอาด
  2. สร้างใหม่

คุณหน่วงเวลาปัญหาที่แท้จริงด้วยโซลูชันนั้นเท่านั้น อาจ ver 11.4.0 มีวิธีการน้อย ดูคำตอบของฉันด้านล่าง คุณจะได้รับข้อผิดพลาดนี้ในการพึ่งพาครั้งต่อไปคุณจะเพิ่มฉันเดา
itzhar

2
สิ่งนี้แก้ปัญหาของฉันmultiDexEnabled trueไม่ได้คนเดียว
Yuri Brigance

28
isse เดียวกันกับ com.google.android.gms: play-services-location: 11.6.0 ... นี่ไม่ใช่วิธีการแก้ปัญหาที่ถูกต้อง
issamux

3
วิธีนี้ใช้ได้ผลกับฉันเมื่อฉันมีปัญหาความเข้ากันได้กับห้องสมุด Google Analytics ใน AS ดูบานหน้าต่าง navigator project android เป็น "Project" คุณควรเห็น "External Libraries" หากคุณขยายไลบรารีภายนอกคุณจะเห็น jars และโมดูลทั้งหมดที่ใช้ในการรวบรวมโครงการ มันจะช่วยให้คุณระบุชุดของโมดูลที่เข้ากันไม่ได้
angryITguy

3
หากโค้ดด้านบนไม่ทำงานในกรณีของ "compileSdkVersion 26" ให้ลอง .. ไปที่ - build.gradle (โมดูล: แอป) - เพิ่ม "multiDexEnabled จริง" ใน defaultConfig หมวดหมู่และขั้นตอนสุดท้ายไปที่ไฟล์ | การตั้งค่า | Build, Execution, Deployment | เรียกใช้และลองเปิดใช้งาน / ปิดใช้งานทันที
Sumit Saxena

325

ฉันลองทุกอย่างที่กล่าวมาข้างต้นและไม่ช่วยอะไรเลย ในที่สุดฉันพบว่างานนี้สำหรับฉัน:

app / build.gradle:

android {
    defaultConfig {
       multiDexEnabled true
    }
}

11
ขอบคุณ ฉันคิดว่าปัญหาคือว่าคำตอบส่วนใหญ่ไม่ได้รวมบัญชีไฟล์ JAR จากแหล่งอื่นที่คุณไม่สามารถสร้างใหม่ได้ ดูเหมือนว่า multiDex จะอนุญาตให้รวมรหัสเข้ากันไม่ได้
Brendon Whateley

2
โซลูชันนี้ใช้งานได้สำหรับฉัน แต่นอกจากนี้ฉันต้องเปิดใช้งาน multidex อย่างชัดเจนสำหรับ API <= 21 developer.android.com/studio/build/multidex.html
hamou92

2
แม้จะมีความเกี่ยวข้องมากกว่าคำตอบที่ยอมรับฉันยังคงได้รับข้อความ "ไม่สามารถผสาน dex"
จอห์น

13
ไม่ได้ผลสำหรับฉัน ด้วยการเปลี่ยนแปลงนี้ฉันได้รับข้อผิดพลาดที่แตกต่างกัน: การดำเนินการล้มเหลวสำหรับงาน ': แอป: transformClassesWithMultidexlistForDebug
Atul

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

59

ให้ความสนใจกับคำเตือน!

บางครั้งคุณเพียงแค่ต้องกำจัดคำเตือนและข้อผิดพลาดจะหายไปโดยอัตโนมัติ ดูกรณีพิเศษด้านล่าง:


ฉันมีการพึ่งพาทั้งสองนี้ในbuild.gradleไฟล์ระดับโมดูลของฉัน:

implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:recyclerview-v7:27.0.2'

และ Studio เตือนแล้ว ( นอกเหนือจากปัญหาการรวม dex ):

com.android.supportไลบรารีทั้งหมดต้องใช้ข้อมูลจำเพาะรุ่นที่แน่นอน (เวอร์ชันที่ผสมกันอาจทำให้เกิดข้อผิดพลาดขณะทำงาน) พบรุ่น27.0.2, 21.0.3. ตัวอย่าง ได้แก่com.android.support:animated-vector-drawable:27.0.2และcom.android.support:support-v4:21.0.3

ดังนั้นฉันจึงระบุรุ่นของcom.android.support:support-v4 (ดูรายละเอียดที่นี่ ) และปัญหาทั้งสองอย่าง (คำเตือนและที่เกี่ยวข้องกับการรวม dex) แก้ไข :

implementation 'com.android.support:support-v4:27.0.2'  // Added this line (according to above warning message)
implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:recyclerview-v7:27.0.2'

ดูความคิดเห็นด้านล่างสำหรับสถานการณ์ที่คล้ายกันอื่น ๆ


1
ขอบคุณสิ่งนี้แก้ไขปัญหาให้ฉันได้ เริ่มแรกเกิดจากการเพิ่ม eu.inloop: androidviewmodel: 1.3.4
lsrom

1
ฉันเพียงต้องการให้ข้อผิดพลาดนั้นแม่นยำมากขึ้น
Amin Keshavarzian

1
ขอบคุณมาก. ฉันมีปัญหาเดียวกัน ฉันใช้ v26 อัปเดตเป็น sdk 27 ​​และแก้ไขปัญหา
Johnny

2
นี่ควรเป็นคำตอบที่ถูกต้อง งานสร้างของฉันหยุดทำงานหลังจากเพิ่มห้องสมุดหนึ่งรายการ (airbnb / epoxy) ซึ่งมีการอ้างอิงsupport:design:26.1.0และฉันยังไม่ได้พึ่งพานั้น คนอื่น ๆ ของฉันสนับสนุนไลบรารีเวอร์ชันคือ 27.1.0 หลังจากเพิ่มการsupport:designอ้างอิงกับ27.1.0เวอร์ชันแล้วปัญหาของฉันได้รับการแก้ไขแล้ว
alashow

2
ขอบคุณ. คุณบันทึกวันของฉัน
Nithinjith

37

ในกรณีของฉันโชคไม่ดีโซลูชันของ Michel และ Suragch ไม่เหมาะกับฉัน

ดังนั้นฉันจึงแก้ไขปัญหานี้โดยทำดังต่อไปนี้:

ในgradle: 3.0 รวบรวมการกำหนดค่าจะเลิกในขณะนี้และควรถูกแทนที่ด้วยการดำเนินงานหรือAPI สำหรับข้อมูลเพิ่มเติมคุณสามารถอ่านได้ที่นี่คุณสามารถอ่านเอกสารอย่างเป็นทางการได้ที่Gradle Build Tool

การกำหนดค่าการคอมไพล์ยังคงมีอยู่ แต่ไม่ควรใช้เนื่องจากจะไม่มีการรับประกันว่า api และการกำหนดค่าการใช้งานจะมีให้

มันจะดีกว่าที่จะใช้การใช้งานหรือAPIค่อนข้างจะรวบรวม

เพียงแค่เปลี่ยนคอมไพล์ที่มีการดำเนินงาน , debugCompileกับdebugImplementation , testCompileกับtestImplementationและandroidtestcompileกับandroidTestImplementation

ตัวอย่างเช่น: แทนที่จะเป็นแบบนี้

compile 'com.android.support:appcompat-v7:26.0.2'
compile 'com.android.support:support-v4:26.1.0'
compile 'com.github.bumptech.glide:glide:4.0.0'

ใช้แบบนี้

implementation 'com.android.support:appcompat-v7:26.0.2'
implementation 'com.android.support:support-v4:26.1.0'
implementation 'com.github.bumptech.glide:glide:4.0.0'

หลังจากนั้น

  • ลบโฟลเดอร์. stradle ในโครงการของคุณ (โปรดทราบว่าเพื่อดู. gradle คุณจะต้องเปลี่ยนไปใช้มุมมอง "Project" ในเนวิเกเตอร์ด้านบนซ้าย)
  • ลบโฟลเดอร์บิลด์และแคชการไล่ระดับสีทั้งหมด
  • จากการสร้างเมนูกดโครงการทำความสะอาดปุ่ม
  • หลังจากงานเสร็จสิ้นให้กดปุ่มสร้างโครงการใหม่จากเมนูสร้าง

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


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

2
ทำงานให้ฉัน - เข้าใจว่าทำไม
อเล็กซ์

1
โฟลเดอร์ที่ควรลบควรเป็น.gradleและไม่ใช่./gradle
Gary Bak

1
คำตอบเดียวที่ใช้งานได้จริงสำหรับฉัน ขอบคุณ!
Michael Richardson

1
ขอบคุณมันเป็นคำตอบที่ยอดเยี่ยม ควรอยู่ด้านบนของการค้นหา ทำงานให้ฉัน
อันตราย

27
  1. ลบ.gradleไดเรกทอรี

  2. เรียกใช้แอปของคุณอีกครั้ง

หมายเหตุ

  • .gradleไดเรกทอรีที่อยู่ในโฟลเดอร์รากของโครงการ (คุณอาจต้องแสดงไฟล์ที่ซ่อนไว้ก่อน)
  • ฉันต้องทำสิ่งนี้ทุกครั้งที่ฉันอัพเดตโมดูลการพึ่งพาโดยใช้ Android 3.0 (ดูเหมือนว่ารุ่นล่าสุดของ Android Studio 3 จะแก้ปัญหาได้แล้ว)

4
สิ่งนี้ช่วยฉันได้เช่นกันเมื่อฉันทำแคชไม่ถูกต้องและเริ่มใหม่อีกครั้ง
Vasili Fedotov

ฉันไม่เชื่อเมื่อสิ่งนี้แก้ไขปัญหาของฉัน .. ฉันได้ลองอัปเดตทุกอย่างลบคำหลักที่รวบรวมทั้งหมดอัปเดตเวอร์ชั่น ilb ที่น่าสงสัยบางอย่าง .. เมื่อในที่สุดฉันก็ทำเช่นนี้มันทำงาน ..
hanzolo

คุณช่วยชีวิตฉันไว้! ขอบคุณ
Masterfego

24

การลบ.gradleตามที่แนะนำโดย Suragch ไม่เพียงพอสำหรับฉัน Build > Clean Projectนอกจากนี้ผมก็มีการดำเนินการ

โปรดทราบว่าเพื่อที่จะเห็น.gradleคุณต้องสลับไปที่มุมมอง "โครงการ" ในเนวิเกเตอร์ด้านบนซ้าย:

เปลี่ยนเป็นมุมมองโครงการ


23

ฉันลองใช้วิธีแก้ไขปัญหาอื่น ๆ แต่ไม่มีใครทำงานให้ฉัน build.gradleในตอนท้ายผมแก้ไขได้โดยใช้รุ่นพึ่งพาเดียวกันโดยการแก้ไข ฉันคิดว่าปัญหานี้เกิดขึ้นเมื่อเพิ่มไลบรารีลงใน gradle ซึ่งใช้เวอร์ชันการสนับสนุนที่แตกต่างกันหรือห้องสมุด google

เพิ่มรหัสต่อไปนี้ในไฟล์ build gradle ของคุณ จากนั้นcleanและrebuildโครงการ

ps: นั่นเป็นวิธีแก้ปัญหาแบบเก่าสำหรับคุณดังนั้นคุณควรใช้ไลบรารี่รุ่นต่อไปที่อัปเดตแล้ว

configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    def requested = details.requested
    if (requested.group == 'com.android.support') {
        if (!requested.name.startsWith("multidex")) {
            details.useVersion '26.1.0'
        }
    } else if (requested.group == "com.google.android.gms") {
        details.useVersion '11.8.0'
        } else if (requested.group == "com.google.firebase") {
            details.useVersion '11.8.0'
          }
      }
}

5
ลองใช้วิธีแก้ไขปัญหาอื่น ๆ ทั้งหมดในที่สุดสิ่งนี้ช่วย: /
Ante

@Ali Gurelli ขอบคุณมากฉันลองใช้วิธีแก้ปัญหามากมาย แต่ใช้งานได้เท่านั้น
Bipin Bharti

Thanx แต่สำหรับฉันฉันใช้ Version details.useVersion '15 .0.0 '
Version

ขอบคุณสำหรับการแก้ปัญหา ปัญหาเดียวกันเกิดขึ้นกับฉัน google tap and pay คือ 10.0.0 และ libs ทั้งหมดอยู่ในเวอร์ชันล่าสุด
R World

ทำงานได้อย่างราบรื่นขอบคุณ
Sankalp

14

ถ้า (1. พยายามทำความสะอาดและสร้างงานใหม่) ก็ดี

อื่นถ้า (2. ลองลบงาน gradle ออก) ก็ดี

อื่น -> 3. ลองเพิ่มเกรด. คุณสมบัติ

android.enableD8 = false

else-> 4. เพิ่มmultiDexEnabledtrue ใน build.gradle ของคุณ

android {
    compileSdkVersion 26
    defaultConfig {
      ...
        minSdkVersion 15
        targetSdkVersion 26
        multiDexEnabled true
     ...
    }
}

และเพิ่มการพึ่งพา

dependencies {
    compile 'com.android.support:multidex:1.0.1'}

มันอาจเป็นคนแรกที่ทำงานให้กับคุณและอื่น ๆ แต่มันขึ้นอยู่กับลักษณะของปัญหาของคุณสำหรับฉันเช่น

ฉันพบข้อผิดพลาดเมื่อฉันเพิ่มห้องสมุดนี้

implementation 'com.jjoe64:graphview:4.2.2'

และต่อมาฉันก็พบว่าฉันต้องตรวจสอบและฉันต้องเพิ่มไลบรารี่สนับสนุนรุ่นเดียวกัน ดังนั้นฉันต้องลองรุ่นอื่น

compile 'com.jjoe64:graphview:4.2.1'

และแก้ไขปัญหาได้ ดังนั้นให้ใส่ใจกับสิ่งนั้น


3
วิธีที่มีประโยชน์ที่สุดสำหรับปัญหานี้ สิ่งหนึ่งที่ฉันต้องการพูดถึงคือคุณสามารถใช้ 'gradlew app: transformDexArchiveWithExternalLibsDexMergerForDebug --stacktrace' cmd สำหรับรายละเอียดเพิ่มเติม ฉันบันทึกฉันพบว่าฉันต้องเปิดใช้งาน multidex หวังว่าจะเป็นประโยชน์
แพนด้า

13

ในกรณีของฉันเป็นเพราะห้องสมุดห้อง:

compile 'android.arch.persistence.room:runtime:1.0.0-alpha1'

เปลี่ยนเป็น:

compile 'android.arch.persistence.room:runtime:1.0.0'

ทำงาน


ขอบคุณมากสิ่งนี้ช่วยฉันได้มาก!
Phil

ดีใจมากที่พบคำตอบนี้ ขอบคุณ!
callOfCode

12

เพียงเพิ่มโซลูชันข้างต้น:

ตรวจสอบให้แน่ใจว่าคุณไม่มีการอ้างอิงที่ซ้ำกันซึ่งชี้ไปที่เวอร์ชันต่าง ๆ ในหลาย ๆ ที่ (หรือแม้แต่ในไฟล์เดียวกัน)


ฉันคิดว่านี่ควรตรวจสอบก่อนที่จะเพิ่ม multiDexEnabled จริงและลองคำตอบอื่น ๆ ขอบคุณ!
Aleksandr

11

สวัสดีฉันมีปัญหาเดียวกันพยายามเกือบทุกอย่าง ดังนั้นในที่สุดฉันก็แก้ไขหลังจากต่อสู้นาน 6 ชั่วโมงโดยการดีบั๊กทุกอย่างทีละบรรทัด

classpath 'com.google.gms:google-services:3.0.0'

Google-services 3.0ไม่รองรับ firebase ด้วย Studio 3.0 ที่มี playServiceVersion: 11.6.0 หรือน้อยกว่า

implementation "com.google.firebase:firebase-messaging:$rootProject.ext.playServiceVersion"
implementation "com.google.firebase:firebase-core:$rootProject.ext.playServiceVersion"
implementation "com.firebase:firebase-jobdispatcher-with-gcm-dep:$rootProject.ext.jobdispatcherVersion"

สารละลาย :

ฉันเปลี่ยนบริการของ Googleเป็น

classpath 'com.google.gms:google-services:3.1.1'

และรองรับบริการฐานข้อมูลไฟร์

หวังว่าจะมีใครช่วยประหยัดเวลาของเขา / เธอ


1
ฉันมีปัญหาเดียวกันกับที่ฉันใช้ playServiceVersion เป็นการนำไปใช้งาน 11.4.0 "com.google.firebase: firebase-core: 11.4.0" เปลี่ยนเป็นการใช้งาน "com.google.firebase: firebase-core: 11.6.2" แก้ไขปัญหาของฉัน ปัญหา . ดังนั้นโปรดตรวจสอบการอ้างอิงเวอร์ชันสำหรับ lib ที่แตกต่างกัน
durgeshtrivedi

9
  1. ทำให้สามารถ

    defaultConfig {multiDexEnabled จริง}

  2. หากขั้นตอนที่ 1 ไม่ทำงาน

    ไปที่โครงสร้างโครงการและค้นหาไลบรารี่ภายนอกที่ใช้เวอร์ชั่นอื่น ดับเบิลคลิกที่มันและลบไฟล์ jar ปิดโปรเจ็กต์และเปิดอีกครั้งสำหรับ android studio จะสร้างโครงการอีกครั้ง ปัญหาควรหายไป


+1 - ฉันได้รับการสนับสนุน lib, rxjava และบุคคลที่สาม (13k บรรทัด) ตาของฉันเกือบจะโผล่ออกมาเมื่อฉันเห็นวิธีการนับ
snodnipper

6

หนึ่งในความเป็นไปได้คือการปรากฏตัวของห้องสมุดเดียวกัน แต่กับรุ่นที่แตกต่างกันในการอ้างอิงได้

ฉันมีปัญหากับบรรทัดต่อไปนี้ในไฟล์ gradle:

  • compile fileTree(include: ['*.jar'], dir: 'libs')
  • compile 'com.google.code.gson:gson:2.8.2'

ห้องสมุด gson อยู่ในไดเรกทอรี libs ของฉัน แต่มีรุ่นก่อนหน้า ฉันลบgson-2.3.1.jarจากไดเรกทอรี libs และทุกอย่างกลับสู่ปกติ


ลบออกcompile fileTree(include: ['*.jar'], dir: 'libs')สำหรับฉันด้วย .. ขอบคุณ (y)
Dinuka Salwathura

5

หากข้อผิดพลาดนี้ปรากฏขึ้นสำหรับคุณหลังจากรวมการสนับสนุน kotlin และไม่มีวิธีแก้ไขปัญหาอื่นให้ลองเปลี่ยนการพึ่งพา kotlin ของโมดูลแอพเป็นbuild.gradle:

implementation ("org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version") {
    exclude group: 'org.jetbrains', module: 'annotations'
}

สิ่งนี้ใช้ได้กับฉันใน Android Studio 3.0 Beta 6 ดูคำตอบนี้สำหรับคำอธิบายเพิ่มเติม


ใช่ดูเหมือนว่าการแนะนำ Kotlin อาจทำให้โครงสร้างเสียหายหากคำอธิบายประกอบไม่รวมอยู่
Stoycho Andreev

ขอบคุณ นี่คือการแก้ไขสำหรับฉัน ฉันพยายาม 3 วันเพื่อระบุปัญหาของฉัน
Naveen Kumar M

ลองอัปเกรดเป็นปลั๊กอิน Kotlin เวอร์ชั่น 1.2.30 แทน (เพิ่งเปิดตัว) ตอนนี้สามารถเปิดใช้งานการเรียกใช้ทันทีได้อีกครั้งเช่นกัน!
KTCO

5

ด้วย Android Studio 3.0 build ที่มีเสถียรภาพขั้นตอนด้านล่างนี้ใช้ได้สำหรับฉัน:

  1. เตรียมพร้อมสู่ SdkManager -> Android Sdk -> เครื่องมือ Sdk และอัปเดตบริการ Google play เป็นรุ่นล่าสุดเป็น 46
  2. ทำความสะอาดโครงการและสร้างโครงการใหม่

5

[ไม่สามารถผสาน DEX ได้รับการแก้ไข] หลังจากเวลาผ่านไปหลายชั่วโมงของการโอเวอร์โฟลว์ฉันแก้ไข "ไม่สามารถผสาน DEX ข้อผิดพลาด"

  1. อัพเดตบรรทัด com.android.support ทั้งหมดใน gradle ของคุณเป็น v27.1.0

สาเหตุ - Android อัปเดตแล้วรองรับไลบรารีเป็น v27.1.0 ดังนั้นคุณต้องเปลี่ยนบรรทัดสนับสนุน android ทั้งหมดในไฟล์ gradle เป็น 27.1.0 จาก 26.1.0

  1. ตรวจสอบให้แน่ใจว่าส่วนที่เก็บมีส่วน maven พร้อมกับจุดสิ้นสุด " https://maven.google.com " ตัวอย่างเช่น:

    allprojects {repositories {jcenter () maven {url " https://maven.google.com "}}}

สาเหตุ: - Android ไม่สามารถอัปเดตไลบรารีสนับสนุนในตัวจัดการ SDK และตอนนี้ใช้ maven.google.com เพื่ออัปเดตดังนั้นคุณต้องรวมสิ่งนี้เพื่อใช้ไลบรารีสนับสนุน 27.1.0

หลังจากเปลี่ยนเวอร์ชัน: 1. ล้างข้อมูลโครงการ 2. สร้างโครงการใหม่



4

การติดตั้งบริการ Google Play (เวอร์ชั่นล่าสุด) + รวมถึง

android {
    defaultConfig {
        multiDexEnabled true
        }
}

ใน build.gradle แก้ไขปัญหาให้ฉันตรวจสอบให้แน่ใจว่าได้ทำความสะอาดและสร้างโครงการใหม่!


3

ในกรณีของฉันมันคือ gson-2.8.1.jarซึ่งฉันได้เพิ่มไปยังโฟลเดอร์libsของโครงการ แต่การอ้างอิงนั้นมีอยู่แล้วโดย SDK ดังนั้นจึงไม่จำเป็นต้องเพิ่มgson-2.8.1.jarไปยังโฟลเดอร์ libs

เมื่อฉันเอามันออกมาจากโครงการgson-2.8.1.jarรวบรวมโดยไม่มีข้อผิดพลาด wiered นี้

จึงพยายามที่จะแก้ไขlibsโฟลเดอร์และการอ้างอิง


3

ฉันเห็นด้วยกับ Chris-Jr หากคุณกำลังใช้ Firebase เพื่อฝังโฆษณา AdMob ของคุณ (หรือแม้ว่าคุณจะไม่ใช่) play-services-analytics จะรวม play-services-ads- แม้ว่าคุณจะไม่ได้เพิ่มสิ่งนั้นในการพึ่งพา เห็นได้ชัดว่า Google ทำผิดพลาดในการเปิดตัว 11.4.0 เนื่องจากการวิเคราะห์รวมถึงโฆษณารุ่น 10.0.1 ไม่ใช่ 11.4.0 (เลื่อนเมาส์เหนือคำใบ้ในการไล่ระดับสีแสดงสิ่งนี้)

ฉันเพิ่มคอมไพล์ด้วยตนเอง'com.google.android.gms: play-services-ads: 11.4.0'ที่ด้านบนซึ่งใช้งานได้ แต่หลังจากฉันปิดการใช้งานการเรียกใช้ทันที: http://stackoverflow.com/a/35169716/530047

ดังนั้นอาจถดถอยไปเป็น 10.0.1 หรือเพิ่มโฆษณาและปิดใช้งานการเรียกใช้ทันที นั่นคือสิ่งที่ฉันพบถ้าช่วยได้


OP ได้กล่าวถึงบริการ Play หรือไม่
IgorGanapolsky

คำตอบที่ได้รับการอนุมัติทำ หากปัญหานี้เกิดขึ้นโดยไม่มีสถานการณ์นั้นฉันก็ไม่รู้!
Jonathan

2

ฉันพบปัญหาเดียวกันและพบเหตุผลที่แท้จริงสำหรับกรณีของฉัน ก่อนหน้านี้ฉันยังลองคำตอบก่อนหน้าทั้งหมดอีกครั้ง แต่ก็ไม่ได้แก้ปัญหา ฉันมีสองโมดูลในโปรเจ็กต์แอพ wear และ build.gradle ดังนี้:

สวมโมดูล build.gradle:

implementation project(':common')
implementation files('libs/farmer-motion-1.0.jar')

build.gradle ของโมดูลทั่วไป:

implementation files('libs/farmer-motion-1.0.jar')

ก่อนที่จะอัปเกรดเป็น gradle 3.x 'การใช้งาน' คือ 'คอมไพล์' ทั้งหมด

ฉันรัน gradlew ด้วย --stacktrace ตัวเลือกเพื่อรับการติดตามสแต็คคุณสามารถคลิกที่นี่บนหน้าต่างคอนโซล gradle เมื่อเกิดปัญหานี้ขึ้น และพบว่าการพึ่งพาแพคเกจ jar ซ้ำ:

Caused by: com.android.dex.DexException: Multiple dex files define Lcom/farmer/motion/common/data/pojo/SportSummary$2;

Class SportSummary ในแพ็คเกจชาวนา-motion-1.0.jar หลังจากอ่านคู่มือการโยกย้ายอย่างเป็นทางการฉันเปลี่ยน build.gradle ของฉันเป็นดังนี้:

สวมโมดูล build.gradle:

implementation project(':common')
// delete dependency implementation files('libs/farmer-motion-1.0.jar')

โมดูลทั่วไป的 build.gradle:

api files('libs/farmer-motion-1.0.jar') // change implementation to api

ตอนนี้สวมใส่โมดูลจะมีการพึ่งพาของการส่งออกของเกษตรกรเคลื่อนไหว 1.0.jar โดยโมดูลทั่วไป ถ้ามีมีการพึ่งพาแพคเกจขวดในช่วง Runtime ไม่มี ' การดำเนินการ ' ขึ้นของแพคเกจขวดนอกจากนี้ยังสามารถเปลี่ยนแปลง 'compileOnly'


2

ฉันยังมีปัญหา

ผมสามารถที่จะแก้ปัญหาโดยการเปลี่ยนcompileSdkVersionและtargetSdkVersionการรุ่นล่าสุด


2

สำหรับโครงการของเราเราเพิ่มขวดเดียวกันสองครั้งโดยใช้ชื่อแตกต่างกัน การลบหนึ่งในนั้นแก้ไขปัญหาได้


นี่เป็นการแก้ไขปัญหาของฉัน ฉันกำลังสร้างโครงการห้องสมุด Android ภายในและภายใต้libsโฟลเดอร์ของฉันฉันมีไฟล์ jar สองไฟล์ไฟล์หนึ่งซึ่งเป็นข้อมูลสำรองของอีกไฟล์หนึ่ง แต่มีชื่อไฟล์ต่างกัน
hopia

2

สิ่งนี้อาจไม่ใช่ปัญหาของคุณ แต่ฉันได้รับข้อผิดพลาดนี้เมื่อฉันรวมไลบรารีสองรายการที่เหมือนกัน (แต่ชื่อต่างกัน) โดยบังเอิญในส่วนการพึ่งพา {} ของโครงการ


1

สำหรับฉันมันคือการปรับปรุงการส่งข้อความfirebaseในapp \ build.gradle:

compile 'com.google.firebase:firebase-messaging:10.0.1'

ถึง

compile 'com.google.firebase:firebase-messaging:11.4.2'

1

สาเหตุหลักอย่างหนึ่งที่เป็นไปได้: การอ้างอิงชั่วคราวที่ซ้ำกันซึ่งไม่ได้รับการจัดการอย่างถูกต้องโดย Android Studio นำเข้าโครงการหลายโมดูล ตรวจสอบรายการของคุณและลบออก สำหรับฉันการแก้ไขเป็นแบบนี้:

--- a/project/module/build.gradle
+++ b/project/module/build.gradle
@@ -21,5 +21,4 @@ android {
 dependencies {
     implementation project(':upstream-dependency-project')
     implementation 'com.android.support:support-v4:18.0.0'
-    implementation files('libs/slf4j-android-1.6.1-RC1.jar')
 }

1

ฉันหาสาเหตุของปัญหานี้สำหรับโครงการของฉัน ผมได้เพิ่มอีกหนึ่งครั้งที่สองในการพึ่งพา build.gradle หนึ่งครั้งโดยเพิ่มการพึ่งพาและอีกครั้งโดยเพิ่มการพึ่งพา jar

คอมไพล์ 'org.achartengine: achartengine: 1.2.0'
...
ไฟล์การนำไปใช้ ('../ achartengine-1.2.0.jar')

หลังจากลบปัญหาบรรทัดแรกแล้ว


1

ในกรณีที่คำตอบยอดนิยมไม่ได้ผลสำหรับคุณปัญหาของคุณอาจเป็นไปได้ว่าคุณมีการพึ่งพาหลายครั้งที่ขึ้นอยู่กับไลบรารีเดียวกัน

นี่คือเคล็ดลับการแก้จุดบกพร่อง ในโค้ดตัวอย่างนี้ com.google.code.findbugs:jsr305:3.0.0คือไลบรารีที่ละเมิด

ทำความสะอาดและสร้างใหม่ทุกครั้งที่คุณแก้ไขเพื่อตรวจสอบวิธีแก้ไขของคุณ!

  1. สร้างด้วย--stacktraceธงบนเพื่อดูรายละเอียดเพิ่มเติม มันจะบ่นเกี่ยวกับชั้นเรียน Google ที่ชั้นเรียนเพื่อหาห้องสมุด นี่คือวิธีที่คุณสามารถตั้งค่าสตูดิโอ Android เพื่อเรียกใช้เสมอ gradle กับ--stacktraceธง

  2. ลองดูที่ Gradle Console ใน Android Studio View > Tool Windows > Gradle Consoleหลังจากสร้างเสร็จ

  3. ตรวจสอบ dependences ./gradlew -q app:dependenciesซ้ำแล้วซ้ำอีกโดยการทำงาน คุณสามารถเรียกใช้ใหม่ได้ทุกครั้งที่คุณแก้ไข build.gradle

  4. ใน build.gradle

    android {
            ...
            configurations.all {
                resolutionStrategy {
                    // Force a particular version of the library 
                    // across all dependencies that have that dependency
                    force 'com.google.code.findbugs:jsr305:3.0.0'
                }
            }
    }
  5. ใน build.gradle

    dependencies {
        ...
        implementation('com.google.auth:google-auth-library-oauth2-http:0.6.0') {
            // Exclude the library for this particular import
            exclude group: 'com.google.code.findbugs'
        }
    }
  6. ใน build.gradle

    android {
        ...
        configurations.all {
            resolutionStrategy {
                // Completely exclude the library. Works for transitive
                // dependencies.
                exclude group: 'com.google.code.findbugs'
            }
        }
    }
  7. หากการอ้างอิงบางอย่างของคุณอยู่ในไฟล์ jar ให้เปิดไฟล์ jar และดูว่ามีชื่อคลาสที่ขัดแย้งกันหรือไม่ หากเป็นเช่นนั้นคุณอาจจะต้องมีการสร้างใหม่ขวดที่มีชื่อชั้นเรียนใหม่หรือมองเข้าไปในการแรเงา

การอ่านพื้นหลังเพิ่มเติม:


1
android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

2
คุณสามารถทำอย่างละเอียด?
sg7

ฉันยังมีปัญหาเดียวกัน แต่ฉันรู้ว่าการแก้ปัญหาของฉันในขณะนั้น แต่ในการปรับปรุงในอนาคตสิ่งต่าง ๆ อาจเปลี่ยนแปลงจริง
Eben Watts

1

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

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