专栏名称: 谷歌开发者
Google中国官方账号。汇集Android, Chrome, Angular等移动和网络开发技术、Google Play和AdMob等开发者成长、优化和变现平台。
目录
相关文章推荐
虎嗅APP  ·  中国最讨人嫌的行业,挤满35+的中年人 ·  21 小时前  
腾讯科技  ·  中国算力的隐秘江湖:以前近10万元的A100 ... ·  2 天前  
51好读  ›  专栏  ›  谷歌开发者

小贴士 | 应用更新文件大小缩减65%

谷歌开发者  · 公众号  · 科技媒体  · 2016-12-23 19:56

正文





Android 用户会在 Google Play 上下载数以百亿计的应用和游戏。我们发现,开发者们会频繁更新自己的应用,为用户提供优质内容,增强安全性,并提升整体用户体验。下载这些更新文件需要使用大量的数据,这是用户们非常在意的。


今年早些时候,我们宣布要开始使用 Colin Percival 开发的 bsdiff 算法。在使用 bsdiff 算法后,我们可以将应用更新文件的大小平均降低 47%(与完整 APK 的大小相比)。



 

现在,我们高兴地与各位分享一种更先进的技术 :File-by-File 补丁。使用 File-by-File 补丁的应用更新文件,相较于完整的应用而言,大小平均降低了 65%,在有些情况下甚至降低了 90% 以上。相较于之前的技术,新技术每天节省了最多 6 PB 的用户数据!



这就是获取新版本应用的方式也很简单:Google Play 会向您的设备发送一个补丁文件,在其中描述新旧版本应用的不同之处。


假定您是一位作者,您的新书即将出版,而您想要改动书中的一句话。与其把改动过的整本书寄给编辑,还不如告诉编辑,要改动哪句话,如何改,这样要轻松得多。同理可知,补丁文件的大小要远小于整个 APK 文件的大小,下载起来也要快得多。

 


在 File-by-File 补丁中使用的技术


Android 应用打包为 APK 文件,这是一种特制的 ZIP 文件。ZIP 文件(和 APK 文件)的大多数内容是通过 Deflate 技术压缩的。Deflate 非常适合用来压缩数据,但它有一个缺陷:让人很难辨别出未压缩的原文件内容中有哪些改动之处。即使只在原文件中做出一个微小的改动(像是在一本书中改动一个字),都会导致 Deflate 输出的压缩文件变得面目全非。描述两份原文件中的不同之处很容易,但描述两份压缩文件中的不同之处却无比艰难,导致补丁效率低下。

 

请观察,未经压缩的左侧文本改动一个字母后,压缩后的右侧文本改变了多少:



△ 动画的每一帧代表一次修改,请注意右侧压缩之后的内容变化


    

那么,File-by-File 补丁的压缩效果到底有多棒?



下面给出了几个采用 File-by-File 补丁技术的应用更新文件示例:




不过需要声明的是:如果您在手动选择 “更新” 选项时发现补丁大小有所不同,原因是我们目前没有为交互更新文件使用 File-by-File 技术,只对后台更新文件使用了这种技术。    



节省数据让用户和开发者更开心    



我们做出这些改动,是为了让我们这个拥有超过 10 亿台 Android 设备的社区的成员在日常更新应用时尽量节省数据。最值得称道的是,作为开发者,您无需进行任何操作就可以免费获取更新文件大小缩减这项福利!

 

如果您想要了解更多包括技术细节在内的 File-by-File 补丁内容,请前往 Archive Patcher GitHub Project,那里可以找到相关信息,包括源代码。没错,File-by-File 补丁是完全开源的!如果您还想要了解更多关于缩减 APK 的技巧就请点击 “阅读原文” 开始深入研究吧!