Flutter - 上传符号表到bugly

前情提要

Bugly还原Native Crash堆栈时,需要根据UUID来匹配符号表文件,因此只有上传的符号表文件的UUID与Native Crash堆栈的SO文件的UUID一致时(从后往前匹配),才能准确地对堆栈进行还原。

如何查看Debug SO文件的UUID?

符号表文件的UUID与Debug SO文件的UUID是一致的,因此可以通过符号表工具生成的符号表文件来查看Debug SO文件的UUID:

生成符号表文件(.zip) ---> 解压符号表文件(.symbol) ---> 使用文本编辑器打开符号表文件

其中符号表文件的“SHA-1”信息即Debug SO文件的UUID,亦是符号表文件的UUID,如果文件较大,建议使用“Sublime Text”等文本编辑器来打开符号表文件。

由于Bugly已采用新的UUID计算规则,为了能正确地匹配Crash堆栈对应的SO文件,请使用2.5.0或以上版本的符号表工具。

如何上传符号表到bugly平台?

目前只支持通过符号表工具上传,请下载符号表工具上传(内附详细使用说明文档),下载链接:https://bugly.qq.com/v2/downloads

上传flutter引擎符号

低版本的flutter按照下面的步骤走

flutter --version
Flutter 3.29.0 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 35c388afb5 (3 weeks ago) • 2025-02-10 12:48:41 -0800
Engine • revision f73bfc4522
Tools • Dart 3.7.0 • DevTools 2.42.2

我们需要记住的是引擎的revision: f73bfc4522

然后在 flutter infra 上找到对应CPU架构的 symbols.zip 并下载。

因为现在是2025年,上面的方法是2022年之前用的,下面这里我不会继续

新版本获取符号

  1. 从SDK中获取 Flutter Framework 或 Flutter Engine 修订版本。如果有 Engine 修订版本。

{FLUTTER_SDK}/bin/cache/engine.stamp 或者 {FLUTTER_SDK}/bin/cache/flutter.version.json 里面可以获取到引擎修订版本号!

要查看构建的可用工件,请在浏览器中访问此 URL(将引擎哈希替换为您的哈希):https://console.cloud.google.com/storage/browser/flutter_infra_release/flutter/cea5ed2b9be42a981eac762af3664e4a17d0a53f

要下载 android-arm 的符号,请使用浏览器下载此 URL (再次替换哈希,并注意此 URL 位于不同的主机“存储”上,与上面使用“控制台”的 URL 相比)https://storage.cloud.google.com/flutter_infra_release/flutter/cea5ed2b9be42a981eac762af3664e4a17d0a53f/android-arm/symbols.zip

请注意,符号的类型必须与您的应用版本类型相匹配。在上面的示例中,这指的是 android-arm调试版本。如果您使用版本配置文件版本,则 URL 将如下所示:

必须使用浏览器,因为它需要进行身份验证。

接下来解压缩里面会有一个so文件,我们执行

java -jar buglyqq-upload-symbol.jar -appid [APPID] -appkey [APPKEY] -platform Android -bundleid [YourPackage] -inputSymbol [YourPath]\flutter_f73bfc4522dd0bc87bbcdb4bb3088082755c5e87_android-arm64_symbols