Android Gradle多模块transformDexArchiveWithDexMergerForDebug任务失败求助
我之前也踩过Dex合并失败的坑,结合你的项目结构(根目录下samples和tinyarbrowser两个同级模块,samples依赖tinyarbrowser),给你整理几个大概率能解决问题的步骤:
先清理缓存再重新构建
这是最基础但经常被忽略的操作,很多隐性的缓存冲突都能靠这个解决。在终端执行:./gradlew clean ./gradlew assembleDebug等清理完成后再重新构建,看看问题是否消失。
排查依赖冲突
Dex合并失败最常见的原因就是重复依赖或者版本不一致。你可以先查看samples模块的完整依赖树:./gradlew samples:dependencies重点留意是否有同一个库在samples和tinyarbrowser中被引入了不同版本,或者存在完全重复的依赖。如果发现冲突,就在samples的build.gradle里通过
exclude剔除重复部分,比如:implementation(project(":tinyarbrowser")) { exclude group: 'com.example', module: 'conflicting-library' }启用MultiDex(如果方法数超限)
如果你的项目总方法数超过了65536的阈值,也会触发Dex合并失败。可以在samples模块的build.gradle中开启MultiDex:android { defaultConfig { multiDexEnabled true } } dependencies { implementation 'androidx.multidex:multidex:2.0.1' }要是你用了自定义Application类,记得让它继承
MultiDexApplication,或者在attachBaseContext方法里调用MultiDex.install(this)。检查模块的SDK版本一致性
一定要确保samples和tinyarbrowser两个模块的compileSdkVersion、targetSdkVersion、minSdkVersion完全一致。版本不匹配会导致编译生成的字节码不兼容,进而引发合并失败。查看详细错误日志定位问题
有时候默认的错误提示不够明确,你可以执行构建命令时加上--stacktrace参数获取更详细的日志:./gradlew assembleDebug --stacktrace日志里会明确指出是哪个类或者哪个库导致的冲突,跟着提示精准解决会高效很多。
内容的提问来源于stack exchange,提问作者kkaun

