Unity集成Firebase SDK后Android Gradle构建失败求助
一、先处理基础Gradle警告
1. 替换废弃的android.enableR8配置
在Unity项目的gradle.properties文件中,把android.enableR8=true替换为:
android.enableR8.fullMode=true
Unity 2021 LTS已默认支持R8全模式,旧配置会触发废弃警告。
2. 修正minSdkVersion与targetSdkVersion倒置问题
打开Unity的Player Settings > Android > Other Settings,将Target API Level设置为不低于Minimum API Level(比如统一设为23或更高版本)。出现minSdkVersion(23) > targetSdkVersion(9)是因为targetSdk被意外设为极低版本,大概率是插件导入时覆盖了配置。
3. 匹配Android Gradle插件(AGP)与Gradle版本
Unity 2021.3.x LTS建议搭配AGP 4.2.2和Gradle 6.7.1。可以在Unity的Preferences > External Tools中选择对应Gradle版本,或者在项目的mainTemplate.gradle中指定:
dependencies { classpath 'com.android.tools.build:gradle:4.2.2' // Firebase相关classpath保持官方指定版本即可 }
二、解决重复类冲突(核心错误:launcher:checkReleaseDuplicateClasses)
1. 定位重复依赖来源
切换到项目的Temp/gradleOut目录,执行Gradle依赖分析命令:
./gradlew launcher:dependencies
搜索kotlinx-coroutines-core、androidx.core等重复类模块,排查哪些插件(包括Firebase)引入了不同版本的依赖。
2. 强制统一依赖版本
在mainTemplate.gradle的android块下方添加configurations规则,强制所有依赖使用同一兼容版本:
android { // 保留原有配置 } configurations.all { resolutionStrategy { // 替换为你项目兼容的kotlinx-coroutines版本 force 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4' // 统一androidx.core版本 force 'androidx.core:core-ktx:1.7.0' } }
版本号需匹配Firebase SDK要求,比如Firebase 9.0+通常适配kotlinx-coroutines 1.6.x及以上版本。
3. 排除插件中的重复依赖
如果特定插件引入了冲突依赖,在mainTemplate.gradle的对应模块下排除:
dependencies { implementation platform('com.google.firebase:firebase-bom:32.7.0') implementation 'com.google.firebase:firebase-analytics-ktx' // 排除Firebase Auth中重复的androidx.core依赖 implementation('com.google.firebase:firebase-auth-ktx') { exclude group: 'androidx.core', module: 'core' } }
三、解决java.lang.StackOverflowError
这个错误通常由依赖冲突导致的递归解析,或Gradle堆内存不足引发:
- 优先解决前面的重复类冲突,多数情况下冲突解决后StackOverflowError会自动消失。
- 若仍出现,在
gradle.properties中增大Gradle堆内存:
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
将-Xmx从默认的2048m调整为4096m或更高。
额外检查点
- 确保Firebase SDK版本与Unity兼容:Unity 2021.3.x建议使用Firebase SDK 9.0.0+(通过Firebase Unity SDK下载器选择对应版本)。
- 删除项目的
Library、Temp目录,重新生成项目文件,避免缓存干扰。 - 检查其他第三方插件(如广告、统计SDK)是否也引入了kotlinx或androidx依赖,这类插件是冲突高发区。
内容的提问来源于stack exchange,提问作者Francesco Eletto

