我对公司 APK 做了个瘦身

hello, 大家好,鸡年第一篇blog, 因为节后到现在一直比较忙,上班忙工作,下班忙上分,王者农药,喝了就停不下来...

开篇语

最近接到老大一个任务:为我们的应用做瘦身.我们电商类项目到现在维护到2.7.0 APK 已经有35M了,说实话已经很大了.通过这两天的努力把安装包从35M瘦身到了23.8M.这其实还不是极限,由于一些原因的限制目前就到23.8M 为止.做个记录,方便以后 review 也为大家提供参考.

安装包的组成

不废话直接上图:



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


如图, 资源文件和 lib 在 APK 中比例最高,所以重点拿这两个地方开刀.

第一刀: 资源文件的处理

因为公司的产品比较稳定,所以一些产品图我们保存在了 res 本地中,所以导致了 res 文件过大.其实最好的解决方法,当然是将比较大的产品图放在后台服务器,由于公司后台人员最近比较忙,而且对后台来说这个工程还是蛮大的,所以自己动手,丰衣足食咯...
我们项目中的所有图片都是 png 格式的,这点比较好了,关于图片处理,我首先想到的就是压缩了.虽然 png 和其他格式图片比,本身就比较轻量了,但是还是有很大压缩空间的,因为产品图,在我们项目中只是个缩略图,不需要高保真.
找到了几个压缩工具:

  • ImageOptim:https://imageoptim.com/mac ,支持压缩 PNG/JPEG/GIF ,而且效果显著,我用的就是这个工具.可以看看这里 https://www.diycode.cc/topics/496 ,遗憾的是它只支持 Mac ,Windows 党很难过。
  • TinyPNG:https://tinypng.com/ ,支持对 PNG/JPEG 文件做压缩处理,效果不错。
  • pngquant:https://pngquant.org/ , 支持 PNG 压缩,有时候 TinyPNG 处理过的图片噪点会稍多,可以考虑用 pngquant 来处理。
    来看下效果:

    由于一些变量控制没做到位,所以效果显示稍差,实际 APK 大概减小2M

第二刀: lib 处理

lib 中主要是一些第三方 sdk 中的 so 文件,Native 库瘦身主要是减小对 CPU 架构的支持.关于 CPU 架构支持,不了解的,传送门附上:https://zhuanlan.zhihu.com/p/23102158
出于好奇,分析了下微信的 APK 发现他的 lib 下只有 armeabi ,看过上篇文章就明白了.
来看下我们的 APK 吧:


看到这个,瞬间来了精神,知道这块瘦身空间有多大了吧.
根据我们用户的机型分布,最终只保留了对 armeabi-v7a 支持.注意,这里需要根据自家产品的实际情况来决定。
配置起来很简单,在 build.gradle 使用 abiFilters 配置需要用到的 CPU 架构,并将不需要兼容的 so 文件从项目中移除即可。

看一下成果:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文会不定期更新,推荐watch下项目。如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以...
    天之界线2010阅读 18,370评论 19 153
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,118评论 25 708
  • 瘦身意味了什么呢?人们瘦身味了更好的身体和更匀称的身材。那么app呢?提高下载转化率,用户在无wifi情况下少用流...
    乐之飞于阅读 631评论 0 3
  • 瘦身的目的 从目的导向来看,我们是不会无缘无故去做一件事情的,那我们对应用瘦身的目的是为了什么?答案是:提高下载转...
    楷桐阅读 457评论 1 2
  • 一.change_view.js 用于手机端页面rem布局换算 640px=>6.4rem;100px=>1rem...
    codewa阅读 1,090评论 0 2