口红|5年磨一剑|优酷Android包瘦身治理思路全解( 四 )


上述技术支撑体系在具体实现上 , 主要由“分析工具”和“包大小卡口能力“承载 , 后面会做具体介绍 。
2.3 治理策略
常态化治理模式下 , 治理策略的核心是去中心化 。 尤其是对于多团队参与研发的app , 对每个功能最熟悉的人一定是日常直接负责的(团队)同学 , 因此最高效的方式其实正是“各家自扫门前雪”的分布式治理模式 。 其中阈值划分 , 是实现分布式治理的第一步 , 即圈定“每家所负责的范围 , 以及最多允许存在多少雪” 。 而灵活协作 , 目的是打造合理、公开、透明、高效、低成本的可持续治理局面 , 在为业务增长和创新提供更多包大小空间的同时 , 将整包大小控制在预期范围内 。
分析技术 分析技术 , 是秉承Byte级“较真儿”精神 , 以包大小真实占用为指导原则 , 公平公正童叟无欺 , 实现对不同颗粒度(元素、功能、业务、团队)的包体积占用度量 , 并在此之上提供切实有效的可瘦身项分析能力 , 用于指导和评判瘦身情况 。 先来回答一个问题:分析工具为什么很重要 , 很重要?
首先 , 既然要进行包瘦身 , 那么各种不同的“大小”就如影随形 , 例如:“xxx模块多大?”、“xx功能/业务占多大”、“最新版本apk相对上个版本增加了1MB , 不同功能的变更带来的大小变化分别是多少?”、“我今年的目标是将apk减少10MB , 可以通过哪些瘦身Action来达成目标?” 。 工程领域有几句著名论断:“无度量不改进”、“无度量不管理” , 包大小分析工具的核心价值之一就是提供这个度量:各种不同颗粒度的度量 , 小到一个java类、资源、so , 继而到一个模块(jar/aar)、再到一个独立功能、业务、甚至是团队 。 由此衍生开来 , 既然有了度量 , 那么就可以进行有效的责任归属、瘦身目标制定、效果预估等 , 是不是豁然开朗?
其次 , 在具备度量能力基础上 , 站在长远角度考虑 , 实际瘦身治理过程中还需要能够回答“这个app是不是已经瘦到极限 , 还有哪些地方可以瘦身?”
分析工具需要具备的另外两个重要价值是:指导和评判 。 这二者其实是一个事务的不同视角 , 即:对主动者给予指导 , 对被动者给予评判 , 在瘦身前用于指导 , 在瘦身后用于评判 。

一个满足有效的度量、指导和评判需求的包大小分析工具 , 该具备怎样的自我修养 , 这就是本章所要探讨的内容以及会给出的答案 。 在优酷 , 这个Android端包大小分析工具的名字是franky , 潦草诞生于2020年初 , 逐步迭代完善/增强至今已2年有余 , 趋于成熟 , 仍在前行 , 目前正在筹备开源中 , 希望能给Android包瘦身治理带来一些帮助 。
3.1 方案设计
本章将围绕“度量、指导、评判”这几个核心价值进行方案设计 。 首先不妨采用问答的方式 , 来进行具体分析和拆解的推导过程 。
度量的对象是谁?度量的值又是一个什么样的值?在包瘦身不同场景 , 关注的对象也不一样 , 颗粒度最细的是apk中各种元素(java类、java资源、十几种不同类型的Android资源、动态链接库so) , 再往上层的是模块(jar/aar) , 继续往上层则是功能(由多个模块组成的独立完整功能)、业务(由多个功能组成的完整业务)、团队(组织架构中一个团队负责的所有业务) , 再继续往上就是apk了(这个没有什么意义 , 一个文件的大小根本不用什么分析工具) , 当然一个小型app可能在模块之上仅需要一层功能聚合就足够了 。 至于度量的值 , 则是在apk中的真实大小占用 , 即删除后apk可以减少的大小 , 对于某些元素原始大小和对apk大小的真实占用之间 , 存在着非常大的差距 , 这个差距会导致对瘦身Action的效果评估出现不可忽视的误差 , 从而使瘦身Action的优先级排序、指导和评判失去根基 。 由此得到“度量”的需求拆解结果是:提供元素、模块、功能等不同颗粒度 , 在apk中真实占用大小的度量 。
指导的内容有多具体?评判的依据又是否公平、透明?瘦身的指导 , 如果只提供一个大概的方向 , 是远远不够的 , 需要非常明确、具体、可操作 。 举个例子:如果我只告诉你“充分利用proguard , 精简优化keep规则 , 让更多的类被裁减和混淆 , 就可以有效瘦身” , 那么如何让参与app开发的所有同学 , 都能够据此高效的完成这项瘦身任务?但是如果能够给出“你负责的业务/功能/模块 , 类未混淆率是80% , 数量是600个” , 相比前者显然更具有指导性 , 更进一步 , 假设还能够给出“每个未混淆类 , 是被哪些keep规则所影响” , 是不是实际瘦身过程变得更加有迹可循 , 相信任何一名开发同学都能够很好的完成这项工作 。 再举个例子:“缩减或远程化大尺寸图片 , 可以有效瘦身” , 与“你负责的这个模块 , 对apk真实大小占用超过10KB的图片 , 一共有10个 , 分别是xxxx” , 这二者相比显然后者更具指导性 。 再来说说瘦身的评判 , 不能依靠人的能力和判断力 , 这样很难做到公平、透明 , 需要通过可量化的数据作为依据 。 由此得到“指导评判”的需求拆解结果是:提供明确、具体、可量化、可操作的可瘦身项分析 , 用于对瘦身过程进行指导和评判 。


推荐阅读