Flutter引入Java WiFi插件出现mergeDexDebug类重复编译错误求助
问题成因
- 直接原因是Dex合并阶段出现重复类冲突:错误提示
com.ly.wifi.WifiDelegate$NetworkChangeReceiver类重复存在,说明项目中存在两份相同全限定名的类定义。 - 常见触发场景:
- 你既在pubspec.yaml中引入了该自研WiFi插件的依赖,又手动将
WifiDelegate.java、WifiPlugin.java两个源码文件复制到了主工程app/src/main/java/com/ly/wifi目录下,两处的类完全重复导致冲突。 - 本地libs目录下存在包含该WiFi模块的aar/jar包,同时又保留了同名源码文件,二者重复打包。
- 你既在pubspec.yaml中引入了该自研WiFi插件的依赖,又手动将
- 你遇到的
--no-shrink、--stacktrace参数不存在的问题,是参数传递位置错误:--no-shrink是Flutter命令的参数,需要加在flutter run或flutter build之后,不是传给Gradle的参数;--stacktrace是Gradle参数,需要通过--android-args透传,完整写法为flutter build apk --android-args="--stacktrace"。
解决方案
- 排查并删除重复类
优先删除你手动复制到主工程app/src/main/java/com/ly/wifi目录下的两个Java文件,如果你已经在pubspec中引入了该WiFi插件依赖,直接使用插件自带的实现即可,无需重复添加源码。如果没有引入插件依赖,就检查app/libs目录是否有包含该WiFi模块的依赖包,删除重复的依赖包,源码和依赖包二选一保留即可。 - 修复Dart代码语法错误
你提供的Dart代码中有两处明显笔误,将错误的end Map修正为Map即可:// 错误写法 end Map<String, dynamic> params = { // 修正后写法 Map<String, dynamic> params = { - 清理重建项目
依次执行以下命令清理缓存后重新编译:flutter clean rm -rf android/.gradle flutter pub get # 运行项目并关闭压缩 flutter run --no-shrink - 可选:开启MultiDex适配
如果上述操作后仍存在Dex合并问题,在android/app/build.gradle中开启MultiDex支持:
在defaultConfig块中添加配置:
然后在defaultConfig { // 其他原有配置 multiDexEnabled true }dependencies块中添加依赖:dependencies { // 其他原有依赖 implementation "androidx.multidex:multidex:2.0.1" }
内容的提问来源于stack exchange,提问作者GabrielTura
相关产品推荐
相关产品推荐

