android fabric,Android Fabric Crashlytics Native 代码符号表

简介

Crashlytics 支持捕获Native层的异常并上报,官网的文档有具体而详细的教程。但是在符号表这一块儿,说的比较简单,虽然给出了上传符号表的方法,但是对于符号表的管理这一块没有给出解释和说明。

符号表

首先我们要弄明白符号表是什么?接触过Native开发的应该有经验,当Native发生崩溃的时候,在Logcat中呈现的log很多都是各种内存地址,Native堆栈很多也是以内存地址的形式体现的。像0x7f04661c9c等,这些堆栈我们并不能获取有效信息,定位Crash。而符号表就是帮助我们解析这些堆栈信息的,经过符号表的解析,这个内存地址会定位到某个cpp文件的某一行,这样子的堆栈对我们才是有意义的。

符号表的生成与上传

Fabric对Android Studio 提供了插件,根据官网的引导,在需要上传符号表的module的gradle文件里面加上apply plugin : ‘io.fabric’和 crashlytics {enableNdk = true} 。之后,会生成6个新的task:

crashlyticsGenerateSymblosDebug

crashlyticsCacheSymblosDebug

crashlyticsUploadSymblosDebug

crashlyticsGenerateSymblosRelease

crashlyticsCacheSymblosRelease

crashlyticsUploadSymblosRelease

分别是生成、缓存、上传符号表的,Debug和Release各三个。每次构建之后,只需要执行上传的任务就可以了,因为上传会触发构建和缓存。

符号表与版本的关系

为了验证符号表和版本的对应关系,我写了一个直接在Native触发崩溃的测试代码,点击按钮之后就会产生一次Native的Crash。经过多次实验,得到结论如下:

Debug 和 Release符号表不通用。

符号表必须在崩溃产生之前上传,上传之前统计的崩溃不能按照符号表进行解析,因此建议大家构建aar或者apk之后马上按需上传符号表。

符号表和版本的映射好像是构建时,我拿同样的代码跑了两次,第二次如果不重新上传符号表,还是无法解析。

不同版本aar或apk不用担心符号表覆盖等问题。即:fabric会记录不同构建对应的符号表,后构建不会对先构建的产生影响。

针对3的实验,发现不同的符号表解析之后如果堆栈相同,在fabric的dashboard里面会合并展示。

针对以上内容,建议大家把上传符号表的任务加在构建完成之后执行。

一点自己的见解,欢迎大家交流指导。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值