如何减少APK体积
link
头脑风暴:怎样减少APK体积呢?
- 避免使用分辨率过大的图片
- 使用矢量图
- 代码、布局文件复用
- 精简多媒体文件
- 懒加载,某些业务功能,直到真正应用时方从网络进行下载
- ProGuard
Two key areas
- Smaller resources (easiest to fix)
- Smaller code
Smaller resources
移除无用资源文件
在gradle
文件里配置minifyEnabled true
和shrinkResources true
,在打包时会忽略实际上没有应用到的资源文件。建议在release时才打开,以减少debug环境编译时间。
1 | android { |
使用自动分辨率适配功能
我们知道Android中有ldpi
mdpi
hdpi
xhdpi
xxhdpi
乃至 xxxhdpi
和 tvdpi
等分辨率,如果把每个资源文件,针对这些分辨率都分别制作一个副本,这将占用大量的空间。
针对这个问题,有多个解决途径。
删除一部分分辨率下的文件
框架会根据高分辨率的资源文件自动生成低分辨率下的资源文件。这里删除了ldpi(可以从mdpi生成)、hdpi和xhdpi(可以从xxhdpi生成),另外tvdpi只应用于TVapp,这里一并删除。
![][rescale.png]
使用矢量图代替像素图
矢量图会根据设备分辨率不同,自动调整自身大小,一个矢量图可以应用在多种分辨率下
复用已有的图片资源文件
对于下图这种只是变更了方向的场景,应当只使用一张图片,通过代码来控制箭头朝向。
1 | <rotate |
Smaller Code
使用ProGuard
设置minifyEnabled true
,代码见前文。
优化代码生成器的生成代码
代码生成器是将原始代码转化为目标代码的一种工具,在转化的过程中,有可能生成冗余的目标代码,这部分代码需要精简。
注意依赖!
当我们的代码需要引入外部库的时候,庞大的外部依赖会导致APK体积剧增。ProGuard
能够为我们处理一部分这种情况,更多时候,我们需要有目的地挑选适合移动端使用的工具库。在引入外部依赖的时候,一定要关注它对APK体积产生的影响。
Segment your APK
视频作者对这部分的内容讲述不甚清晰,我理解下来,所做的事情是,可以根据API级别、分辨率高低等条件,生成不同的APK包,在应用市场里发布时进行配置。而应用市场会根据用户手机型号,为用户推送不同的APK进行个性化安装。
Android Studio 2.2
新版本的AS中,增加了APK分析工具,可以很方便地察看classes、methods的数目,资源文件大小 等信息。