【口红 5年磨一剑|优酷Android包瘦身治理思路全解】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的资源 , 由于有些图形简单的图片资源特征信息不明显 , 因此即使相似度较高 , 是否可互相替代的最终决策 , 仍然需要根据所在业务场景进行人工判断 。 分析报告中的示例结果如下:
 
经验总结扩展阅读
- 黑色温柔“师姐”黑化了?涂暗黑姨妈色的口红像中毒,羡羡认不出
- 治疗都别羡慕卡戴珊的生活,这样的折磨给我一个亿都不干
- 60岁的老年妇女,出门描眉抹口红,是什么心理?
- 女孩子大牌口红假货惊人!普通消费者该如何甄别?
- 现实26岁女士剃须15年,如今放下剃刀,感觉更自由了
- 女王女明星喝水怎样防止染口红,范冰冰动作丑,赵丽颖的办法最聪明
- 因为2022身体磨砂膏测评,SABON让肌肤变嫩滑,这款磨砂膏让皮肤亮一号
- 颜色口红对人的改变有多大?王鸥红唇妆霸气外露,素颜和路人没区别
- 明星 男明星赚钱有多拼?直播涂眼影,画口红不算啥,有的还卖女式内裤
- 那必定那些每天都涂“口红”的女生,现在怎么样了?美容师道出实情!

 
   
   
   
   
   
   
   
   
   
   
   
  