如何无损压缩 bugly 符号表 40% 体积

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 如何无损压缩 bugly 符号表 40% 体积

背景

58 同城主 APP 的单架构的 bugly 符号表已经达到了 53MB(解压后 550MB+)。

每次打包都需要存储和每次下载符号表都需要传输 53MB 的数据。

去年一直在解析各种日志,有符号表的,没有符号表的,能记得住打包地址的,记不住打包地址的。

总之,我需要经常在打包平台查找和下载符号表,并人工解析各类日志,这是一个繁琐且痛苦的工作。因此今年考虑打造一个平台,结合打包服务支持,实现各类日志上传一键解析,无需人工查找匹配符号表。

因此,符号表是越小越好,体积过大自动化工具有一定的影响。因此针对符号表进行二次压缩。

趁着假期刚结束还不算太忙,动手处理下。

可读和不可读

bugly 的符号表分为 2 种,一种是可读符号表,另一种是不可读符号表

其中不可读符号表在 2019 年 1 月 22 日以后默认生成的都是不可读符号表。

如果想要生成可读符号表可以指定参数为-symbol。

具体 buglySymboliOS.jar 是如何将 DWARF 格式转为符号字符串的没有做深究,猜测是通过解析 DWARF 格式文件提取数据的。

可读符号表和不可读符号表经过观察得知,两者在所占空间体积上没有显著差异。

本方案针对可读符号表进行压缩。

如何使用

使用前需要确保安装 Python3
准备好物料,bugly 的可读符号表

image.png

注意: 这里的符号表的 zip 包是指通过 buglySymboliOS.jar 处理后的 zip 文件,不是dSYM 文件 zip 压缩后的文件

python3 compressed.py -i <bugly符号表的zip包> -o <压缩后的输出路径>

image.png

执行命令后可得到压缩后的文件,与原始文件对比,体积从 52.7MB 减小到 31.3MB。

image.png

日志符号化可以会根据新生成的符号格式来解析匹配。但是也实现了还原到bugly.symbol.zip 的功能。接下来我们对文件进行还原测试看下:

python3 decompress.py -i <经过上步压缩的zip路径> -o <输出路径>

image.png

经过解压后可得到与压缩前一致的文件。

image.png

总结

其实整体文件还可以进一步压缩,但是复杂度会提高一些。比如压缩后的符号表还是有很多重复字符,是不是可以考虑像Mach-O那样集中存储字符串,使用的地方指记录地址呢?

如果觉得不错,素质三连、或者点个「赞」、「在看」都是对笔者莫大的支持,谢谢各位大佬啦~

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
存储 编解码 计算机视觉
使用ffmpeg缩小视频体积的几种方式
上述命令将输入视频input.mp4转换为H.265编码格式,并将结果保存为output.mp4文件。其中,-c:v选项表示视频编码器,libx265表示使用x265编码器,-crf选项表示视频质量,28表示目标视频质量,值越小视频质量越高,文件体积越大。
356 0
|
JavaScript 前端开发
如何让Egret发布项目时只压缩不混淆
如何让Egret发布项目时只压缩不混淆
47 0
|
API Android开发 Windows
包体积优化 · 彩蛋篇 · Android编译期PNG自动化转换WEBP
包体积优化 · 彩蛋篇 · Android编译期PNG自动化转换WEBP
411 0
包体积优化 · 彩蛋篇 · Android编译期PNG自动化转换WEBP
|
编译器 C语言 C++
g++命令编译出来的文件体积过大解决方案
g++命令编译出来的文件体积过大解决方案
474 0
|
XML IDE 开发工具
安卓减小apk的体积,整体优化代码
安卓减小apk的体积,整体优化代码
249 0
安卓减小apk的体积,整体优化代码
|
JavaScript iOS开发
Cordova 拍视频和本地压缩
拍视频 cordova plugin add cordova-plugin-media-capture js调用片段 function videoCapture() { //开始录像(最长录制时间:15秒) navigator.device.capture.captureVideo(onSuccess, onError, {duration: 15}); //录制成功 function onSuccess(mediaFiles) {
315 0
|
数据采集 小程序 IDE
代码天敌之体积
代码天敌之体积
140 0
代码天敌之体积
小程序代码体积优化
微信小程序在发布的时候,对提交的代码有 2 MB 大小的限制。开发之前就需要提前有个心理准备。由于我也是第一次做小程序开发代码大小就超过了2MB,开发者工具都无法预览了,这就很尴尬了。
1406 0
|
图形学
Unity 减小包体apk大小技巧
创建一个新的工程,默认场景打包的包体如下 更改Other Settings中的Device Filter,但是弊端就是牺牲了机器的兼容性 更改Device Filter选项为ARMv7后的包体如下: ...
1987 0