Unity集成Facebook SDK与Firebase/AdMob SDK冲突问题求助
问题:Unity集成Firebase、AdMob与Facebook SDK后Android构建重复类冲突
在已集成Firebase和AdMob的Unity项目中接入Facebook SDK,构建Android包时临近完成阶段持续抛出重复类异常,示例错误如下:
Execution failed for task ':launcher:checkReleaseDuplicateClasses'. > 1 exception was raised by workers: java.lang.RuntimeException: Duplicate class kotlin.ArrayIntrinsicsKt found in modules jetified-app-1.8.7-unity-support-runtime.jar (:app-1.8.7-unity-support:) and jetified-org.jetbrains.kotlin.kotlin-stdlib-1.5.10.jar (org.jetbrains.kotlin.kotlin-stdlib-1.5.10.jar) Duplicate class kotlin.BuilderInference found in modules jetified-app-1.8.7-unity-support-runtime.jar (:app-1.8.7-unity-support:) and jetified-org.jetbrains.kotlin.kotlin-stdlib-1.5.10.jar (org.jetbrains.kotlin.kotlin-stdlib-1.5.10.jar) Duplicate class kotlin.DeepRecursiveFunction found in modules jetified-app-1.8.7-unity-support-runtime.jar (:app-1.8.7-unity-support:) and jetified-org.jetbrains.kotlin.kotlin-stdlib-1.5.10.jar (org.jetbrains.kotlin.kotlin-stdlib-1.5.10.jar) Duplicate class kotlin.DeepRecursiveKt found in modules jetified-app-1.8.7-unity-support-runtime.jar (:app-1.8.7-unity-support:) and jetified-org.jetbrains.kotlin.kotlin-stdlib-1.5.10.jar
手动删除org.jetbrains.kotlin.kotlin-stdlib-1.5.10.jar后可正常构建,但下次构建时该文件会被Unity自动重新导入,导致冲突再次出现。现有社区方案操作繁琐,需更优解决办法。
最优解决方案
方法1:通过Unity Jar Resolver强制统一Kotlin版本
Unity集成的Firebase/AdMob和Facebook SDK均依赖Unity Jar Resolver管理Android依赖,可通过配置强制使用统一的Kotlin标准库版本:
- 在Unity项目的
Assets/Plugins/Android目录下创建或编辑mainTemplate.gradle文件(若未启用模板,需在Player Settings > Publishing Settings > Build > Custom Gradle Template勾选启用) - 在
dependencies块上方添加以下配置,强制指定Kotlin版本(建议使用与Facebook SDK兼容的高版本,如1.8.0+):
configurations.all { resolutionStrategy { force 'org.jetbrains.kotlin:kotlin-stdlib:1.8.22' force 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.22' force 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22' } }
- 保存后重新构建项目,Resolver会自动替换所有冲突的低版本Kotlin依赖。
方法2:排除Facebook SDK中的冗余Kotlin依赖
若方法1未生效,可直接在Facebook SDK的依赖配置中排除重复的Kotlin库:
- 找到Facebook SDK在
Assets/Plugins/Android下的Facebook.Unity.gradle配置文件 - 修改其依赖声明,添加排除规则:
implementation ('com.facebook.android:facebook-android-sdk:[你的SDK版本号]') { exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib' exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk7' exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8' }
- 保存配置后重新构建,避免Facebook SDK导入冗余的Kotlin依赖。
方法3:更新所有SDK到兼容版本
冲突本质是不同SDK依赖的Kotlin版本不一致,直接更新到最新稳定版多数可解决问题:
- Firebase SDK:通过Unity Package Manager更新到最新稳定版
- AdMob SDK:确保与Firebase版本匹配(AdMob通常集成在Firebase Ads包中)
- Facebook SDK for Unity:下载官方最新稳定版替换旧版本
方法4:自定义Editor脚本自动删除冗余Jar
若上述方法均无效,可编写Unity Editor脚本,在构建完成后自动清理冲突Jar:
- 在
Assets/Editor目录下创建RemoveDuplicateKotlinJar.cs脚本:
using UnityEditor; using UnityEditor.Build; using UnityEditor.Build.Reporting; using System.IO; public class RemoveDuplicateKotlinJar : IPostprocessBuildWithReport { public int callbackOrder => 100; public void OnPostprocessBuild(BuildReport report) { if (report.summary.platform != BuildTarget.Android) return; string jarPath = Path.Combine(report.summary.outputPath, "launcher/libs/org.jetbrains.kotlin.kotlin-stdlib-1.5.10.jar"); if (File.Exists(jarPath)) { File.Delete(jarPath); Debug.Log("Removed duplicate kotlin-stdlib jar: " + jarPath); } } }
- 保存脚本后,每次Android构建完成时,脚本会自动删除指定的冲突Jar文件。
内容的提问来源于stack exchange,提问作者Dror
相关产品推荐
相关产品推荐

