谷歌应用商店的智能应用更新:它是如何工作的?

20

谷歌应用商店支持(自2012年8月起)一种名为“智能应用更新”的新功能,允许在升级应用程序时仅下载必要的“增量”。

我没有找到关于此功能的开发人员文档,因此不知道如何优化我的应用程序,以确保它从这个伟大的机制中受益。

那么,有人知道吗:

  • 对于开发人员而言,有哪些技术影响(如果有的话)是值得了解的呢? (我想用户设备上会构建一个新的完整大小的APK,或者未更改的数据被存储在其他地方吗?)
  • 先前版本中未变化的数据的再利用是否仅限于某些资源?(例如asset文件夹中的文件)

谷歌刚刚发布了一篇有趣的文章,介绍了他们如何压缩应用程序更新,甚至是APK的初始下载!https://android-developers.blogspot.fr/2016/07/improvements-for-smaller-app-downloads.html - Sébastien
2个回答

22

步骤如下:

  1. 使用差分编码算法GDIFF计算出旧应用程序版本和新应用程序版本之间的差异。这是在服务器端完成的。这个计算出来的差异通常被称为补丁文件
  2. 将补丁文件传输到设备上。
  3. Google Play Store应用程序使用补丁文件和旧应用程序构建新版应用程序。
  4. 将新版应用程序安装到设备上。

目前,补丁大小是新应用程序版本大小的25%(平均值)。因此,平均可以节省75%的流量。权衡之处在于,您需要在终端设备上进行更多的计算来部署接收到的补丁,这取决于增量编码技术。 GDIFF非常简单,并且具有最小的开销。差异是在APK包之间计算出来的(APK中的所有信息都被使用)。正如已经提到的,开发人员不需要做任何事情就可以从这个新功能中获益。


谢谢。你有任何参考资料吗? - Sébastien
我们正在谷歌的资助下研究这个领域,并可以发送给您一份论文。不太清楚其他来源。此外,谷歌还发布了有关智能更新的信息。 - Nikolai Samteladze
我相信 Stack Overflow 的用户们会很高兴阅读这篇论文,如果你被允许的话,请随意在这里发布链接。 - Sébastien
DELTA项目的主页:http://www.csee.usf.edu/~nsamteladze/projects/delta.html。该网站提供了大量关于使用Delta编码来减少传输数据的信息。 - Nikolai Samteladze
有没有一种机制使文件必须更新?因为似乎资产中的文件没有随着内容的更改而更新,或者我错了? - Majid

7
没有文档的原因是因为所有操作都是由谷歌服务器完成,没有任何外部交互。开发者不需要担心这个功能,只需像平常开发应用程序一样即可。
公平地说,我认为他们不希望任何人知道它的工作原理,因为我猜想这是他们的知识产权的一部分。

我真的怀疑这可以完全在服务器端完成。必须在设备上进行一些处理(我猜是由Google Play应用程序完成),以从从服务器下载的增量中重新构建有效的APK。 - Sébastien
谷歌服务器将增量发送到设备上的GooglePlay.apk,然后GooglePlay.apk完成构建 ;) 我所说的重要部分是:这一切都由谷歌自动完成,我们开发人员不需要担心。 - Budius
我非常确定这不是他们的知识产权(当然,除了代码)。我相信谷歌使用了一种预先存在的增量编码算法,并且在Android应用程序更新中有关于增量编码使用的先前工作。 - Nikolai Samteladze
让我引用自己的话:“我说的重要部分是:这一切都是由谷歌自动完成的,我们开发人员不需要担心它。” - Budius
我已经进行了很多研究,我有一个需求,在服务器和移动端上构建类似Google Play商店的应用程序...请帮助我理解它。 - varunrao321
@Budius,直到看到你的回答我才稍微放心。所以我明白,在进行“智能更新”时,这不会触及任何用户数据(偏好设置等)。 - UVM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接