瘦身优化及Apk分析方案介绍
一般最后才做
瘦身优势
主要是转化率:下载转化率
头部App都有Lite版本
渠道合作商要求
APK组成
代码相关:classes.dex
资源相关:res、asserts、resources.arsc
So相关:lib(这部分优化空间大)
APK分析
1ApkTool反编译工具
apktool d xx.apk
2Analyze ApK :Android Studio 2.2之后
.查看Apk组成、大小、占比
.查看Dex文件组成
.Apk对比
直接把apk放入即可
1.png3网站
2.png分析时间长、傻瓜式
4
3.png 4.png代码瘦身实战
代码混淆
花指令、功能等价但改变形式
1代码中各个元素改成无意义的名字
2以更难理解的形式重写部分逻辑
3打乱代码格式
Proguard:Java类文件处理工具,优化字节码
.代码中元素名称改短,移除冗余代码
.增加代码被反编译的难度
使用:
.配置minifyEnabled为true,debug下不要配置(慢、没用)
.proguard-rules中配置相应规则即可
proguard-rules:
6.png三方库处理
基础库统一
选择更小的库,Android Methods Count(此插件能显示方法数)
仅仅引入所需的部分代码:如Fresco的webp支持
修改源码,提取所需功能
如只要 Fresco的webp支持
7.png移除无用代码
业务代码只加不减
代码太多不敢删除
可通过AOP统计Activity使用情况
8.png 9.png资源瘦身实战
冗余资源
右键--Refactor--Remove Unused Resource--preview--找到冗余资源
图片压缩
1千行代码--5kb
TinyPngPlugin 图片压缩插件
图片格式选择(webp、png严格保留色彩,jpg忽略一些中间色)
资源混淆
andResGuard
资源路径混淆成单个字母路径
选择andResGuardRelase
11.png缩减大概800k
图片只保留一份(比如只存xh)
资源在线化
So瘦身实战
so移除
So是Android上的动态链接库
加解密算法、音视频、
七种不通类型的CPU架构--对应的CPU效率高但体积变大
abiFilters:设置支持的So架构
一般选择armabi(都支持此架构)
更优方案
完美支持所有机型代价太大
都放在armabi目录,根据CPU类型加载对应架构So
armabi-v7 和armabi都有,代码判断CPu只加载所需的(微信就是这么做的)
伪代码模拟一下
13.png其他方案
So动态下载
插件化(感兴趣可以看阿里的atls 和360的replg)
瘦身优化模拟面试
怎么降低Apk包大小
结合干货周期
初期加了很多功能、UI图未压缩
稳定期-用户下载意愿
用Analyze ApK 查看Apk组成 体积分析
查看代码、资源、so方面优化
代码:Proguard 混淆、统一三方库(功能相同的库)、无用代码删除--效果不明显
资源:无用资源删除,图片压缩,资源混淆(名称变短)
So:只保留Armeabi、更优方案(代码中做判断)
Apk瘦身问题长效治理
结合CI发版之前与上个版本包体积对比,超过阈值则必须优化
推进插件化改造
网友评论