【问题标题】:AndroidStudio DexArchiveMergerException: Unable to merge dex after updateAndroid Studio DexArchiveMergerException:更新后无法合并dex
【发布时间】:2019-01-28 13:36:18
【问题描述】:

将我的 Android Studio 更新到当前版本后,我在清理和重建项目后遇到以下错误:

java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException:无法合并 dex ... 引起:java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException:无法合并 dex 在 java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1431) 在 java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) 在 java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) 在 java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) 在 java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) 引起:com.android.builder.dexing.DexArchiveMergerException: 无法在以下位置合并 dex com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:72) 在 com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36) 在 java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424) ... 4 更多原因:com.android.dex.DexException: Multiple dex 文件定义 Landroid/support/design/widget/CoordinatorLayout$Behavior;在 com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661) 在 com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616) 在 com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598) 在 com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) 在 com.android.dx.merge.DexMerger.merge(DexMerger.java:198) 在 com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61) ... 6 更多

应用程序/构建以前工作过。

应用 gradle 文件如下所示:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
    compileSdkVersion 26
    useLibrary 'org.apache.http.legacy'
    defaultConfig {
        multiDexEnabled true
        applicationId 'com.foo.bar'
        minSdkVersion 22
        targetSdkVersion 23
        versionCode 7
        versionName "2.1.2"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }

    compileOptions {
        targetCompatibility 1.8
        sourceCompatibility 1.8
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    implementation "android.arch.lifecycle:extensions:1.1.1"
    annotationProcessor "android.arch.lifecycle:compiler:1.1.1"

    implementation 'com.github.GrenderG:Toasty:1.2.5' 
    implementation 'com.jakewharton:butterknife:8.1.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.1.0'
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'com.squareup.retrofit2:converter-moshi:2.3.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.basgeekball:awesome-validation:2.0' 
    implementation 'com.github.apl-devs:appintro:v4.2.2'
    implementation 'com.github.KyleBanks:animated-line-graph-view:v1.0.1'

    // constraint layout
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'

    // country code picker phone numbers
    implementation 'com.hbb20:ccp:2.2.2'

    // firebase
    implementation "com.google.android.gms:play-services-base:15.0.1"
    implementation 'com.google.firebase:firebase-core:16.0.1'
    implementation 'com.google.firebase:firebase-messaging:17.3.0'

    implementation group: 'com.pubnub', name: 'pubnub-gson', version: '4.18.0'
    implementation 'io.pristine:libjingle:9694@aar'
    implementation project(':pnwebrtc')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

apply plugin: 'com.google.gms.google-services'

repositories {
    mavenCentral()
}

【问题讨论】:

    标签: java android android-studio gradle


    【解决方案1】:

    它抱怨说:

    多个dex文件定义Landroid/support/design/widget/CoordinatorLayout$Behavior

    因此,替换为:

    implemention "com.basgeekball:awesome-validation:2.0"
    

    用这个:

    implemention ("com.basgeekball:awesome-validation:2.0") {
        exclude group: "com.android.support.constraint", module: "constraint-layout"
    }
    

    在 GitHub 上看到,它也使用 ConstraintLayout

    【讨论】:

    • 如何决定我必须添加排除组到哪个依赖项
    【解决方案2】:

    你的应用程序类呢?如果您没有,则需要创建一个并将其名称放在清单文件中,因为您的代码应该是这样的

    AndroidManifest.xml

    <application
            android:name="ApplicationName"
    ...
    >
    

    您的应用程序类将是:

    public class ApplicationName extends MultiDexApplication{
    .....
    
     @Override
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
            MultiDex.install(this);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多