有道词典Android客户端包体积优化之路

1 背景

有道词典从移动互联网之初就凭借小巧快速、功能强大的印象让用户爱上翻译查词,爱上学习。随着业务不断地迭代以及功能不断完善,有道词典不再是单纯的查词软件,而是变成了用户的综合学习平台。我们探索过社区、问答、直播、信息流等业务,目前也承载着音频、视频、课程、背单词、写作批改等等的功能。词典已经发展成为一个综合性的学习平台,小巧快速的初心仍然指引着我们不断进行启动速度以及包体积优化。

经过了不断的性能优化,目前我们的冷启动时间已经能维持在业界标准水平3s以内。我们近一个季度主要的性能优化工作集中在安装包体积优化上面。经过一系列的努力,我们包体积减少了23.7%,安装包体积从177MB减少到135MB,整体少了42MB。

有道词典Android客户端包体积优化之路_第1张图片

以下详细介绍我们的分析以及实现细节。

2 分析

介绍下包体积包含的内容以及优化方法概述

一般的APK安装包包含了以下一些目录和资源:

META-INF/ 签名文件

assets/ 程序使用的辅助资源文件

res/ 没有编译进入resources.arsc 资源文件,一般是图片

lib/ 依赖的不同native平台的库文件

resource.arsc 编译之后的文案、色值、大小、主题等资源索引

classes.dex 编译后的代码

AndroidMenifest.xml 应用的名称、版本、访问权限和引用的库文件信息

有道词典Android客户端包体积优化之路_第2张图片

可以看出占比较大的部分主要是分别是assets/、lib/、res/、classes.dex以及resources.arsc,大概对应的就是资源、库文件、代码以及资源索引。我们主要的优化思路如下(其中蓝色框部分为目前已经处理部分):

有道词典Android客户端包体积优化之路_第3张图片

3 技术实现细节

3.1 图片压缩

在APK打包的过程中,aapt 工具会默认对图片进行无损压缩,不过默认的压缩并不能达到一个很好的压缩效果,经过了对比webp以及tinypng的压缩效果,我们最终选择了使用tinypng对图片进行压缩。并且我们编写了编译工具,对图片进行自动化压缩。

有损webp > tinypng > 无损webp

有道词典Android客户端包体积优化之路_第4张图片

比如这张启动图,原大小724KB,压到75%左右的质量只有23.7KB。效果上有一点点差异,但可以接受。那么我们是否可以把全部png图压成有损webp呢?答案是否定的,可以看看下面的例子:

有道词典Android客户端包体积优化之路_第5张图片

压缩前:

有道词典Android客户端包体积优化之路_第6张图片

压缩后:

有道词典Android客户端包体积优化之路_第7张图片

可以看到,相同的压缩质量下(75%),这个图就变得十分模糊,哪怕选择到了99%的压缩质量,渐变区域依然会出现一些没有自然过渡的条纹。

你可能感兴趣的:(groovy,android)