为什么要瘦身
• 安装包变大,导致很多用户不愿意安装更新
• 安装包变大,导致新用户不愿意下载
• 安装包变大,流量使用增多,增加其他边际成本
android组成内容.png
android存储格式.png
优化方式
图片资源的优化
图片选择的顺序
首先先选择VD
否则选择WebP
之后如果有透明通道等选择PNG
剩下的选则JPG
- 使用矢量图片
矢量图片只需要放置一份
图片太长绘制时间长,制作复杂度高
- 使用WebP
WebP体积更小,4.2.1+支持透明度
WebP转换方式
- Android Studio 选中图片-右键-convert to webp
- 下载WebP转换工具,进行图片统一压缩
- https://developers.google.com/speed/webp/docs/precompiled
- 使用png
有透明度,渐变,阴影的情况下选择png
采用压缩工具对png进行
- 可以采用lmageOptim或者Pngyu对png进行压缩
- AAPT会使用内置的压缩算法来优化res/drawable/目录下的PNG图片,但也可能会导至本来已经优化过的图片体积变大,这里禁用aapt优化PNG图片。
aaptOptions{
cruncherEnabled = false
}
JPG图片压缩
- 采用压缩工具,packJPG或者guetzli压缩 JPG图片
其他图片优化
纯色图片用代码实现,如shape
减少图片资源放置份数
放置xhdpi,xxhpi,(或者只放一份可以吗,有什么问题?)
能用代码实现的图片尽量采用代码实现
- 圆形图片,环形,渐变等都可以采用代码实现
#######资源压缩
开启资源压缩
开启代码混淆与去除无用资源
微信开源了AndResGuard工具,对资源进一步混淆
AndResGuard.png
其他优化
- 冗余代码优化
冗余代码:
完全一致的代码或者只修改了空格和评论
结构上和句法上一致的代码,例如只是修改了变量名
插入和删除了部分代码
功能和逻辑上一致的代码,语义上的拷贝
用什么工具检测
- 使用工具,例如PMD
- PMD下载地址:https://pmd.github.io/
怎么检测?
• 下载后输入:/run.sh cpdgui
• pmd-d /usr/sc -R rulesets/java/quickstart.xml-f text
• https://pmd.github.io/pmd-6.17.0/pmd_rules_java.html
- Lint大法好
未使用资源
- 检测末使用资源并删除
- Android Studio - Analyze - Run inspection by Name -unused resource
无用代码优化及其他
Analyze -> Run Inspection by Name -> unused declaration -> Module app -> OK
-
压缩存储文件
- 导入7zip,压缩资源预置资源
- 使用时解压到本地,比如assert中的资源
-
语言资源优化
在build配置中配置resConfigs指定需要的语言类型
defaultConfig {
resConfigs "zh","en"
}
- 其他
-
Splits根据不同的ABI以及不同的屏幕密度分别打包
https://developer.android.com/studio/build/configure-apk-splits.html -
重复的string, color优化
- 过滤重复的string
- 定义唯一的color名
-
减少Enum使用
- 每减少一个ENUM文件可以减少1K左右的大小
- 采用常量定义
-
优化引用的库
- 去除不在使用的库
- 优化过时的库
- 仅仅提取使用的代码
- 选用更小的外部库
-
音视频资源
- 采用音频压缩工具,压缩音频,降低音频采样率,通道数等在不明显影响效果的前提下压缩音频
-
So动态下发
- So可以采用动态下发的方式加载 (下载失败怎么办?)
- 仅仅只需要加载对应abi下的so
-
指定abi
- Gradle中指定abiFilter
ndk {
abiFilters "armeabi - v7a","x86"
}
网友评论