前言:爱奇艺的产品有很多,业务线都有不同,我们业务部的主要产品是银河~奇异果,属于在智能电视上的app。对于我们播放组主要是做各产品的播放支撑及对接,还包括一些其他产品播放支撑。今天分享的是早期版本中优化工作的冰山一角,app瘦身。
1
为什么要瘦身了?
相比同类型的竞品,我们的体积稍大了些
1、安装包比较大,可能对用户安装、激活造成较大的障碍
2、期望能通过瘦身,降下APK的体积
2
可能优化的点在哪?
没有急于动手去优化,分析了理论上,可能优化的点
1、减少切片,大图,及背景图
2、图片压缩
3、采用压缩率更高的webp图片格式,代替当前的png格式
4、清理不需要的布局文件,XML格式资源文件
5、删除一些用户量极少,“无意义”的功能
6、检查第三方包,把不需要的组件、图片之类的删除或替换
7、降低so库的体积
8、把部分页面做成H5,客户端删除这部分功能
9、自查代码,尤其是逻辑相似的部分。删除冗余代码
10、降低插件体积
3
协调各Team
1、UE团队,尽量不要提供大的切图及背景图。
2、产品团队,精简一些功能,删除一些“无意义功能”,删除的很有限,哪怕有0.0001,也要争取。
3、其他团队,推动。尤其是so库,能否想办法,降低体积。
4、引入webp格式:部分rom上不支持,作罢。
5、资源混淆,
6、H5团队,H5页面,可行。
7、插件体积,能否支持so也插件化。
4
来吧,开刀
1、lint使用
采用lint工具,删除了大量无用的资源。有一定作用。Android studio集成了lint工具,检测“unused resoure“及unused declaration等。这里我们使用lint检测了无用的资源文件。
2、其他团队so库的体积减少,作用明显著
3、代码冗余部分:效果非常有限
4、使用图片压缩工具,有一定作用
Google推荐图片压缩工具:https://developers.google.com/speed/docs/insights/OptimizeImages,市面上有许多工具可用来对JPEG和PNG文件执行进一步的无损压缩,且不会对图片质量造成任何影响。对于JPEG文件,我们建议您使用jpegtran或jpegoptim(仅适用于Linux;使用--strip-all选项运行)。对于PNG文件,我们建议使用OptiPNG或PNGOUT。
5、H5页面,作用明显
6、支持插件 so,插件支持网络加载so及更新原则, 作用明显
7、jar包资源混淆
5
还可优化的点,为0.0001而努力
接下来还可优化的点:
1、AndResGuard进行压缩
AndResGuard介绍:
微信资源压缩打包,主要为了混淆资源ID长度(例如将res/drawable/welcome.png混淆为r/s/a.png),同时利用7z深度压缩,大大减少了安装包体积,同时也增加了逼格,提升了反破解难度。
详情参考:https://github.com/shwenzhang/AndResGuard
原理介绍:
http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=208135658&idx=1&sn=ac9bd6b4927e9e82f9fa14e396183a8f#rd
2、TinyPng压缩图片
TinyPng能够在视觉上几乎不影响图片的情况下显著压缩图片体积。
从图中可以看到,压缩3次以后基本上体积就很难再减少了,压缩6次以后体积基本上就不变了,值得高兴的是,即使不停的压缩,图片依然不会失真,所以放心大胆的使劲压缩吧。如下,压缩7次后的对比图:
TinyPng好用的地方:
1、图片压缩后对视觉影响不大,但体积显著减小
2、可以批量压缩
3、压缩后文件名与原文件名相同,可以直接替换,尤其是批量压缩的时候
4、可以反复压缩6-7次,而不用担心失真
5、简单有效