作者:yechaoa
市面上有很多优化方案,但是都没有一个完整的链路体系,现在它来了,本文将带你进阶新高度,不管是面试、绩效KPI,还是汇报宣讲,都能让你游刃有余!
前置必读:
Android包体积优化(常规、进阶、极致)
涵盖各阶段全面的优化方案。
注意本文更偏向于方法论和规划能力,重点倾向于如何做好一个技术topic,如果单纯的想看技术方案,可以搜索前置必读。
一、背景
- 提升下载转化率
- ...
- 提升更新率,这个是鲜有人提到的,二次下载同样重要,它能推动业务快速落地。
二、现状
- 最新版本?MB,突破80大关?100大关?竞对?
- 近6个月平均每个月增速?MB
- 近6个月平均每个版本更新周期(7天?10天?)
输出报表
三、目标
减少30MB & 降低30%
四、现状具体分析
- 图片占比15%
- 代码占比25%
- so文件50%
- 其他10%
结合项目分析,输出每项占比背后的具体因素(设计花哨?业务复杂?架构合理?)
输出饼图
五、优化思路
- 压缩参与打包的文件
- 减少参与打包的文件
![](https://img.haomeiwen.com/i28265229/3a214fd852c9e83e.jpg)
六、规划思考
- 如何保证稳定性?
- 如何长效治理?
站在更高的角度去思考问题
七、里程碑
![](https://img.haomeiwen.com/i28265229/d106fa2f60e8f299.jpg)
- 信息公示
- 确保进度稳中推进
- 有风险及时寻求资源支持
八、抓手
- Android Studio
- ApkChecker
- ClassShark
- ...
- 产出具有项目特色的工具
九、技术大图
![](https://img.haomeiwen.com/i28265229/24f29bf8635de150.jpg)
汇报示例
十、图片优化
![](https://img.haomeiwen.com/i28265229/2a030822710d5004.jpg)
手动 -> 脚本
十一、代码优化
![](https://img.haomeiwen.com/i28265229/fe36b28d88311230.jpg)
十二、远程so
需要熟悉打包流程,知道Gradle的各种Task执行在干什么事。
![](https://img.haomeiwen.com/i28265229/48a09598c6d520cd.jpg)
打包阶段,在合并apk之前,把需要远程的so文件上传至远端,然后剔除掉。
Flutter的so远程这方面没啥资料,提一下,源码搜一下FlutterLoader,继承FlutterLoader重写startInitialization,原理就是干预原有的so文件加载路径。
12.1 下载流程
沉淀通用的下载SDK
- 网络状态管理
- 下载任务优先级调度
- 断点续传
- ...
- 12.1.1 启动下载(闲时)
闲时下载:用户是无感知的,即使失败,也不需要交互形式表现。
![](https://img.haomeiwen.com/i28265229/4c0184e176a65fb7.jpg)
- 12.1.2 按需下载
按需下载:下载流程与闲时下载一样,但交互表现形式不一样,需要让用户感知你在干什么、什么进度,提供一个loading页承载。
![](https://img.haomeiwen.com/i28265229/2342f92fd895ee27.jpg)
自检:不一定是我们代码的问题,可能是用户网络不可用、存储不够等
十三、测试
- 兼容性:android 5.0-12.0
- 是否重复下载、是否可用(32/64)
- 断网、弱网
- 覆盖安装
- 前台退后台
- ...
十四、监控告警
![](https://img.haomeiwen.com/i28265229/147b7cd00b3f18c7.jpg)
14.1 埋点
- success
- error code/message
- so name
- retry
- demotion
- storage size
- download type
- download time
- 设备信息
- 网络信息
- 用户信息
- ...
14.2 监控
- 下载成功率
- load成功率
- loading页打开成功率
- ...
14.3 告警
?分钟?次失败
告警形式包括但不限于钉钉群、微信群、短信、电话等。
14.4 排障
- 排障指南
- 数据库底表查询sql
十五、长效治理
打包后置卡口的设计原理:
![](https://img.haomeiwen.com/i28265229/2197a1c787d8e889.jpg)
- 打包过程中会对资源文件、代码文件、jar/aar等文件进行合并,既然知道有哪些文件,就可以知道这些文件的大小,就可以输出一个file size的文件作为当前版本的基线。
- 阈值配置信息可写死,可配置。
十六、结果
- 优化前、优化后对比
- 竞对 对比
- 下载时间对比
- 安装时间对比
- ...
输出报表
十七、未来规划
- 白名单 logo?
- 沉淀方法论?
- 流程工具化、智能化?
- 月度报告?
- 数据大盘?
- ...
十八、价值&意义
- 技术:沉淀通用组件?创新flutter?
- 团队:影响力?
- 公司:减少带宽,全年节省?W经费
- 用户:下载时间减少?安装时间减少?
- 社会:每次下载减少?M流量,全年节省流量?亿
- ...
十九、思考
- 需要做到极致吗?理论上启动非必须的图片、文件、so都是可以远程的。(减肥是要越瘦越好吗?)
- 极简包?
二十、面试问题
- 为什么选用tinypng,原理是什么,还有其他方案吗?
- 远程so的选定标准是什么?
- 支持断点续传吗?
- 会重复下载吗?
- 下载可以根据网络选择吗?
- 有文件完整性校验吗?
- 有下载优先级吗?
- 怎么避免64位设备下到32位so文件?
- so文件更新之后会在设备上与老的版本共存吗?
- 兜底方案是什么?
- 还有哪些可以优化的地方?
- ...
最后
- 顶级厨师在线烹饪,做好了自己吃,不负责喂
- 多思考,深度思考,可以梦到的那种
- 多搞点花样,多体现个人部分,即使没有技术深度
- 角色转换,个人、团队、产品、拉新运营、用户、公司、社会...
- 技术价值、业务价值
- 别忘了三连 ~
不太喜欢理论,更喜欢实际操作的,可以搜索查看,但是还是建议大家培养一些规划类思维,毕竟往上走,总有一天是需要出规划和做一些管理的事情的。
网友评论