添加多个Flutter库模块因重复类导致构建失败
构建失败:重复类
io.flutter.plugins.GeneratedPluginRegistrant 构建失败日志
gw assembleDebug --scan > Task :app:checkDebugDuplicateClasses FAILED FAILURE: Build failed with an exception. * 问题原因: 执行任务 ':app:checkDebugDuplicateClasses' 失败。 > 执行 com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable 时发生错误 > 在模块 flutter_debug-1.0-runtime (com.example.a.library_a:flutter_debug:1.0) 和 flutter_debug-2.0-runtime (com.example.b.library_b:flutter_debug:2.0) 中发现重复类 io.flutter.plugins.GeneratedPluginRegistrant 请查看文档了解如何修复依赖解析错误。
复现步骤
- 创建Flutter模块library_a:
flutter create -t module --org com.example.a library_a cd library_a flutter pub add android_intent_plus flutter build aar
- 创建Flutter模块library_b:
cd .. flutter create -t module --org com.example.b library_b cd library_b flutter pub add android_intent_plus
- 打开library_b的
pubspec.yaml,将android_intent_plus版本改为1.0.1,然后构建AAR:
flutter build aar --build-number=2.0
- 将library_a和library_b同时添加到新Android项目中,触发构建失败。
Flutter Doctor信息
Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 3.3.10, on macOS 12.5.1 21G83 darwin-arm, locale en-DE) [✓] Android 工具链 - 开发Android设备(Android SDK版本33.0.0) [✓] Xcode - 开发iOS和macOS应用(Xcode 14.2) [✓] Chrome - 开发Web应用 [!] Android Studio ✗ 无法找到捆绑的Java版本。 [!] Android Studio ✗ 无法找到捆绑的Java版本。 [!] Android Studio ✗ 无法找到捆绑的Java版本。 [✓] Android Studio(版本2021.3) [!] Android Studio ✗ 无法找到捆绑的Java版本。 [✓] IntelliJ IDEA Ultimate Edition(版本2022.3) [✓] IntelliJ IDEA Ultimate Edition(版本2022.3) [✓] IntelliJ IDEA Ultimate Edition(版本2022.2.3) [✓] VS Code(版本1.74.1) [✓] 已连接设备(2台可用) [✓] HTTP主机可用性
解决方案
这个问题源于两个Flutter模块的flutter_debug runtime包都自动生成了GeneratedPluginRegistrant类,导致类路径冲突。以下是几种可行的修复方式:
1. 排除重复依赖模块
在Android项目的app模块build.gradle中,针对其中一个Flutter库排除重复的runtime模块:
dependencies { implementation('com.example.a.library_a:flutter_debug:1.0') { exclude group: 'com.example.a.library_a', module: 'flutter_debug' } implementation 'com.example.b.library_b:flutter_debug:2.0' }
如果是通过本地模块引入,可改为:
implementation project(':library_a') { exclude module: 'flutter_debug' }
2. 手动注册插件(推荐)
禁用自动生成的GeneratedPluginRegistrant,改为手动注册插件,从根源避免重复类:
- 在每个Flutter模块的
android/app/src/main/kotlin/[包名]/MainActivity.kt中重写configureFlutterEngine方法:
import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugins.androidintent.AndroidIntentPlugin class MainActivity : FlutterActivity() { override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) AndroidIntentPlugin.registerWith(flutterEngine.dartExecutor.binaryMessenger) } }
- 在Flutter模块的
pubspec.yaml中添加配置,禁止自动生成注册类:
flutter: generate: false
3. 统一插件版本
若业务允许,将两个Flutter模块中的android_intent_plus版本统一,可降低冲突概率(但无法完全避免不同模块runtime包的类重复问题)。
内容的提问来源于stack exchange,提问作者Sinan Kozak
相关产品推荐
相关产品推荐

