Android Apk廋身完整版

2017-08-21  本文已影响0人  162f127842fc

Android Apk廋身完整总结

一.目的

  1. APK在安装和更新之前都需要经过网络将其下载到手机,如果APK越大消耗的流量就会越多,特别是对于使用移动网络的用户来讲,消耗流量越多就代表需要花更多的钱去购买流量。同时一些第三方应用商城也会对上传的APK大小有限制,所以为了能够让产品能够更受商城和用户欢迎,APK瘦身是第一步,更小的APK标示着更多地用户愿意去下载和体验。
    二.问题排查

安装包的组成

要对安装包做瘦身,首先需要了解安装包的组成结构,这里简单的梳理了一下组成各个部分及其作用:


这里写图片描述

其中,在安装包中占比较大的包括:dex文件、res文件夹、assets文件夹、lib文件夹以及resource.arsc文件。所以,接下来的瘦身优化就是让这些文件变小,以此达到瘦身的目的。

在 Android Studio 2.2.3 开始,就加入了浏览 APK 结构的功能,我们直接把安装包拖入 IDE ,就可以直接浏览其组成和对应大小,这样能够很方便的对比分析出每一步优化后的结果。


这里写图片描述

1.分析so库49.2M打包成APK占用22.6M,占比67.6

2.dex11M打包占用4.3M,占比12.9

3.资源文件7M打包6M,占比17.9

上图分析出so、dex、资源文件总占比98.4,着手从这三点进行优化。

三.优化建议

  1. 资源瘦身

a) 尽量只保存一份图片资源。开发目录下会有个mipmap 目录用于适配不同 dpi 的屏幕,下面是不同命名目录所适配的 dpi 范围


这里写图片描述

目前市面上绝大部分机型都处于 xxhdpi 的适配范围,所以可以考虑只保留 xxhdpi 目录下一份图片资源,具体保留哪个目录下的资源和保留几份资源还得依照应用自身的实际机型分布决定。

b) 使用 Drawable XML、Color、.9 PNG 代替 PNG

c) 使用 JPG 代替 PNG

d) 可以使用shape作为背景

e) 使用vector

button.setImageResource(R.drawable.ic_favorite_border_black_24dp)。

f) 谨慎使用 WebP 代替 PNG

由于 WebP 效果好,且相同效果下, WebP 文件比 PNG 文件要小得多。

g) 有损编码格式的音频文件代替无损格式的音频文件

从下面这篇官方文档
https://developer.android.com/guide/topics/media/media-formats.html

可以看到 Android 平台支持的音视频格式,下面列出有损和无损常用的格式(不要认为有损编码就是音质很差):

实际开发中需要使用音频文件尽量采用 MP3、Ogg 这种有损格式,尽量不要用 WAV、PCM 这种无损音频。

h) 移除无用的资源

这里的移除无用资源文件主要分为两个部分:不打包没有使用的资源和删除没有使用的资源。

i) 工具

j) 基于dex廋身

k) Native库瘦身

l) 代码瘦身

这里可以做的事情也是很多,主要如下:

参考:


 1. http://wuxiaolong.me/2017/03/19/ReduceAPKSize/?nsukey=52PBvRoPKrEz6vkSDHnnP1%2B%2FW5qJfm%2FOnA%2B1hvysYEEaCVd0IEgOQaWcv4Dc3HzKWh92wlOskWJ3ZXDPnHqhvsPU2d8ALMkpaJ54l5StPASm8bFZejhB80UIBcedUDia7GMYSEbOPnJ4FVE3OPCiVK5LinXoZRAR%2BsWA2J%2F04ipHrD5rVr1QLes9kY4snbaZ

上一篇 下一篇

猜你喜欢

热点阅读