默认情况下,系统会在应用的发布 build 中剥离原生代码库。剥离过程包括移除应用使用的任何原生库中包含的符号表和调试信息。剥离原生代码库可显著缩减大小;但是,由于缺少信息(例如类和函数名称),因此无法在 Google Play 管理中心诊断崩溃问题。如需调试崩溃问题,您必须在 Play 管理中心内为应用添加调试符号文件。
上传符号文件
Google Play 管理中心会在 Android Vitals 下报告原生代码崩溃问题。只需几个步骤,即可为应用生成并上传原生代码调试符号文件。此文件可在 Android Vitals 中启用经过符号化解析的原生代码崩溃堆栈轨迹(包括类和函数名称),来帮助您在生产环境中调试应用。这些步骤因项目中使用的 Android Gradle 插件版本以及您使用的是 Android App Bundle(推荐)还是 APK 而有所不同。
Android Gradle 插件版本 4.1 或更高版本
如果您的项目构建的是 Android App Bundle (AAB),您可以将 build 配置为自动在 AAB 中添加原生调试符号文件,以便在您发布应用时将其上传到 Play 管理中心。如需在发布 build 中添加此文件,请将以下内容添加到应用的 build.gradle.kts
文件中:
android.buildTypes.release.ndk.debugSymbolLevel = { SYMBOL_TABLE | FULL }
从以下调试符号级别中进行选择:
- 使用
SYMBOL_TABLE
在 Play 管理中心的符号化解析后的堆栈轨迹中获取函数名称。此级别支持 Tombstone。 - 使用
FULL
在 Play 管理中心的符号化解析后的堆栈轨迹中获取函数名称、文件和行号。
如果您的项目构建的是 APK,请使用之前显示的 android.buildTypes.release.ndk.debugSymbolLevel
设置,以单独生成原生代码调试符号文件。手动将原生调试符号文件上传到 Google Play 管理中心(该过程类似于上传映射文件以去混淆堆栈轨迹)。在构建流程中,Android Gradle 插件会在以下项目位置输出此文件:
app/build/outputs/native-debug-symbols/<var>variant-name</var>/native-debug-symbols.zip
Android Gradle 插件版本 4.0 或更低版本(及其他构建系统)
在构建流程中,Android Gradle 插件会在项目目录中保留未剥离的库的副本。该目录结构类似于以下结构:
app/build/intermediates/cmake/universal/release/obj/
├── armeabi-v7a/
│ ├── libgameengine.so
│ ├── libothercode.so
│ └── libvideocodec.so
├── arm64-v8a/
│ ├── libgameengine.so
│ ├── libothercode.so
│ └── libvideocodec.so
├── x86/
│ ├── libgameengine.so
│ ├── libothercode.so
│ └── libvideocodec.so
└── x86_64/
├── libgameengine.so
├── libothercode.so
└── libvideocodec.so
压缩以下目录的内容:
cd app/build/intermediates/cmake/universal/release/obj zip -r symbols.zip .
手动将
symbols.zip
文件上传到 Google Play 管理中心。