9.瘦身优化
1
2
3
4
5
6
7
8
//瘦身优化
1.代码混淆,统一三方库、删除无用代码
2.资源在线化
3.So:只保留Armeabi、或者只保留armeabi-v7a、arm64-v8a
4. 图片优化:
1.根据场景使用不同的文件,比如将png换成webp,像什么需要来回改变的简单的图可以使用svg替换,去除不需要的图片资源
2.图片压缩
5. 备用资源:默认情况下Android会有很多备用资源,比如string,包含了多国语言,我们可以指定需要的语言即可;

一、瘦身优化及Apk分析方案介绍

瘦身优势

1
2
3
1.最主要是转换率:下载转换率
2.头部App都有Lite版
3.渠道合作商要求

Apk组成

1
2
3
1.代码相关:classes.dex
2.资源相关:res、asserts、resources.arsc
3.So相关:lib

Apk分析

1
2
3
4
5
6
7
8
9
10
11
12
13
ApkTool,反编译工具
- 官网:https://ibotpeaches.github.io/Apktool/apktool d xx.apk
Analyze APK:Android Studio 2.2之后
- 查看Apk组成、大小、占比
- 插看Dex文件组成
- Apk对比
App性能分析 https://nimbledroid.com/
- 文件大小及排行
- Dex方法数、SDK方法数
- 启动时间、内存等
android-classyshark:二进制检查工具
- https://github.com/google/android-classyshark
- 支持多种格式:Apk、Jar、Class、So等

二、代码瘦身实战

代码混淆

1
2
3
4
5
6
7
8
9
10
花指令,功能等价但改变形式
- 代码中各个元素改写成无意义的名字
- 以更难理解的形式重写部分逻辑
- 打乱代码格式
Proguard:Java类文件处理工具,优化字节码
- 代码中元素名称改短,移除冗余代码
- 增加代码被反编译难度
- 使用:
- 配置minifyEnabled为true,debug下不要配置
- proguard-rules中配置相应规则

三方库处理

1
2
3
1.基础库统一
2.选择更小的库,Android Methods Count
3.仅引入所需的部分代码:Fresco的webp支持

移除无用代码

1
2
3
1.业务代码只加不减
2.代码太多不敢删除
3.AOP统计使用情况

三、资源瘦身实战

元余资源

1
studio中文件目录-右键-Refactor-Remove Unused Resource

图片压缩

1
2
3
1.快速发展期的App没有相关规范
2.https://tinypng.com/及TinyPngPlugin
3.图片格式选择

资源混淆

1
2
https://github.com/shwenzhang/AndResGuard
元长的资源路径变短

其它

1
2
1.图片只保留一份
2.资源在线化

四、so文件瘦身实战

So移除

1
2
3
4
1.So是Android上的动态链接库
2.七种不同类型的CPU架构
3.abiFilters:设置支持的So架构
4.一般选择armeabi(万金油可以支持其他架构,会损耗能效)

更优方案

1
2
1.完美支持所有类型设备代价太大
2.基础架构的都放在armeabi目录,根据CPU类型加载对应架构So(特定功能的so可以动态加载或放入其他架构包)

其它方案

1
2
1.So动态下载
2.插件化

五、问题

怎么降低Apk包大小

1
2
3
代码:Proguard、统一三方库、无用代码删除
资源:无用资源删除、混淆
So:只保留Armeabi、更优方案

Apk瘦身问题长效治理

1
2
发版之前与上个版本包体积对比,超过闯值则必须优化
推进插件化架构改造