看你的 APK 辣么胖,也不减减肥

撸完代码打包发现应用没太多复杂功能的应用打包出的 apk 安装包大小居然达到了感人的 62M 之大!显然这个这个大小是不能接受的。那么要瘦身首先要知道胖在哪儿,对症下药才能出奇效。

分析“肥胖原因”

Android Studio 自带的 Apk 分析工具就能处理这个问题,Build ->AnalyzeAPK 选中待分析的 APK 即可得到安装包中各个大类别的体积大小:

apk

从上图可以看出总共 62M 大小的安装包 lib 目录占了 43M 之大。这些都是应用中使用到的针对不同类型 CPU 的 .so 依赖库文件,如果能想办法减少这部分的体积,APK 大小应该会有明显的缩小。这么多的 "ABIs" 如果无特殊需要是不用全部支持的,去掉其中的部分则可以压缩安装包的体积。

jniLibs 的取舍

ABI 类型 备注
arm64-v8a 第8代、64位ARM处理器 很少设备,三星 Galaxy S6是其中之一
armeabi-v7a 第7代及以上的 ARM 处理器 现在市面上的主流安卓机型 CPU 架构
armeabi 第5代、第6代的ARM处理器 早期设备,v7a 及 v8a 能兼容 armeabi 指令集
x86 平板及模拟器,少部分华硕的机型
x86_64 64 位平板

上表中可以看出,如果不是做的平板应用,也不需要兼容平板及模拟器运行。那么 X86 的两个包是可以去掉的。剩下的三个 armeabi 的依赖库则可以根据需求做取舍。需要注意的是:
如果这三个包都存在时需要每个包类型中都有对应的 .so 文件。因为向下兼容的原因,高架构版本 CPU 的手机在加载依赖库时如果无高版本 lib 目录则会以低版本兼容方式运行,如果有高版本目录但是资源不完整则会报错。比如在 arm64-v8a 类型手机上运行应用时,如果 armeabi-v7a 目录中有 a.so、b.so, arm64-v8a 目录中只有 a.so 在运行时则会出现 b.so 找不到的问题。如果删除掉 arm64-v8a 的目录则应用会以低版本兼容模式运行,不会产生问题,同理 armeabi 也一样。
从上面的内容来看,保留哪些类型的依赖库也很明朗了:

  • 需要保留 64 位的优化特性则保留 64位 包
  • 需要兼容 5、6 代 arm 机型的保留 armeabi
  • 其他情况使用 armeabi-v7 包即可

如果应用是专用设备分发安装,不是应用市场自由下载。使用多渠道打包每种类型打一个包给对应平台使用才是最佳解决方式。

最终选择

摸着石头过河,咱也可以摸着大佬们过坑。论机型覆盖,国内的主流应用微信支付宝应该是妥妥的第一梯队。那我们来看一下大佬们保留了哪些依赖库:

  • 支付宝
enter description here
  • 微信

enter description here

通过 AndroidStudio 分析发现微信和支付宝都是单个 lib armeabi 包。因为我的应用也没有特别需求的骚操作,因此也跟两位大佬一样最终只保留了armeabi包,此外因为使用了腾讯 X5 浏览服务,根据他的官方文档,要在 64 位手机上正常运行是需要将应用以 32 0位模式运行的,即只能使用 32 位包。

资源优化

经过前面的 lib 过滤,在只使用 armeabi 包的情况下打包出来的 APK 大小已经从原来的 62M 缩减到了23M 的大小

enter description here

优化 jni 依赖包后 APK 的大小大幅缩减了,现在安装包最大的部分变成了 res 目录,点进去看发现 drawable 目录下居然有张超过 1M 的大图,后来找 UI 重新要了张小一些的图,从而将 APK 大小进一步缩小了。除了给的资源图片太大会导致没必要的占用 APK 体积外,将大量的未使用图标资源打包进 APK 也会增加体积。解决这个问题的办法是在 gradle 中配置 shrinkResources=true,在打包时剔除未使用资源。混淆打包也能在一定程度上压缩安装包体积,所以不要因为加固所以就不配置混淆,他还能帮你减小安装包体积呢。

  • 工具推荐
    大的 png 图片,本着自己动手丰衣足食的原则。可以通过 TinyPNG这个网站将图片进行高保真压缩,传上去的 1.9M 的 png 图片帮我压缩到了 680 kb,这个压缩效果还是比较明显的。当然能找到 UI 统一处理一下还是交给 UI 处理方便一些(手动滑稽)

经过上面的这一系列操作,可喜可贺,APK 大小已经来到了20M 的样子,从 60M 到 20M ,这个大小基本可以接受了

enter description here

png 图片处理

图片资源较多的 APP 中图片资源是占有很大的比例的。而且打包时图片资源不会被压缩,因此从这点下手,压缩 UI 图标资源的体积也能给 APK 瘦身。

处理方式

处理的方式也很简单,选中 UI 给的 PNG 图右键选择转成 webp,还可以根据需要选择压缩质量

image

压缩完之后再来检查一下 APK 发现资源目录的大小已经只有 1.3 M 的大小了,其中放图片的三个目录总大小都只有几百 KB,这大小已经非常的小了

image

总结一哈

APK 瘦身基本就干下面几件事

  • 根据自己的需求确定使用哪些版本的 JNI 库。不要全都打进去了,三方是全平台都提供了但是你不一定要全平台都用啊
  • 检查资源图片中是否有太大图片,试着处理一下再放进去。资源包括 res 和 assets 目录
  • 配置打包时过滤未使用文件 shrinkResources=true
  • 一定要混淆代码打包
  • 图片换成 WEBP 格式,不用 PNG 格式,效果十分惊人。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,069评论 4 358
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,212评论 1 287
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 105,912评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,424评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,741评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,194评论 1 206
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,553评论 2 307
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,289评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,923评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,251评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,775评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,144评论 2 249
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,698评论 3 228
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,936评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,658评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,214评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,159评论 2 258

推荐阅读更多精彩内容