[Unity] 安卓符号Android symbols

RuntimeMapMaker3D-Pro在这里插入图片描述


英文原文: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 不会符号化您的应用程序在您上传符号包之前收到的崩溃。

### 如何在 Unity 中使用代码标签或 C# 标签的最佳实践 #### 定义和作用 在 Unity 和 C# 编程环境中,代码标签(也称为预处理指令)用于条件编译和其他元编程功能。这些标签可以帮助开发者更灵活地管理不同平台上的构建配置以及优化开发流程。 #### 常见的代码标签及其用途 一些常用的代码标签包括 `DEBUG`、`UNITY_EDITOR` 等。通过定义特定的符号,在不同的环境下可以选择性地包含或排除某些部分的代码[^1]。 对于 Unity 特定的应用场景: - **调试模式**:当项目处于调试状态下时,可以通过 `[Conditional("DEBUG")]` 属性来标记方法,使得该方法仅在启用调试的情况下被调用。 - **编辑器脚本**:利用 ` UNITY_EDITOR` 符号可以在运行时区分游戏逻辑与编辑器扩展之间的差异。这有助于减少不必要的依赖并提高性能。 ```csharp #if UNITY_EDITOR using UnityEditor; #endif public class ExampleClass { void SomeMethod() { #if DEBUG Debug.Log("Debug information"); #endif // Normal game logic here... } } ``` #### 自定义代码标签 除了内置的支持外,还可以根据需求创建自己的预处理器宏。例如,为了实现跨多个项目的共享设置或者针对特殊版本的功能开关,可以这样做: 1. 打开 Project Settings -> Player; 2. 添加新的 Scripting Define Symbols 到 Inspector 面板中的相应位置; 这样就可以像下面的例子一样轻松切换特性了: ```csharp #if MY_CUSTOM_TAG // Code that will only compile when 'MY_CUSTOM_TAG' is defined. #endif ``` #### 场景应用实例 假设有一个需要特别对待 iOS 平台的游戏对象初始化过程,那么可以根据目标平台的不同编写如下代码片段: ```csharp void Start () { #if UNITY_IOS InitializeForiOS(); #elif UNITY_ANDROID InitializeForAndroid(); #else DefaultInitialization(); #endif } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值