如何减少APK体积
link


头脑风暴:怎样减少APK体积呢?

  • 避免使用分辨率过大的图片
  • 使用矢量图
  • 代码、布局文件复用
  • 精简多媒体文件
  • 懒加载,某些业务功能,直到真正应用时方从网络进行下载
  • ProGuard

Two key areas

  • Smaller resources (easiest to fix)
  • Smaller code

Smaller resources

移除无用资源文件

gradle文件里配置minifyEnabled trueshrinkResources true,在打包时会忽略实际上没有应用到的资源文件。建议在release时才打开,以减少debug环境编译时间。

1
2
3
4
5
6
7
8
9
10
android {
...
buildTypes {
release {
minifyEnabled true
shirnkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

使用自动分辨率适配功能

我们知道Android中有ldpi mdpi hdpi xhdpi xxhdpi 乃至 xxxhdpitvdpi 等分辨率,如果把每个资源文件,针对这些分辨率都分别制作一个副本,这将占用大量的空间。

针对这个问题,有多个解决途径。

删除一部分分辨率下的文件

框架会根据高分辨率的资源文件自动生成低分辨率下的资源文件。这里删除了ldpi(可以从mdpi生成)、hdpi和xhdpi(可以从xxhdpi生成),另外tvdpi只应用于TVapp,这里一并删除。

![][rescale.png]

使用矢量图代替像素图

矢量图会根据设备分辨率不同,自动调整自身大小,一个矢量图可以应用在多种分辨率下

复用已有的图片资源文件

对于下图这种只是变更了方向的场景,应当只使用一张图片,通过代码来控制箭头朝向。

reuse_pic

1
2
3
4
5
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_arrow_expand"
android:fromDegrees="0"
android:toDegrees="270" />

Smaller Code

使用ProGuard

设置minifyEnabled true,代码见前文。

优化代码生成器的生成代码

代码生成器是将原始代码转化为目标代码的一种工具,在转化的过程中,有可能生成冗余的目标代码,这部分代码需要精简。

注意依赖!

当我们的代码需要引入外部库的时候,庞大的外部依赖会导致APK体积剧增。ProGuard能够为我们处理一部分这种情况,更多时候,我们需要有目的地挑选适合移动端使用的工具库。在引入外部依赖的时候,一定要关注它对APK体积产生的影响。

Segment your APK

视频作者对这部分的内容讲述不甚清晰,我理解下来,所做的事情是,可以根据API级别、分辨率高低等条件,生成不同的APK包,在应用市场里发布时进行配置。而应用市场会根据用户手机型号,为用户推送不同的APK进行个性化安装。


Android Studio 2.2

新版本的AS中,增加了APK分析工具,可以很方便地察看classes、methods的数目,资源文件大小 等信息。


====Ending====