腾讯|5年磨一剑|优酷Android包瘦身治理思路全解( 三 )



在这个阶段 , 包大小卡口能力完成了一次关键进化:与研发流程实现无缝结合 , 对超限情况实现及时感知 , 以及拦截阻断 , 这让整体管控成本得到极大降低 。 同时 , 对分析技术、瘦身技术的迭代、探索和应用 , 始终没有停下脚步:dex排布优化、7z压缩、D8、R8等整体瘦身技术陆续上线 , so无用导出符号等可瘦身项持续加入分析工具franky , 相关技术也开始得到阿里内部更多app使用 , 这进一步促进了功能快速发展和丰富 。 另一方面 , 治理策略也在逐步完善 , 客户端各研发团队围绕自己的包大小阈值 , 把包大小提升为与稳定性、性能一样的日常研发迭代基础考量指标 。
治理模式 前面通过术、道、人三个维度对历史进行了回顾 , 通过对比不难发现它们有着截然不同的特征 , 据此可以将包瘦身治理分为两种模式:专项式、常态化 , 前者以短时间快速瘦身为目标 , 后者以长时间可持续维持为目标(甚至逐步降低) 。 看到这里 , 或许会提出一个疑问:治理模式和“术、道、人”三维度有什么关系?如果一定要进行区分 , 我认为既可以看作不同的思考视角 , 也可以认为前者是后者的更高层次抽象:“术”的能力所达到的水平 , “道”的选择所遵循的原则、“人”的排布所提供的保障 , 共同决定了当前处于什么样的治理模式;反过来也适用 , 即治理模式对“术、道、人”的内容和边界 , 都有明确的要求 。
2.1 专项式vs常态化
专项式治理 , 一般是在包大小持续上升至某个值后 , 成立专门项目集中时间治理 。 一般会有多团队多人员参与 , 同时会有明确的项目负责人 , 来制定严格且固定的里程碑 。 此时的apk包由于经过一段时间积累 , 会存在较多以无用和冗余功能为代表的可瘦身项 , 相对容易识别和解决 , 因此一般瘦身见效快 , 当然专项结束后如果缺乏有效的可持续管控 , 包大小反弹几乎是必然的 。 专项式治理的“精神内核”是目标优先 , 这当然没有任何问题 , 但在这个过程中 , 往往很容易忽视瘦身改造所带来的其它负面影响 , 例如不适当的远程化改造会带来用户体验受损、apk构建过程中采用大量“瘦身黑科技”导致打包耗时明显增加等 。 这里面的取舍和平衡之道 , 没有标准答案 , 只有综合判断“此时此地此景”后作出的选择 。
常态化治理 , 是指在长期的版本迭代过程中始终能够控制好增量 , 并在维持住当前包大小水位前提下实现“稳中有降” 。 一般在常态化治理阶段 , 头部问题已经基本不存在 , 需要在业务功能和代码源头进行更全面、精细、深入的分析和思考 , 从而在版本迭代过程中逐步“消化掉”可以瘦身的地方 。 在治理所需人力投入上 , 具有较低的整体管控投入 , 并形成团队、业务、功能的开发者自治局面 。 在治理节奏上 , 整体包瘦身目标调整周期较长 , 同时不再进行细粒度的瘦身里程碑制定 , 采用相对宽松和灵活的方式 , 把自主权给到具体负责的团队和开发者 。 在瘦身效果上 , 可以较好维持住当前水位而不发生反弹 , 甚至是缓慢降低 。 常态化治理的“精神内核”是体验优先 , 将包瘦身这件事“融入”到日常研发迭代过程 , 与稳定性(crash/bug等)、性能(启动速度/页面切换/流畅度等)一样 , 共同成为研发团队(同学)在业务需求和功能之外关注并考量的技术项 。
在时间、人力、节奏、效果、精神“内核”这五个维度上 , 二者的对比情况汇总如下:

常态化和专项式的关系并非简单的“优于”就能够说清楚 , 首先二者具有演进关系 , 类似人类文明的“石器、青铜、农业、工业”等代际进化 , 常态化治理也是在生产力(分析瘦身技术)不断提高的情况下 , 促使生产关系(治理模式)等发生变革(嗯 , 这个比喻不一定准确) 。 其次 , 二者有着不同的适用情况 , 专项式治理用于快速降低包大小 , 而常态化治理用于低成本可持续维持或者缓降 。 如果app无论与同类竞品还是自身相比 , 都明显处于较高的包大小水位 , 那显然需要先通过专项治理将包大小快速降低下去 , 然后再衔接上常态化治理来获得“长治久安”;如果app已经处于常态化治理模式 , 但是由于某些原因需要进一步快速降低 , 那么就需要切换到专项式治理模式 , 达成目标后再继续回到常态化治理模式 。