Unity导出Android Studio项目集成Firebase Messaging遇Dex合并错误
我来帮你搞定这个Dex合并失败的问题,这在Unity导出的Android项目里集成Firebase时是个挺常见的坑,咱们一步步来排查解决:
1. 统一Google服务与Firebase依赖版本
你当前用的firebase-messaging:11.8.0和google-services:3.1.1版本不匹配,这很容易引发依赖冲突。请把google-services调整为对应兼容的版本,比如:
buildscript { dependencies { // 替换为与Firebase 11.8.0兼容的版本 classpath 'com.google.gms:google-services:3.2.0' } }
另外要注意:Unity项目本身可能内置了Google Play Services库,一定要保证它的版本和你在Android Studio中添加的Firebase版本完全一致,版本不统一是冲突高发原因。
2. 启用MultiDex解决方法数超限
Unity项目本身方法数就不少,加上Firebase的依赖后很容易超过Android的65k方法数限制,这是Dex合并失败的常见诱因。按以下步骤配置:
- 在
app/build.gradle的defaultConfig块中开启MultiDex:defaultConfig { // 其他原有配置... multiDexEnabled true } - 添加MultiDex依赖(根据你用的是旧版Support库还是AndroidX选对应版本):
dependencies { // 旧版Support库用这个 implementation 'com.android.support:multidex:1.0.3' // 已经迁移到AndroidX的话用这个 // implementation 'androidx.multidex:multidex:2.0.1' } - 如果项目有自定义
Application类,让它继承MultiDexApplication;如果没有,就在AndroidManifest.xml的application标签里指定:<application android:name="android.support.multidex.MultiDexApplication" <!-- 其他属性 --> >
3. 排查并移除重复依赖
虽然你已经排除了support-v4,但可能还有其他重复的依赖模块(比如Unity自带的Support库或Google服务库)。你可以用以下命令查看完整依赖树:
./gradlew app:dependencies
找到重复的依赖后,在Firebase的依赖声明里添加对应排除规则,比如发现重复的support-core-utils,就修改为:
dependencies { compile('com.google.firebase:firebase-messaging:11.8.0') { exclude module: 'support-v4' exclude module: 'support-core-utils' } }
4. 清理缓存并重建项目
Android Studio的缓存有时候会导致奇怪的编译问题,执行以下步骤:
- 点击菜单栏的
Build -> Clean Project - 然后点击
Build -> Rebuild Project - 也可以手动删除项目根目录下的
.gradle文件夹和app/build文件夹,再重新编译
5. 检查Unity导出配置
确保你在Unity导出Android项目时勾选了Custom Gradle Template选项,这样Unity生成的gradle模板不会覆盖你在Android Studio中的修改。如果没勾选,建议重新导出并勾选该选项,同时在Unity的gradle模板里也保持依赖版本统一。
内容的提问来源于stack exchange,提问作者Nabeel K

