团结引擎接 Sentry:鸿蒙打包通过,崩溃符号化到 C# 行号

0 阅读2分钟

用 Sentry 接崩溃上报,勾了 IL2CPP + ARM64,构建直接失败。

报错就卡在这一行:

Path.Combine(gradleProjectPath, 'unityLibrary', 'build.gradle')

搜了一圈,官方 issue 挂着没人修。

那就自己动手。

图1 · GitHub issue #2525,构建报错与讨论

起因:一个挂着没人修的 issue

我在使用中碰到打包报错问题,并提交了一个 issue: github.com/getsentry/s…

中国版的 Unity 有一个名为"tuanjie"的子版本,该版本源自 2022 年的 Unity 版本。如果我使用这个版本并标记 IL2CPP、ARM64,就会出现构建错误。

图 2 · sentry-unity 仓库的分支与提交记录

问题:为什么偏偏是团结引擎

团结引擎源自 2022 年的 Unity 版本,而 sentry-unity 插件的鸿蒙适配走的是更新版本的 Unity 插件体系。

两边一碰,路径就断了——报错卡在 unityLibrary/build.gradle 这个拼接上。

这里的关键不是"Sentry 坏了",而是"插件的版本假设和团结引擎的版本假设不匹配"。

解法:用 AI 辅助修报错

为了正常使用插件,使用 AI 辅助修复了报错问题,另外也补充完善了鸿蒙平台。使用分支 unity-6000。

图 3 · 本地构建日志,包含 Harmony 模块编译成功

经过适配,本地编译出包。构建日志里 Sentry.Unity.Harmony netstandard2.1 succeeded 这一行,是"鸿蒙适配真的成了"的硬证据。

图 4 · 模拟崩溃:在 Awake 里直接写空地址触发原生崩溃

测试:造一次崩溃,看符号化到哪一层

在应用中模拟一次崩溃——在 Awake 里直接写空地址,触发 SIGSEGV。

C# 崩溃,可以看到从 libtuanjie 中逐渐靠近 C# 崩溃位置以及对应行号。

图 5 · Sentry 云端崩溃详情,libtuanjie 调用栈已符号化

欠缺:鸿蒙 native 层还拿不到符号

鸿蒙平台原生崩溃目前没有原生库,native 层面的崩溃堆栈,比如下面这类原生崩溃是找不到符号的:

UnityEngine.Diagnostics.ForceCrash(ForcedCrashCategory.FatalError);

图 6 · Sentry 事件列表

图 7 · 鸿蒙设备信息(OpenHarmony 6.1.1.120)

测试设备:HUAWEI Mate 60 Pro+(ALN-AL10)/ OpenHarmony 6.1.1.120 / API-24。

所以现在的状态是:其他平台已通,鸿蒙侧的 native 崩溃符号化还没通。 这块还需要补。

开源仓库

如果你也在对接 Sentry,插件直接拿去用:

cnb.cool/cheeryoo/tu…

分支 unity-6000,MIT 开源。插件本身免费,Sentry 云端平台流量收费。

觉得有用就 点赞 + 在看 + 关注,点赞超过 100,我们继续把鸿蒙 native 崩溃这块的符号化搞定。

你在团结引擎打包时踩过什么坑?评论区提前告诉我,我下次一并处理。

引用链接

[1]github.com/getsentry/s…

[2]cnb.cool/cheeryoo/tu…