首页 > 解决方案 > E/Unity:DllNotFoundException:无法加载 DLL 'FirebaseCppApp-7_1_0':[已解决]

问题描述

我用 firebase 构建了一个统一游戏,然后将其导出并以 ARR 文件格式集成到现有的 Android 应用程序中。

一切都很好并且集成了,但是统一的 firebase 没有连接(它连接并按预期工作,没有与 Android 应用程序集成)。

此错误出现在运行控制台中,而不会崩溃只是未连接的firebase 请在运行控制台中出错 ,我真的需要你的帮助

提前非常感谢!:)


我通过简单地在unity导出的启动器中搜索包'FirebaseCppApp-7_1_0'成功解决了这个问题(将游戏作为独立的Android应用程序启动)。然后我把那个包的库放在我现有应用程序的同一个文件夹中。

就这样!

标签: androidfirebaseunity3d

解决方案


这种风格的应用程序(Unity 作为库)在 Firebase SDK 中没有经过很好的测试。我会要求你在这里打开一个错误,以便团队可以优先考虑路线图上的官方支持(我相信他们会喜欢你的反馈)。

这样一来,您似乎就缺少一些本机库。具体来说,您缺少存储在Firebase/m2repository. 由于我不知道如何导出 Unity 项目的详细信息,因此我有很多事情可以尝试。

首先,弄清楚你在你的 Android 应用程序的 gradle 项目中需要什么。最简单的方法是打开“发布设置”并检查“自定义主 Gradle 模板”和“自定义 Gradle 属性模板”: 选择了自定义模板的“发布设置”窗口的屏幕截图

然后强制解决依赖关系以确保您的Assets/Plugins/Android/mainTemplate.gradle文件得到更新: Unity 菜单打开到的屏幕截图

如果你然后打开你的Assets/Plugins/Android/mainTemplate.gradle,你会在顶部有这样的东西:

maven {
    url (unityProjectPath + "/Assets/GeneratedLocalRepo/Firebase/m2repository") // Assets/Firebase/Editor/AppDependencies.xml:22, Assets/Firebase/Editor/RemoteConfigDependencies.xml:20
}

以及解析器在某处发现的依赖项列表。我的看起来像这样:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
// Android Resolver Dependencies Start
    implementation 'com.google.android.gms:play-services-base:17.6.0' // Assets/Firebase/Editor/AppDependencies.xml:17
    implementation 'com.google.firebase:firebase-analytics:18.0.2' // Assets/Firebase/Editor/RemoteConfigDependencies.xml:15
    implementation 'com.google.firebase:firebase-app-unity:7.1.0' // Assets/Firebase/Editor/AppDependencies.xml:22
    implementation 'com.google.firebase:firebase-common:19.5.0' // Assets/Firebase/Editor/AppDependencies.xml:13
    implementation 'com.google.firebase:firebase-config:20.0.3' // Assets/Firebase/Editor/RemoteConfigDependencies.xml:13
    implementation 'com.google.firebase:firebase-config-unity:7.1.0' // Assets/Firebase/Editor/RemoteConfigDependencies.xml:20
// Android Resolver Dependencies End
**DEPS**}

所以我怀疑依赖关系没有被清楚地传递,特别是*-unity那些提供 Firebase 功能的 C++ 实现的依赖关系。我觉得这应该是一个构建错误,但我再次不熟悉“Unity as a Library”过程。要尝试的事情:

  1. 在您的目标项目中,确保为本地 m2 存储库添加 maven URL。这样你就可以找到你需要的 m2 依赖。
  2. 在您的目标项目中,添加依赖项管理器注入 Unity gradle 项目的依赖项。以确保您拥有构建中的所有内容。

有两个重要事项需要注意:

  1. mavenURL 是绝对的。您可能不得不使用 gradle 来在您的开发环境中跨机器可靠地指定这一点。
  2. 这些依赖项将更改每个 Firebase SDK 版本,并且必须彼此保持同步。因此,如果您必须从底部复制任何内容,则每次都必须手动进行。

推荐阅读