android:app瘦身之旅

随着app添加或者替换的功能越来越多,app的体积越来越大,考虑到app体积影响到的用户体验和下载欲望,项目就开始了瘦身之旅。虽然和道长一样瘦身是痛苦的,但是还好有一些成果,不像道长的体重一样……这里和小伙伴们分享一下。

#一、apk的组成

app瘦身之前,我们首先需要了解安装包的组成结构:

  • dex文件
    我们编写的所有Java代码都会由编译器转化成dex文件

  • res文件夹
    存放所有的资源文件

  • lib文件夹
    存放所有的库文件

  • assets文件夹
    存放需要保持原始文件的资源文件夹

  • AndroidManifest.xml文件
    Android应用的配置文件

  • META-INF文件夹
    存放签名校验相关的文件

  • 其他文件

然后我们可以使用Android Studio (注意是2.2.3版本以上)直观的看一下我们的安装包的构成以及大小:
这里写图片描述

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

#二、res瘦身

首先我们看到res是占有apk最大的体量。我们从res瘦身开始也是最容易下手的地方。

##1.移除无用的资源
如果我们一个一个的查看这个图片是否被占用是很傻的。我们可以借用Android Studio来实现:
这里写图片描述

然后输入:Unused resources

随后会有一个弹窗如下,这个弹窗有很多选项,这里道长选择整个项目:
这里写图片描述

然后等待一下就会有结果了:
这里写图片描述
你可以找到相应的资源一一删除,但是像道长这样有2370个的,如果让道长一一删除,道长选择狗带。当然Android Studio是很人性化的。让我们看看怎么使用Studio删除所有无用的资源:
这里写图片描述

然后会有一个弹窗然你选择:
这里写图片描述

注意:代码中引用方式不同,所以存在代码中使用了某个资源,但是依然被当成没有引用的情况,例如通过使用getIdentifier、Uri等方式。
##2.不打包无用的资源

当然这样只能一次清除无用资源,但是总不能每次迭代更新都清一次吧。然后我们可以在gradle中这样配置就不用每次都清理了。
这里写图片描述
注意:shrinkResource只能帮你压缩合并资源,并不能帮你移除资源文件,所以经过一段时间的积累还是要清理一次的。
##3.使用 Drawable XML、Color、.9 PNG、JPG 代替 PNG

  • Drawable XML替换PNG
    使用场景:一些渐变的图片或者纯色的图片

  • Color替换PNG
    使用场景:纯色的图片

  • .9 PNG替换PNG
    使用场景:复用率比较高的图片,且形状相似

  • JPG替换PNG
    使用场景:不需要透明度的图片

##4.尽量只保存1~2份图片资源

虽然在 drawable 或者 mipmap 目录用于适配不同 dpi 的屏幕,但是市场上xxhdpi的手机屏幕还是占有绝大部分的,但是考虑到以后的手机屏幕的dpi提高,所以我们项目选择了保留xxhdpi和xxxhdpi这两份图片资源。
这里写图片描述

#二、lib瘦身

##1.移除无用的dependencies、jar包和.so文件
app功能的添加可能要引用一些第三方开源框架。但是当这些功能删除掉时应当及时删除相应的dependencies、jar包和.so文件。在打包中如果全架构适配.so文件会占有体积的很大一部分,如下所示:
在这里插入图片描述

而一些架构市场占有率是很低的,一些大厂也做了相应的处理,如下所示:
在这里插入图片描述

微信(只适配armeabi)、qq(只适配armeabi)、王者荣耀(只适配armeabi-v7a)、百度地图(只适配armeabi)、大众点评(只适配aremeabi)等

所以最后在build.gradle中的defaultConfig作如下配置就可以大幅缩减app体积:
在这里插入图片描述
##2.移除功能重叠的框架
像我们项目中有几套网络访问框架Volley、HttpClient、Retrofit这三套框架,而切图片加载框架有ImageLoader、Picasso两套框架,我们这样只能靠代码Review解决,最后决定移除那些框架。
##3.减小对 Support 兼容包的依赖
我们看到我们项目的dex文件有两个,这是因为使用Support-V4造成的。项目引入V4包无疑会增大 dex 文件的大小,Google已经意识到这个问题,所以 Support-V7就做了拆分,并且开始对 Support-V4做拆分,虽然目前成果还不明显,当使用V7包替换了V4包后,可能就从2个dex变成1个dex。

#三、代码瘦身

##1.移除废弃功能的代码
如果该功能已经废弃就可以直接删除了,即便以后脑残产品又要添加了,我们也可以在git或者SVN上找到。
##2.移除重复的代码
已经有了的功能代码,团队成员不知道自己又写了一套,只能靠代码 Review 解决了。

好了,我们这次app瘦身的内容大概就这么多。希望这篇博客能够为小伙伴们提供一些帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值