3.2 可瘦身项分析
可瘦身项是指导和评判价值的主要承载者 , 本章对franky包含的全部9个可瘦身项 , 讲解基本技术原理、分析效果、用于瘦身时的注意事项等 。
第一项【代码】无用类 , 是指在运行时没有被使用到的类 。 当前无用代码的获取方法 , 是通过线上采样的方式 , 采集代码热度数据 , 并筛选出其中初始化次数为0的类(具体实现方案来自SlimLady:类级别不插桩线上代码覆盖度统计框架[2
, 此处只是使用了前者的结果数据) 。 对于无用代码较多的模块 , 存在线上使用率低(或者完全无使用)的问题 , 应该安排下线或者使用H5等动态化方式实现 。 分析报告中的示例结果如下:
第二项【代码】未混淆类 , 是指由于keep规则存在 , 导致没有被混淆的类 。 混淆可以极大降低代码在apk中占用的大小 , 因此除了一些特殊使用场景 , 绝大部分类都可以进行混淆 。 对于未混淆类较多的模块 , 可能存在混淆keep配置过于宽泛问题 。 分析报告中的示例结果如下:
第三项【资源】超大 , 是指在apk中真实占用超过一定阀值的资源(可配置 , 优酷一直使用的是10KB) 。 超大资源 , 可以采用远程化、重新设计更小的等效资源、如果是图片还可以采用压缩率更高的图片格式(jpeg、webp)或者矢量图等方式来降低大小 。 分析报告中的示例结果如下:
第四项【资源】无用 , 是指没有被直接引用的资源 。 从资源整体使用情况来看 , 一个资源可能在三个地方进行直接引用:java代码 , 通过R.resourceType.resourceName方式引用(例如R.string.app_name) , 或者通过资源id方式直接引用(例如0x7fxxxxxx);清单文件AndroidManifest.xml;其它资源 。 另外 , 资源还可以通过Resoruces.getIdentifier方式 , 通过传递资源名称和类型获取id值 , 运行时性能较差 , 因此官方并不推荐使用 , 需要注意的是 , 分析工具对这种方式会出现误检 。 对于无用资源 , 应该在确认未通过Resoruces.getIdentifier方式使用后 , 进行删除处理 。 分析报告中的示例结果如下:
第五项【资源】多维度 , 是指包含大于两个配置的资源 。 这种资源会在不同配置下 , 存在多份数据(文件) , 一些特殊纬度需要做额外考虑 , 例如:night、landport 。 对于多维度资源 , 一些非必要的配置可以清理掉 。 分析报告中的示例结果如下:
第六项【资源】无透明度png图片 , 是指png图片中包含了alpha通道 , 但是无相关数据 , 或者数据中的透明度值均为完全不透明 。 对于这种类型的图片 , 一般可以通过使用不带透明度信息的其它图片格式(例如jpeg) , 来降低大小 。 分析结果中 , 已经排除了.9类型图片 , 在分析报告中的示例结果如下:
第七项【资源】相似 , 是指资源值的相似程度较高 。 当前分析只包含file-base类型资源(相对的 , 值仅存在于resources.arsc中的资源 , 称为value-base类型资源) 。 对于非图片文件资源 , 仅筛选出完全一样的资源(md5一致 , 相似度为1) 。 对于图片文件资源 , 额外计算了相似度 , 采用DHash算法计算图片指纹 , 然后计算hamming距离作为相似值 。 对于相似度为1的资源 , 内容完全一致 , 因此可以仅保留一份 , 对于相似度小于1的资源 , 由于有些图形简单的图片资源特征信息不明显 , 因此即使相似度较高 , 是否可互相替代的最终决策 , 仍然需要根据所在业务场景进行人工判断 。 分析报告中的示例结果如下:
第八项【so】不规范使用STL , 是指动态链接库so对c++ STL库的不规范使用 , 包括两种情况:动态链接非统一STL , 官方建议统一使用的STL为libc++_shared.so , 其它非统一STL包括libgnustl_shared.so、libstlport_shared.so;静态链接stl , 通过改造为动态链接 , 可以实现较好的瘦身收益 。 分析报告中的示例结果如下:
- 固态硬盘|PCI-E 7.0降临!带宽再翻一倍,但产品要2025年才上市
- 宝洁|腾讯《数字长城》火了,数字文博能否走出可玩性、商业化困境?
- boss直聘|腾讯视频网络电影:创新赛道,多点齐发,全面布局2022
- 3D打印|3D打印零件为什么需要打磨
- 把腾讯搬到云上,治愈了他们的技术焦虑
- 腾讯|曝腾讯再裁员:至少缩减10% 微信、游戏概莫能外
- 腾讯视频|“超前点播”回来了?腾讯视频VIP可18元提前解锁《梦华录》大结局
- |腾讯在海外投资市场最大的对手?
- 腾讯云|UPS不间断电源史上最全知识整理!
- 5年后机器人将替代部分人类,工人面临大规模失业,他们该怎么办