路漫漫其修远兮,吾将上下而求索
本文主要从优化思路的角度介绍APK瘦身,也参考了市面上目前通用的一些角度,告诉你有哪些角度可以进行apk瘦身。一直在追求方法论而不得,仍会继续长期思考下去,故该文将持续长期更新。
1 APK 分析
这里虽然有些生硬,但做瘦身,APK分析是必不可少的
取APK 进行分析
1 resources.arsc 分析
如下表所示,取一些未使用到的资源进行查看,可知release包中仍会打包上述资源
| 类别 | ID | Name | 状态 |
|---|---|---|---|
| anim | 0x7f010065 | activity_out_left2right | 未使用到,但仍打包 |
| drawable | 0x7f020755 | loading44_20 | 未使用到,但仍打包 |
| string | 0x7f05009d | authorize_dialog_msg | 未使用到,但仍打包 |
| layout | 0x7f0d0033 | activity_preview | 未使用到,但仍打包 |
分析结论1:从上面资源的分析可知,此处应该删除未使用到的资源,避免打包,可以减少APK的大小
2 res分析
分析结论2:如上图可知,内置的res图片资源过大
2 优化方案
整体优化思路:
- 先资源
- 后代码
2.1 lint清除本地冗余资源
操作步骤:Refactor-->Remove Unused Resources-->Preview
通过清除本地冗余资源,可以减少APK大小620KB
2.2 assets目录筛查
1 assets目录筛查
操作步骤:shift键搜索assets目录,进入后全搜该资源是否有使用
2 组件筛查
操作步骤:通过工具扫描出未使用的组件,这里由于隐私原因,不便于将工具名介绍出来 通过清除本地废弃assets资源,及删除不用的组件,可以优化32KB
2.3 图片优化
1 图片压缩
官网:tinypng.com/
2 svg替换png 可以按照以下顺序选择图片 developer.android.com/topic/perfo…
3 去掉xxxhdpi、2010*1080内置图 增加440dpi分辨率目录
经过上述调整,优化约4716KB
2.4 findbugs 查找冗余代码
2.5 sdk 优化
操作步骤:从目录C:/Users/(用户名)/.gradle/caches/modules-2/files-2.1中取gradle中配置的sdk信息,通过各owner进行优化 可以采取先优化大的sdk,再优化小的sdk的方法
2.6 代码混淆
R8 开启 Shrinking 压缩 Optimization优化 Obfuscation混淆
1 minifyEnabled混淆配置为true
2 移除无用的resource文件
操作:shrinkResources 配置为true
android {
.........
defaultConfig {
resConfigs "zh-rCN", "zh-rTW", "zh-rHK", "en", "ja",
}
buildTypes {
release {
minifyEnabled true
// 开启zipAlign让安装包中的资源按4字节对齐,减少应用在运行时的内存消耗
zipAlignEnabled true
//config enable shrink unused resources
shrinkResources true
}
}
}
通过清除无用资源,优化936KB
2.7 resConfigs配置想保留语言
操作:resConfigs 配置内销语言
android {
.........
defaultConfig {
resConfigs "zh-rCN", "zh-rTW", "zh-rHK", "en", "ja",
}
}
通过精简语言,优化2436KB
2.8 动画优化
webview_loading_anim.xml 使用图片过多,可以查找使用图片过多的动画,改为json动画或其他方式
2.9 签名优化
2.10 Redex
2.11 so最小化
2.12 release是否要集成
bugly等sdk release版本不用集成