Signal
Introduction: library for android which can observe signal from native crash or ANR
Tags:
Android 信号处理,兼容 native crash 与 anr,提供安全气囊方案与监控方案的基础设施,目前已添加 native/java 堆栈日志的回调,既可以当 crash 监控,又可以当安全气囊,开发你的脑洞吧!
更新:目前采取了新写法,去除复杂的 spi 调用,直接传入实现接口即可,同时核心代码迁移至 c 语言
详细介绍
https://juejin.cn/post/7114181318644072479 https://juejin.cn/post/7118609781832548383
使用说明
已发布到 mavencenter 仓库 gradle 导入
1.0.0-beta 暂时废弃,之后上传新版本
implementation 'io.github.TestPlanB:signal:1.0.0-beta'
本地使用
该项目可以用于本地配置使用,只需拷贝 lib_signal 这个 module 到自己的项目即可,请按照以下条件使用
1.拷贝 lib_signal 这个 module 到自己的项目
2.初始化 SignalController 对象,然后调用 initWithSignals 初始化想要监听的信号,参数是 int 数组,内容为具体的信号值(如果想要监听 anr,则初始化需要设置监听 SIGQUIT),比如 SIGQUIT, MyHandler 是一个实现 CallOnCatchSignal 的类,可看第 3 点
SignalController.initSignal(intArrayOf(
SignalConst.SIGQUIT,
SignalConst.SIGABRT,
SignalConst.SIGSEGV),this,MyHandler())
3.创建一个实现 CallOnCatchSignal 接口的类,如项目的 MyHandler(),重写如下三个方法,里面是自定义的信号处理逻辑
// 收到 sigquit 之后,anr 的逻辑,true 就是进入 anr 判定
fun checkIsAnr():Boolean
// 处理 anr 的逻辑 logcat 是当前 logcat 日志
fun handleAnr(context: Context,logcat: String)
// 处理 crash 的逻辑 logcat 是当前 logcat 日志
fun handleCrash(context: Context,signal: Int,logcat:String)
项目层级介绍
- app 下是使用例子
- lib_signal 是 Signal 的封装实现
环境准备
建议直接用最新的稳定版本 Android Studio 打开工程。目前项目已适配Android Studio Arctic Fox | 2020.3.1
