一、APK分析
1.分析工具
- apktool使用
homebrew: brew install apktool
apktool d *.apk 得到文件夹
- AS-APK自带可视化工具
2.APK组成
代码:dex
资源:res,assets,resources.arsc
lib:so
优化的重点就是代码,资源,so库
二、瘦身实战
1.dex瘦身
1.1ReDex
dex到dex优化
1.2ProGuard
1.2.1ProGuard原理
ProGuard作用
(1)压缩(Shrink):侦测并移除代码中无用的类、字段、方法和特性
(2)优化(Optimize):对字节码进行优化,移除无用的指令
(3)混淆(Obfuscate):使用a,b,c,d这样简短而无意义的名称,对类、字段和方法进行重命名
(4)预检(Preverify):在Java平台上对处理后的代码进行预检
https://tech.meituan.com/2018/04/27/mt-proguard.html
https://juejin.cn/post/6844904103131234311
注意:
Android的module无法使用压缩。
1.3三方库处理
统一三方库处理
1.4移除无用代码
AOP统计方法, Gradle统计方法
2.res瘦身
2.1冗余资源
AS自带工具
2.2图片压缩
webp有损压缩
2.3资源混淆
AndResGuard,针对apk的资源路径压缩
AabResGuard,针对aab的资源路径压缩
2.4动态加载资源
3.so瘦身
设置支持的架构,abiFilters {}
so动态加载
插件化
AppBundle
AndroidAppBundle是一种发布格式,.aab的包无法直接安装,通过发布到GooglePlay,华为aab格式的包,最终用户下载的是优化后的apk,根据不同手机型号下发不同资源的apk,但是对于apk体积确实有优化作用。
Android App Bundle 不支持 APK 扩展 (*.obb) 文件。
https://developer.aliyun.com/article/600909
三、大厂方案
货拉拉Android 包体积优化实践
抖音 Android 包体积优化探索:基于 ReDex 的 DEX 优化落地实践
有道词典Android客户端包体积优化之路
优酷 Android 包瘦身治理思路全解
