Android差异应用程序更新

Android差异应用程序更新,android,updates,Android,Updates,我有一个单独托管的android应用程序(不在Play Store上),为了更新应用程序,我必须下载完整的apk,然后安装,即使是小改动和bug修复。 有没有办法在我的应用程序中实现类似于Google play Store的差异更新机制(智能更新机制)据我所知,即使您从Google play Store更新应用程序,您也在下载完整的APK,即使更新只是为了更改应用程序中的单个字符串 然而,我可以想出一种不同的方法(我还没有尝试过)来更新应用程序。这将需要一个服务器(您的应用程序将从该服务器下载新

我有一个单独托管的android应用程序(不在Play Store上),为了更新应用程序,我必须下载完整的apk,然后安装,即使是小改动和bug修复。
有没有办法在我的应用程序中实现类似于Google play Store的差异更新机制(智能更新机制)

据我所知,即使您从Google play Store更新应用程序,您也在下载完整的APK,即使更新只是为了更改应用程序中的单个字符串

然而,我可以想出一种不同的方法(我还没有尝试过)来更新应用程序。这将需要一个服务器(您的应用程序将从该服务器下载新数据/更新)。您必须在应用程序中编写代码,处理来自服务器的更新,并替换应用程序中的指定资源(值、字符串、链接等)。您将无法更改应用程序逻辑或语义,但至少可以更改数据

总之,我认为《愤怒的小鸟变形金刚》就是这样做的(因为它一直告诉我它正在从服务器下载新数据)。但是地铁冲浪者要求你从Play Store下载一个新的APK,以便为他们游览的每个城市获得新的资源。

如果你的问题是“有没有一个API可以为我完成所有这些?”那么答案是否定的

但是,如果您问“我需要实现什么设计来实现此功能?”,那么在大纲中,您需要:

  • 从客户端发送信息,以便识别当前安装的版本
  • 将当前安装版本和新版本之间的增量发送到客户端(以您认为合适的任何格式-您可以使用
    bsdiff
    的输出,例如,这是一个处理二进制文件的diff版本)
  • 将当前安装的apk作为简单二进制文件读取,并应用增量在临时位置生成新的二进制apk文件
  • 从临时位置安装新的apk
  • 清理临时位置

谷歌Play应用程序的情况很容易看出这一切是如何顺利进行的,执行此代码的应用程序不是正在更新的应用程序。然而,它可以用来更新你自己-毕竟谷歌游戏也需要更新自己

您需要知道的概念是“增量更新”:

您必须计算新旧APK文件之间的差异,并在服务器端生成修补程序文件:

https://en.wikipedia.org/wiki/Diff_utility
https://www.w3.org/TR/NOTE-gdiff-19970901
https://www.chromium.org/developers/design-documents/software-updates-courgette
然后在Android客户端下载补丁文件,并将其与旧的APK合并生成新的补丁文件。
安装新的APK…

我不仅要更新数据,还要更新应用程序,因为已经对应用程序中的完整应用程序逻辑和实现进行了更改。您好,谢谢您的回答!!是否有任何教程或示例应用程序来实现这一点!!!我不知道有哪一个Android的例子你可以效仿。您可能会发现,Chrome浏览器的等效更新程序(如中所述)可能会对您有所帮助。
https://en.wikipedia.org/wiki/Diff_utility
https://www.w3.org/TR/NOTE-gdiff-19970901
https://www.chromium.org/developers/design-documents/software-updates-courgette