八. Android apk体积优化
1. 瘦身优化及Apk分析方案介绍
最主要是:下载转化率
头部App都有Lite版
渠道合作商要求
Apk组成(压缩包)
代码相关:classes.dex
资源相关:res、asserts、resources.arsc
so相关:lib
Apk分析
1)ApkTool,反编译工具
官网:https://ibotpeaches.github.io/Apktool/
apktool d xx.apk
2)Analyze APK
查看Dex文件组成、Apk对比
3)https://nimbledroid.com/
文件大小及排行
Dex方法数、SDK方法数
启动时间、内存等
4)android-classyshark:二进制检查工具
https://github.com/google/android-classyshark
支持多种格式:Apk、Jar、Class、So等
方法数的比例等。
2. 代码瘦身实战
1)代码混淆
2)花指令,功能等价但改变形式
3)代码中各个元素改写成无意义的名字
4)以更难理解的形式重写部分逻辑
5)打乱代码格式
Proguard:Java类文件处理工具,优化字节码
代码中元素名称改短,移除荣誉代码
增加代码被反编译难度
使用方式:配置minifyEnabled为true,debug下不要配置
proguard-rules 中配置相应规则
三方库处理
基础库统一
选择更小的库,Android Methods Count
仅引入所需的部分代码:Fresco 的 webp 支持
移除无用代码(AOP统计使用情况)
业务代码只加不减
业务太多不敢删除
3. 资源瘦身实战
冗余资源
右键,Refactor,Remove Unused Resource
图片压缩
tinypng.com。TinyPngPlugin
图片格式选择
资源混淆
https://github.com/shwenzhang/AndResGuard
冗长的资源路径变短
其它
图片只保留一份
资源在线化
4. So瘦身实战
So是Android上的动态链接库
So移除
七种不同类型的CPU架构
abiFilters:设置支持的So架构
一般选择armeabi
更优方案
完美支持所有类型设备代价太大
都放在armeabi目录,根据CPU类型加载对应架构So
其它方案
So动态下载
插件化
5. 瘦身优化模拟面试
怎么降低Apk包大小?
代码:Proguard、统一三方库、无用代码删除
资源:无用资源删除、混淆
So:只保留Armeabi、更优方案
Apk瘦身问题长效治理
发版之前与上个版本体积对比,超过阈值则必须优化
推进插件化架构改造
使用这个直接去除微用到的方法 https://github.com/KeepSafe/dexcount-gradle-plugin