应用监控 啄木鸟 SDK
App 崩了、接口挂了、某个机型白屏 —— 用户不会来告诉你,他只是卸载。 「啄木鸟」接进工程之后,这些会自己出现在看板里,带着堆栈、机型和出错前的操作过程。
原生崩溃、JVM/OC 异常、ANR、JS 错误、接口失败。 带完整堆栈 —— release 包传一次符号表就能还原成源码行号。
哪些机型、哪个系统版本、哪个 App 版本出问题最多。 ⚠️ 设备信息默认要用户同意隐私政策后才上报。
埋一行 track() 记业务事件,再配上转化目标与漏斗 ——
能看到转化率,以及「在哪一步掉的」。
Web / 小程序 / iOS / Android / Flutter / React Native / Unity。 上报到同一个应用 ID,数据在同一个看板里。
网页与小程序直接引用脚本,不用下载;原生 App 下载对应的包接进工程即可。 接入步骤见下面每个卡片的「接入说明」,或看 接入文档。
网页和小程序不在这一页 —— 它们不用下载,和网站统计代码一样是引一个脚本, 接入都在 接入文档 里。这一页只放要下载的原生端。
🍎iOS 1.0.0
Swift 实现。崩溃时只落盘不发网络,下次启动补报 —— 进程正在死亡时网络请求发不出去。
更新日志
- 信号与 NSException 崩溃捕获
- 崩溃落盘 + 下次启动补报
- 符号表还原调用链
- 操作轨迹记录
🤖Android 1.0.0
捕获未捕获异常、ANR 与 C/C++ 层崩溃,处理完把控制权还给系统 —— 不会让你在 Google Play 后台丢掉崩溃数据。
更新日志
- 未捕获异常与 ANR 监测
- 崩溃落盘 + 下次启动补报
- R8 反混淆还原调用链(含内联)
- 操作轨迹记录
SDK 包里只有一个 .aar —— 类、四个 ABI 的原生库、
混淆规则、权限声明都在里面,接进工程就这一个文件。
示例是一个把每个接口都用了一遍的 Activity,接完之后拿它验;
源码给要审计或自己定编译参数的人。
🐦Flutter 1.0.0
Dart 异常与 Promise 拒绝自动捕获,路由变化记进操作轨迹。原生崩溃仍由平台 SDK 负责 —— Dart 层感知不到进程已经在死了。
更新日志
- Dart 异常与 Promise 拒绝捕获
- 路由 observer 自动记录页面轨迹
- 渠道归因结果读取
- 原生崩溃由平台 SDK 捕获
⚛️React Native 1.0.0
JS 未捕获异常与未处理的 Promise 拒绝自动上报,JS 堆栈原样透传。红屏不会被吞掉。
更新日志
- JS 未捕获异常与 unhandledrejection
- JS 堆栈透传,不被原生栈覆盖
- 红屏不被吞掉
- 渠道归因结果读取
🎮Unity 1.0.0
C# 未捕获异常与 Assert 自动上报,含后台线程抛出的。原生崩溃由平台 SDK 捕获。IL2CPP 构建需上传符号表才能还原堆栈。
更新日志
- C# 异常与 Assert 捕获(含后台线程)
- 场景切换记入操作轨迹
- 渠道归因结果读取
- IL2CPP 符号表还原
关于符号文件的安全
Source map、mapping、符号表都等价于源代码。它们只用于还原堆栈, 不会被任何接口返回,也不存放在任何可公开访问的目录下。