英文原文:https://docs.unity3d.com/Manual/android-symbols.html
为了帮助您调试应用程序,Unity 可以生成一个包,其中包含原生 Unity 库的符号文件。符号文件包含一个表,该表将活动内存地址转换为您可以使用的信息,例如方法名称。翻译过程称为符号化。您可以将符号包上传到 Google Play 控制台,以在 Android Vitals 仪表板上查看人类可读的堆栈跟踪。
有两种类型的符号文件:
- Public:包含符号表的小文件。有关详细信息,请参阅公共符号。
- Debug:包含公共符号文件包含的所有内容,以及可用于更深入调试的完整调试信息。有关详细信息,请参阅调试符号。
您可以为以下库生成符号文件:
- libmain:负责初始化 Unity 引擎加载逻辑。
- libunity:Unity 的引擎代码。
- libil2cpp:包含 C# 脚本从项目转换为 C++ 代码。
Unity生成 libmain 和 libunity 符号文件。Gradle生成 libil2cpp 符号文件。
公共符号(Public symbols)
公共符号文件包含将函数地址解析为人类可读字符串的信息。 Unity 使用 --strip-debug 参数创建删除更深入调试信息的公共符号。这使得公共符号文件和包比调试符号文件和包更小。
调试符号(Debugging symbols)
调试符号文件包含完整的调试信息和符号表。用它来:
- 解决堆栈跟踪并调试您有可用源代码的应用程序。
- 将本机调试器附加到应用程序并调试代码。
Unity 使用 --only-keep-debug 参数来创建调试符号。有关详细信息,请参阅 Linux 用户手册中的 –only-keep-debug。
注意:如果调试符号不可用,Unity 在构建时会在您的项目中放置一个公共符号文件。对于 libmain 和 libunity 库,调试符号不可用,Unity 始终生成公共符号文件。
生成符号包
有两种方法可以为您的应用程序启用符号包生成:
- 在构建设置窗口中:
- 打开构建设置窗口(菜单:文件 > 构建设置)。
- 选择安卓平台。
- 将 Create symbols.zip 设置为以下之一:
- Public
- Debugging
- 使用 EditorUserBuildSettings.androidCreateSymbols API。
启用符号包生成后,构建项目会生成一个 .zip 文件,其中包含 libmain 和 libunity 库的符号文件。如果您设置scripting backend到 IL2CPP,.zip 还包含 libil2cpp 库的符号文件。 Unity 将此符号包放在输出目录中。
如果您在 Android 构建设置中启用导出项目,Unity 不会构建项目。相反,它为 Android Studio 导出项目,为 libmain 和 libunity 生成符号,并将它们放在输出目录中的 unityLibrary/symbols/< architecture >/ 中。当您从 Android Studio 构建导出的项目时,Gradle 会生成 libil2cpp 符号文件并将其放置在 unityLibrary/symbols/< architecture >/ 目录中,与 libmain 和 libunity 符号文件并排。
在 Google Play 控制台中使用符号
将应用程序上传到 Google Play 后,您可以为其上传公共符号包。有关如何执行此操作的信息,请参阅 Google 的文档:Deobfuscate or symbolicate crash stack traces。
注意:Google Play 不会符号化您的应用程序在您上传符号包之前收到的崩溃。