Ubuntu Docker镜像CI环境Android Gradle构建失败求助
我之前在基于Ubuntu的Docker CI环境里踩过Multidex列表生成的坑,跟你遇到的问题几乎一模一样,给你几个实用的排查和解决方向:
先获取详细日志定位根源
按照报错提示,在CI的构建命令里加上--info或--debug参数,比如:./gradlew assembleDevDebug --info详细日志会告诉你具体是哪个类、依赖或者配置导致的生成失败,比如重复类、缺失类文件,或者依赖冲突,这是排查的第一步。
确保CI与本地的Java版本一致
Multidex工具对JDK版本比较敏感,我之前就是因为本地用JDK11,CI镜像里默认是JDK8,导致构建失败。检查你的Docker镜像里的JDK版本,和本地开发环境保持一致,比如在Dockerfile里指定:FROM openjdk:11-jdk清理CI构建缓存
CI环境的缓存有时候会残留旧的构建产物,导致Multidex生成时冲突。可以在构建前强制清理:./gradlew clean assembleDevDebug也可以配置Gradle缓存策略,排除
build/intermediates/multidex这类容易出问题的目录。检查Multidex基础配置是否正确
确认你的模块build.gradle里已经正确开启Multidex:android { defaultConfig { multiDexEnabled true } } dependencies { implementation 'androidx.multidex:multidex:2.0.1' }如果自定义了Application类,要么继承
MultiDexApplication,要么在attachBaseContext方法里调用:@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }排查依赖冲突或重复类
不同依赖包中存在重复类是Multidex生成失败的常见原因。用Gradle命令查看依赖树:./gradlew :Callsign:dependencies找出重复的依赖组或模块,用
exclude排除多余的,比如:implementation('com.example.some-library:1.0.0') { exclude group: 'androidx.appcompat', module: 'appcompat' }给CI构建分配足够内存
Multidex生成主dex列表需要一定的内存,CI机器资源有限时容易出错。可以在gradle.properties里增加JVM参数:org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError或者在构建命令里临时指定:
./gradlew assembleDevDebug -Dorg.gradle.jvmargs="-Xmx4096m"
内容的提问来源于stack exchange,提问作者Yanislav Mihaylov

