You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 23:05:02