Android 无法合并 dex 错误。查看内容

标签 android gradle android-build

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

我使用的是 Android Studio 3.0.1 版本。

我还尝试了“清理项目”和“重建项目”。

*项目构建gradle

buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.3'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
    }
}

*模块构建gradle

apply plugin: 'com.android.application'
apply plugin: 'com.google.protobuf'
ext {
    grpcVersion = '1.4.0'
}

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.2"
    defaultConfig {
        applicationId "com.example.backkom.speechtest"
        minSdkVersion 14
        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'
        }
    }
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.2'
    }
}

protobuf {
    protoc {
       artifact = 'com.google.protobuf:protoc:3.3.0'
    }
    plugins {
        javalite {
            artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0"
        }
        grpc {
            artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}"
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.plugins {
                javalite {}
                grpc {
                // Options added to --grpc_out
                    option 'lite'
                }
            }
        }
    }
}

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

    compile 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    // gRPC
    compile "io.grpc:grpc-okhttp:$grpcVersion"
    compile "io.grpc:grpc-protobuf-lite:$grpcVersion"
    compile "io.grpc:grpc-stub:$grpcVersion"
    compile 'javax.annotation:javax.annotation-api:1.2'
    protobuf 'com.google.protobuf:protobuf-java:3.3.1'

    compile group: 'com.google.api.grpc', name: 'grpc-google-cloud-speech-v1', version: '0.1.13'

    // OAuth2 for Google API
    compile('com.google.auth:google-auth-library-oauth2-http:0.7.0') {
        exclude module: 'httpclient'
    }

    compile 'com.android.support:multidex:1.0.2'
}

当我进行重建项目时,出现如下错误。

Error:Execution failed for task ':app:transformClassesWithMultidexlistForDebug'. java.io.IOException: Can't write [C:\Users\backkom\AndroidStudioProjects\SpeechTest\app\build\intermediates\multi-dex\debug\componentClasses.jar] (Can't read [C:\Users\backkom.gradle\caches\modules-2\files-2.1\com.google.protobuf\protobuf-java\3.3.1\e8964a2667e55d11a4505b329a4c34247663920b\protobuf-java-3.3.1.jar(;;;;;;**.class)] (Duplicate zip entry [protobuf-java-3.3.1.jar:com/google/protobuf/ExperimentalApi.class]))

最佳答案

检查您是否(直接或间接地)使用 com.google.protobuf:protobuf-javacom.google.protobuf:protobuf-lite 组装 APK。后者包括前者的类的一个子集,当 dexer 发现第一个重复的类时会提示。您应该排除两者之一。

  1. 排除 protobuf-java 如果你想严格只使用 Protobuf 的精简子集或
  2. 删除 implementation ... protobuf-lite 行并让 ProGuard 删除不需要的类

关于Android 无法合并 dex 错误。查看内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48218724/

相关文章:

android - GPS 可以在真手机上的 Android 中模拟吗? (没有模拟器)

android - Gradle 错误 : configuration declares dependency which is not declared

android - 将 Android Studio 升级到 Arctic Fox 后 Gradle 同步失败

android - 错误 :Execution failed for task?

安卓 Gradle : archive output directory in Jenkins

c# - 绑定(bind)到位于 Xamarin 绑定(bind) Java 库中的服务

javascript - Cordova InAppBrowser 和 FaceBook 应用程序事件记录器

android - 如何使用 OpenCV + Qt5 在 Android 上设置相机的使用

android - 解决 Android Studio 中弃用的 NDK 警告

android - soong/android.bp 构建是如何工作的?