年末,项目新版本开发完上线了。暂时没什么开发任务。在考虑做点开发中来不及注意的事情的时候,组长给个任务:
在3个月前,项目app大小是10M,开发了2个版本后,突然增大到20M.这增长速度当然引起了有关部门的注意。。。正好趁此机会,实践一下没有认真搞过的app瘦身计划。顺便说下。老菜鸟三个月没打dota了。4年来,唯一一次坚持到100天的一次。
要瘦身,首先分析为什么瘦身和怎么才可以瘦身:
APK瘦身严格来讲不算是对应用性能的优化,应该算是对程序体验的优化。APK瘦身的价值主要有几点:
- 省流量:特别是在4G网络下,更多的移动流量表示需要花费更多的钱(别指望着用户一个月1、2G的流量专门给你腾出几十M来用于下载安装包);
- 给用户一个好印象,试想用户在安装你的程序需要很长的时间时,不仅会影响到他的心情,更是在浪费他的生命;
- 如果你的APK是预置到设备中,更大的APK表示需要占用更多的存储空间,也会增加烧录的时间。
那么怎么瘦身呢?我们要搞懂apk里到底有什么。
把apk拉进android studio。
有19.7M。好大,详细分析:
- res:目录存放资源文件。76.8%的比重。肯定要开刀。
- classes.dex: 在Android系统中,dex文件是可以直接在Dalvik虚拟机中加载运行的文件。通过ADT,经过复杂的编译,可以把java源代码转换为dex文 件。比重也不小。也要下刀。
- META-INF目录:META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。
- assets:也存放资源文件,我们放有字体,js。
- resources.arsc:编译后的二进制资源文件。
开刀。
-
res文件臃肿,不外乎2个原因。资源多,资源文件大。资源多的原因有,无用的资源,合作开发引起的分别命名同一文件,没有复用,简单的背景图之类的没有用shape。
1 使用lint检查无效资源。
OK之后 Studio会自动分析,然后可以根据结果清除无用的资源文件。
Note:
新三方库的文件要小心。我就是删除了分享要用的图片,结果弹出分享面板的时候是白板。。。
2 使用lint删除无效代码。
检查结果如下
可以看出,这代码没引用,删除。这是个乏味的体力活。
3 压缩大的图片
老菜鸟对比了一下2个主流的压缩平台。tinypng和pngquant,发现tinypng压缩比例和效果更好。但是不付费每次只能压缩20张。没有免费的午餐。只能一次20张的压缩一遍png图片。
4 转换为webp
WebP是谷歌研发出来的一种图片数据格式,它是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8。根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使这些 PNG 文件经过其他压缩工具压缩之后,WebP 还是可以减少 28% 的文件大小。目前很多公司已经将webP技术运用到Android APP中,比如FaceBook、腾讯、淘宝。webP相比于png最明显的问题是加载稍慢,不过现在的智能设备硬件配置越来越高,这都不是事儿。下载isparta,转化图片
老菜鸟老了,告别了dota手速就下来了。这些事忙活了一下午。终于干完了,看下效果:
还不错吧。。。这篇只是写了压缩图片和删除无用资源。瘦身是个持久的活,未完待续。