【问题标题】:gradle build fails trying to merge dex archivesgradle build 尝试合并 dex 档案失败
【发布时间】:2020-01-13 05:40:09
【问题描述】:

我有一个引用子项目的顶级 build.gradle 文件,包括一个 android 应用程序。每个子项目似乎都可以单独构建,但是当我执行MyAndroidApp:transformDexArchiveWithDexMergerForRelease 的任务时,它无法合并所有中间jar。

我尝试将 multiDexEnabled 设置为 true,但这似乎没有效果。

错误:

* What went wrong:
Execution failed for task ':MyAndroidApp:transformDexArchiveWithDexMergerForRelease'.
> com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\dexBuilder\release\32, C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\externalLibsDexMerger\release\0, C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\dexBuilder\release\18.jar, C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\dexBuilder\release\19.jar, C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\dexBuilder\release\20.jar, C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\dexBuilder\release\21.jar, C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\dexBuilder\release\22.jar, C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\dexBuilder\release\23.jar, C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\dexBuilder\release\24.jar, C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\dexBuilder\release\25.jar, C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\dexBuilder\release\26.jar, C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\dexBuilder\release\27.jar, C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\dexBuilder\release\28.jar, C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\dexBuilder\release\29.jar, C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\dexBuilder\release\30.jar, C:\Projects\proj_root\MyAndroidApp\build\intermediates\transforms\dexBuilder\release\31.jar

Caused by: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException:

顶级 build.gradle:

应用插件:'java'

buildscript {
    repositories {
        // google MUST be first for some reason (lint tools related)
        // https://stackoverflow.com/questions/46972122/could-not-find-com-android-tools-lintlint-gradle-android-studio-3
        google()
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.0'
        classpath 'com.github.jengelman.gradle.plugins:shadow:5.1.0'
    }
}

subprojects {
    repositories {
        google()
        mavenCentral()
        jcenter()
    }
    // print test results
    tasks.withType(Test) {
        afterSuite { desc, result ->
            if (!desc.parent)
                println("${result.resultType} " +
                        "(${result.testCount} tests, " +
                        "${result.successfulTestCount} successes, " +
                        "${result.failedTestCount} failures, " +
                        "${result.skippedTestCount} skipped)")
        }
    }
}

// Version definitions of all of the libraries we're using.  They're defined
// here to ensure that all projects are using the same versions of common
// dependencies:
ext.libs = [
    android_sup_v4: 'com.android.support:support-v4:25.3.1',
    android_sup_appcompat_v7: 'com.android.support:appcompat-v7:25.3.1',
    android_sup_design: 'com.android.support:design:25.3.1',
    android_sup_card_v7: 'com.android.support:cardview-v7:25.3.1',
    guava: 'com.google.guava:guava:17.0',
    graph_view: 'com.jjoe64:graphview:3.1.4',
    junit: 'junit:junit:4.12',
    log4j2: 'org.apache.logging.log4j:log4j-core:2.8.2',
    mocktio: 'org.mockito:mockito-all:1.10.19'
]

顶级 settings.gradle 文件(总结):

rootProject.name = 'My Main App'

include <<various other sub projects>>

Android APP构建文件:

apply plugin: 'com.android.application'

repositories {
    google()
    mavenCentral()
    jcenter()
}

android {
    compileSdkVersion 24

    // current build tools version"
    buildToolsVersion "28.0.3"
    defaultConfig {
        multiDexEnabled true

    }

    lintOptions {
        abortOnError false
    }
}


dependencies {
    dependencies {
        compile project(':CoreApp.SubProj')
    }
}

【问题讨论】:

    标签: java android gradle


    【解决方案1】:

    您是否尝试过实现该库?

    implementation 'com.android.support:multidex:1.0.3'
    

    【讨论】:

    • 我忘了说我试过了,但没有成功。 (我试过编译和实现)
    【解决方案2】:

    将此添加到 app/build.gradle:

    android {
        defaultConfig {
           multiDexEnabled true
        }
    }
    

    【讨论】:

    • 我已经在 android app 子项目的 build.gradle 文件中有这个。我在其他地方还需要它吗?
    • @StealthRabbi 试试这个 javaMaxHeapSize "4g" 。在 defaultConfig 标签中添加这个
    • dexOptions 块中的作用?好像没有效果
    • 这不在 defaultConfig 中。了解它是未知的。放在 dexOptions 里面是没有效果的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多