android:app瘦身之旅
来源:互联网 发布:行知职高吧 编辑:程序博客网 时间:2024/06/05 21:13
随着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文件
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瘦身的内容大概就这么多。希望这篇博客能够为小伙伴们提供一些帮助。
- android:app瘦身之旅
- Android 优化系列之---APP瘦身
- Android性能优化之App瘦身攻略
- Android App瘦身
- Android APP终极瘦身
- android app瘦身
- android app瘦身
- Android app瘦身计划
- Android App 瘦身总结
- Android App瘦身详解
- Android App 瘦身总结
- Android App瘦身实战
- Android App瘦身实战
- android app瘦身
- Android APK瘦身之旅
- 我的Android进阶之旅------>Android APP终极瘦身指南
- APP瘦身之webp实践
- APP瘦身之webp实践
- 链表中环的入口节点(Java实现)
- Eclipse在线安装插件(PyDev)
- 分数加减法
- Object类的方法学习
- 写给临近毕业选择PHP培训的孩子们别在比较PHP培训哪家好了
- android:app瘦身之旅
- UVa11300
- printf宏定义
- iOS Quart2D绘图之UIGraphicsGetCurrentContext基础
- 动态规划---实现输出最大公共子序列的长度以及输出最大子字符串(java语言描述)
- Java基础教程10-逻辑运算-与或
- [C++ Primer Plus学习笔记Ⅱ]const的用法归纳与整理
- iOS10 拍照打开相册选择图片
- opengles实现卡通效果