Unity中使用EDM集成Firebase/AdMob时,正确配置mainTemplate.gradle以避免重复类或Dex错误的方法
嘿,我之前也踩过一模一样的坑!当Unity启用自定义Gradle模板后,最容易出问题的地方就是EDM(External Dependency Manager)自动集成的依赖和我们手动添加的重复了——毕竟Firebase和AdMob本身就共用不少核心库,重复引入直接就会触发Dex冲突。下面是我亲测有效的解决步骤,一步步来就行:
别手动重复添加Firebase/AdMob依赖
EDM的核心作用就是帮我们自动管理Android端的依赖,所以你只需要在Unity的Package Manager里导入官方的Firebase和AdMob Unity包就行,千万不要在mainTemplate.gradle的dependencies块里手动写implementation相关的Firebase/AdMob依赖。另外要确认EDM的自动解析是开启的:打开Window > Package Manager > External Dependency Manager > Android Resolver > Settings,勾选Enable Auto-Resolution,让它自动处理依赖版本和冲突。保留EDM的依赖注入占位符
启用自定义模板后,mainTemplate.gradle里的dependencies块里必须保留**DEPS**这个占位符,EDM会自动把解析好的依赖注入到这里。正确的dependencies块应该是这样的:dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) **DEPS** // 这个绝对不能删!EDM依赖注入的关键 }如果之前不小心删掉了,一定要加回来。
强制使用AndroidX避免Support库冲突
现在Firebase和AdMob都全面切换到AndroidX了,旧的Support库很容易和AndroidX库冲突。在mainTemplate.gradle的最顶部加上这两行配置,让Unity自动转换所有依赖到AndroidX:android.useAndroidX=true android.enableJetifier=true同时要确保Unity Player Settings里的
Other Settings > Configuration > Scripting Runtime Version是.NET 4.x Equivalent,这是AndroidX兼容的前提。清理冗余文件和缓存
- 检查Unity项目的
Plugins/Android文件夹,如果之前手动放了Firebase或AdMob的jar/aar包,全部删掉——EDM会从Maven仓库拉取官方最新版本,本地文件只会造成冲突。 - 点击
Assets > External Dependency Manager > Android Resolver > Resolve,让EDM重新解析并同步依赖。 - 关闭Unity,删除项目根目录下的
Library文件夹(记得备份重要资源),然后重新打开项目,让Unity重新生成缓存。
- 检查Unity项目的
正确配置ProGuard规则
如果是为了Firebase/AdMob添加ProGuard规则,不要随便写在模板里,要放在android块的buildTypes中,比如:android { ... buildTypes { release { minifyEnabled true // 这里可以引用自定义的ProGuard文件,或者直接写规则 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt', 'proguard-firebase-admob.txt' } } }确保ProGuard规则不会误删Firebase/AdMob的核心类,不然也会导致编译错误。
我当时就是因为手动在gradle里加了AdMob的依赖,又开了EDM自动解析,导致同一个库被引入了两次,删掉手动加的依赖后就完全正常了。按照上面的步骤走一遍,应该就能解决你的Multiple Dex错误啦!
备注:内容来源于stack exchange,提问作者MangoBango

