体积优化-基础 - 图1

一、APK分析

1.分析工具

  1. apktool使用

homebrew: brew install apktool
apktool d *.apk 得到文件夹

  1. AS-APK自带可视化工具

2.APK组成

代码:dex
资源:res,assets,resources.arsc
lib:so
优化的重点就是代码,资源,so库

二、瘦身实战

1.dex瘦身

1.1ReDex

dex到dex优化

1.2ProGuard

class到dex优化

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 包瘦身治理思路全解