本页针对在使用 Firebase 时可能会遇到的特定于 Unity 的问题提供提示和问题排查方法。
还有其他难题,或是您的问题未在下面列出?请查看Firebase 的主要常见问题解答,详细了解针对整个 Firebase 以及特定产品的常见问题解答。
构建 Android 应用时的单个 dex 问题
构建 Android 应用时,您可能会遇到与单个 dex 文件相关的构建失败。如果您的项目配置为使用 Gradle 构建系统,则错误消息类似于以下内容。
Cannot fit requested classes in a single dex file.
Dalvik Executable (.dex
) 文件用于保存 Android 应用 (.apk
) 的一组类定义及其相关附属数据。单个 dex 文件仅限引用 65,536 种方法。如果项目中所有 Android 库的方法总数超过此限制,构建将会失败。
Unity 在 2017.2 中引入了 Minification,它使用 Proguard(在某些版本的 Unity 中为其他工具)来删除未使用的代码,从而减少单个 dex 文件中引用的方法总数。可在 Player Settings > Android > Publishing Settings > Minify 中找到该选项。选项可能会因 Unity 版本而异,因此请参阅 Unity 官方文档。
如果引用的方法数量仍超过此限制,另一个选项是启用 multidex
。可通过以下几种方法在 Unity 中实现这一点:
- 如果启用了
Player Settings
下的Custom Gradle Template
,请修改mainTemplate.gradle
。 - 如果您使用 Android Studio 构建导出的项目,请修改模块级
build.gradle
文件。
如需了解详细信息,请参阅 MultiDex 用户指南。
使用 minSdkVersion 23 为 Android 构建应用时遇到的问题
为 Android 构建时,如果您以 minSdkVersion
23 为目标,则可能会在 dexing 步骤(通常在 Gradle 任务“':launcher:mergeExtDexDebug”中)失败,并显示“未能转换”其中一个 Android 库。这是因为大多数 Unity 编辑器使用的 Android SDK 中的默认 dex 工具存在 bug,可以通过以下几种不同的方式进行修复:
- 将
minSdkVersion
设置为 24。 - 在 Player Settings(玩家设置)> Android > Publishing Settings(发布设置)> Minify(缩减大小)中启用 Android 缩减。
- 通过将以下内容添加到
settingsTemplate.gradle
文件来指定不同的 dex 工具版本:
buildscript {
repositories {
mavenLocal()
maven { url 'https://maven.google.com' }
mavenCentral()
}
dependencies {
classpath 'com.android.tools:r8:8.3.37'
}
}
使用 CocoaPods 构建 iOS 应用时遇到的问题
在构建 iOS 应用时,Cocoapod 安装可能会失败,并返回有关语言语言区域或 UTF-8 编码的错误。目前,此问题有几种不同的解决方法。
从终端直接运行
pod install
,然后打开生成的 xcworkspace 文件。将 CocoaPods 版本降级到 1.10.2。该问题仅存在于 1.11 版及更高版本中。
在
~/.bash_profile
或等效项中,添加export LANG=en_US.UTF-8
如何更新 Firebase Unity SDK 的版本
更新 Firebase Unity SDK 版本的过程取决于其最初导入的方式。有两种可互相替代的导入方法:
- 导入项目
Assets/
目录下的.unitypackage
文件 - 使用 Unity Package Manager (UPM) 导入
- 这是在 Unity 2018.4 及更高版本中管理软件包的推荐方法。
- 使用此方法可以简化未来的版本更新,并使您的
Assets/
目录更清晰。
在 Unity 项目中,您应仅使用一种导入方法来管理所有 Firebase 软件包。以下说明不仅可以用于更新各个软件包的版本,还可用于视需要改为使用 UPM(推荐的导入方法)进行软件包管理。
软件包作为 .unitypackage
文件导入到 Assets/
目录中
如果 Firebase 软件包位于 Assets/
目录中,您可以通过以下两种方式更新 SDK 版本:
方法 1(推荐):改为使用 UPM(Unity 2018.4 及更高版本提供)
- 按照 Firebase 提供的改为使用 UPM 进行软件包管理的说明进行操作。
- 与继续使用
.unitypackage
工作流相比,虽然此方法需要更多初始设置,但它有助于简化后续 SDK 版本更新工作。
方法 2:继续使用
.unitypackage
文件将它们导入到Assets/
目录中导入每个软件包以获取更新后的版本。
如果您从 Firebase 网站下载 firebase_unity_sdk.zip,请确保从正确的
dotnet
文件夹导入所有.unitypackages
。- 如果您使用的是 Unity 2019 或更高版本,请从
dotnet4
文件夹导入。 - 否则,请在“Player Settings”(播放器设置)中选择“Scripting Runtime Version”(脚本运行时版本),如果该值已设置为“.NET 3.x”,请从
dotnet3
文件夹导入。
- 如果您使用的是 Unity 2019 或更高版本,请从
外部依赖项管理器(您在导入 Firebase
.unitypackages
时自动包括此程序)应负责覆盖之前导入的软件包版本。但是,当且仅当此自动流程失败时,您需要手动删除以下文件夹,然后重新尝试执行上述导入步骤。
Assets/Editor Default Resources/Firebase
Assets/ExternalDependencyManager
Assets/Firebase
Assets/Parse
Assets/Plugins/iOS/Firebase
由 UPM 管理的软件包
如果 Firebase 软件包由 UPM 管理,请将较新的 SDK 版本作为 .tgz
导入。此导入操作将自动覆盖上一版本。