Flutter开发Gradle编译遇Multidex报错:类重复定义
解决Flutter Gradle编译时的Multiple Dex Files冲突问题
这个Dex冲突问题我在Flutter项目里踩过好几次坑!核心原因是你的项目里重复定义了com/google/android/gms/internal/zzcew这个类,一般是因为不同的Flutter插件引入了版本不一致的Google Play Services依赖导致的。下面是几个亲测有效的解决步骤:
统一Google Play Services依赖版本
很多Flutter插件会各自依赖不同版本的Google服务库,这是冲突的重灾区。你可以在项目根目录的android/build.gradle中添加全局版本控制,强制所有插件使用同一个版本的依赖:subprojects { project.configurations.all { resolutionStrategy.eachDependency { details -> if (details.requested.group == 'com.google.android.gms' && !details.requested.name.contains('multidex') ) { details.useVersion '17.0.0' // 建议使用当前稳定兼容的版本,可根据需要调整 } } } }排查并移除重复依赖
先通过flutter pub deps命令生成项目的依赖树,仔细查看哪些插件重复引入了com.google.android.gms相关的包。如果某个插件不需要Google服务支持,可以在android/app/build.gradle中排除它的对应依赖:implementation(project(':problematic_plugin')) { exclude group: 'com.google.android.gms' }启用Multidex(适用于方法数超限场景)
如果你的项目代码和依赖的方法总数超过了65536的限制,也会触发Dex合并错误。这种情况下需要开启Multidex支持:- 在
android/app/build.gradle的defaultConfig块中添加:multiDexEnabled true - 引入Multidex库:
implementation 'com.android.support:multidex:1.0.3' - 自定义Application类继承
MultiDexApplication,或者在现有Application的attachBaseContext方法中调用MultiDex.install(this)
- 在
清理缓存后重新构建
有时候旧的Gradle缓存会残留冲突的依赖文件,执行以下命令彻底清理后再重新构建:flutter clean rm -rf android/.gradle rm -rf ~/.gradle/caches flutter pub get flutter run
内容的提问来源于stack exchange,提问作者SpoonerNZ
相关产品推荐
相关产品推荐

