13
13
14
14
#### 前言
15
15
16
- 现在 WIFI 很普遍,流量也很便宜了,优化包体积还有那么重要嘛?
17
-
18
- 首先能想到的就是较小的包体积能够提高下载转化率,用户更愿意去下载,除此之外包体积与应用性能也是有挂钩的,表现在安装时间、运行内存、ROM 空间。
16
+ 包体积优化主要影响的下载转化率,除此之外包体积对应用性能也是有影响的,表现在安装时间、运行内存、ROM 空间。应用在首次安装启动时,会编译 odex 文件,对于低端机来说,过多的 dex 文件编译会严重影响冷启动时间(解决方案 [ BoostMultiDex] ( https://github.com/bytedance/BoostMultiDex ) )。应用在运行时,Resource 资源、Library 以及 Dex 类加载这些都会占用不少的内存。安装包在解压后,占用 ROM 空间可能会翻倍,对 ROM 空间占用也会有一定压力。
19
17
20
18
#### 包组成
21
19
@@ -33,11 +31,35 @@ APK 包含以下目录:
33
31
34
32
![ ] ( https://i.loli.net/2019/04/01/5ca15e3a3181e.png )
35
33
36
- 事实上,安装包无非就是 Dex、Resource、Assets、Library 以及签名信息这五部分 ,以下我们就针对这五部分进行优化。
34
+ 事实上,安装包无非就是 Dex、Resource、Assets、Library 以及 resources.arsc 这五部分 ,以下我们就针对这五部分进行优化。
37
35
38
36
#### 代码优化
39
37
40
- 对于大部分应用来说,Dex 都是包体积中的大头。对于这一块的优化,首先能想到的就混淆、压缩无用资源文件。
38
+ 对于大部分应用来说,Dex 都是包体积中的大头。对于这一块的优化,首先能想到的就是 ProGuard,AGP 3.4 之后,是使用 R8 了,它主要提供三部分功能:
39
+
40
+ 1 . 代码以及资源缩减
41
+
42
+ 代码缩减也就是从应用及其库依赖项中移除不使用的类、方法和属性。资源缩减也就是移除不使用的资源。
43
+
44
+ 2 . 混淆
45
+
46
+ 混淆处理的目的是通过缩短应用的类、方法和属性的名称来缩减应用的大小。
47
+
48
+ R8 不仅能混淆类和方法的名称,也能混淆资源的名称([ AndResGuard] ( https://github.com/shwenzhang/AndResGuard ) )。
49
+
50
+ 混淆之后,对于理解堆栈轨迹的难度将极大增加,此时可以使用 mapping 文件反混淆。
51
+
52
+ 3 . 优化
53
+
54
+ 优化是指 R8 会检查并重写代码,以进一步减少应用的 dex 文件的大小。有几种常见的示例:
55
+
56
+ 第一种是,如果 R8 能够判定 if/else 语句中的 else{} 代码块不会走到,那么 R8 可能会移除 else{} 分支的代码,也就是条件编译。
57
+
58
+ 第二种是,如果你的代码只在一个位置调用某个方法,R8 可能会移除该方法并将其内嵌到调用点上,也就是方法内联。
59
+
60
+ 第三种是,如果 R8 确定某个抽象类或接口有且只有一个实现时,那么它可能将这两个类组合在一起并移除抽象类。
61
+
62
+ 可以从 app/build/outputs/mapping/release/usage.txt 查看被移除的类以及方法。
41
63
42
64
##### ProGuard
43
65
@@ -171,6 +193,8 @@ ANDROID_SDK=/Users/omooo/Library/Android/sdk redex app-debug.apk -o app-resize.a
171
193
172
194
[ https://developer.android.com/studio/build/shrink-code?hl=zh-cn ] ( https://developer.android.com/studio/build/shrink-code?hl=zh-cn )
173
195
196
+ [ https://www.guardsquare.com/manual/configuration/examples ] ( https://www.guardsquare.com/manual/configuration/examples )
197
+
174
198
[ 包体积优化(上):如何减少安装包大小?] ( https://time.geekbang.org/column/article/81202 )
175
199
176
200
[ 包体积优化(下):资源优化的进阶实践] ( https://time.geekbang.org/column/article/81483 )
0 commit comments