为什么要瘦身

  • 安装包变大,导致很多用户不愿意安装更新
  • 安装包变大,导致很多用户不愿意下载
  • 安装包变大,流量使用增多,增加其他边际成本

优化方式

图片资源的优化
图片选择顺序
  1. 首先选选择SVG
  2. 否则选择WebP
  3. 之后如果有透明通道等选择PNG
  4. 剩下的选择JPG
AS可将PNG转为WebP

android设置avtivity窗口模式_瘦身


对比效果如下

android设置avtivity窗口模式_瘦身_02

PNG压缩
  • 可以采用ImageOptim或者Pngyu对png进行压缩
  • AAPT会使用内置的压缩算法来优化res/drawable/目录下的PNG图片,但也可能会导致本来已经优化过的图片体积变大,可以禁止aapt优化PNG图片
aaptOptions{
		cruncherEnabled = false
	}

测试之后,发现不但没变小,apk包反而变大了几十k。。。

Jpg图片压缩

可以采用packJPG或者guetzli压缩jpg图片

只放一份资源

推荐放在xxhdpi

资源压缩
开启代码混淆、去除无用资源

android设置avtivity窗口模式_瘦身_03

进一步资源混淆

微信开源了AndResGuard工具,对资源进一步混淆

冗余代码优化

冗余代码的定义

  • 完全一致的代码或者只修改了空格和注释
  • 结构上和句法上一致的代码,例如只是修改了变量名
  • 插入和删除了部分代码
  • 功能和逻辑上一致的代码,语义上的拷贝

冗余代码检测
使用工具,例如PMD

- 下载后输入: ./run.sh cpdgui
- pmd -d /usr/src-R rulesets/java/quickstart.xml -f text

Lint检测
检测未使用资源

Android Studio -> Analyze -> Run inspection by Name -> unused resource

无用代码优化

Analyze -> run Inspection By Name -> unused declaration -> Moudule app -> OK

其他的

android设置avtivity窗口模式_瘦身_04


android设置avtivity窗口模式_瘦身_05

其他优化
压缩存储文件
  • 导入7Zip,压缩存储预置资源
  • 使用时,解压到本地,比如assert中的资源
语言资源优化

在build配置中配置resConfigs指定需要的语言类型

使用Splits根据不同的ABI以及不同的屏幕密度分别打包

https://developer.android.google.cn/studio/build/configure-apk-splits.html

重复的string,color优化
  • 过滤重复的strinng
  • 定义唯一的color名
减少Enum使用
  • 每减少一个Enum文件可以减少1K左右的大小
  • 采用常量定义
优化引用的库
  • 去除不再使用的库
  • 优化过时的库
  • 仅仅提取使用的代码
  • 选用更小的外部库
音频资源压缩

压缩音频,降低采样率、通道数

so动态下发
  • So可以采用动态下发的方式加载 – 下载失败怎么办 ?
  • 仅需要加载对于abi下的so