Flutter中如何同时使用Java和Kotlin的MainActivity类?
核心原因
你的Java和Kotlin两个SDK中都包含了同名的MainActivity类,当同时引入时,编译阶段会因为全限定类名重复而抛出冲突错误,这和你尝试用Java调用Kotlin类的操作无关。
具体解决步骤
重命名冲突类(最直接方案)
任选其中一个SDK,把里面的MainActivity改成独特的类名,比如JavaSdkMainActivity或KotlinSdkMainActivity,同时修改对应AndroidManifest.xml里<activity>标签的android:name属性,确保配置和类名一致。抽象基类拆分逻辑
如果两个SDK的MainActivity有通用逻辑,可将公共代码抽成BaseMainActivity抽象类,让Java和Kotlin SDK分别实现各自的子类(如JavaImplMainActivity、KotlinImplMainActivity),从根源避免类名重复。隔离测试类到debug源码集
如果其中一个SDK的MainActivity仅用于内部测试,可将其移到src/debug/java(或kotlin)目录下,这样正式打包release版本时不会包含该类,也就不会触发冲突。混淆重命名(临时 workaround)
仅针对release包,可通过R8/ProGuard规则给其中一个重复类重命名:-keep class com.yourpackage.old.MainActivity { *; } -renameclass com.yourpackage.old.MainActivity to com.yourpackage.new.KotlinSdkMainActivity注意:这种方式要确保Method Channel的调用逻辑不受混淆影响,不推荐作为长期解决方案。
验证方式
修改后先单独编译两个SDK确认功能正常,再同时引入到项目中编译,检查是否仍存在类重复定义错误。
内容的提问来源于stack exchange,提问作者NIMALESH E E0119055

