为使用 Xamarin.Forms 构建的 Android 应用实现自动更新的正确方法
Correct way to implement auto-update for Android app built with Xamarin.Forms
我最近开始使用跨平台 Xamarin.Forms 工具包构建我的移动应用程序,但我很难尝试为其实现某种自动更新机制。
更具体地说,我的应用程序有一些 XML 文件以及存储在 assets 文件夹中的图像,所有这些都打包在 apk 文件中,发布到 Google Play。
我想要的是编辑和更新那些 xml 和资产 而无需在 Play 商店中发布新版本的 apk。但我也知道,一旦打包成apk,这些资源就无法更改,除非用户通过商店手动下载和更新应用程序。
所以我目前使用以下解决方法:
- 我把所有我想更新的 XML 文件或图像 放在我的服务器上 然后制作一个 API 用于指定其版本以及提供可下载的项目。
- 在我的应用程序中,我有一个代表资产当前版本的值。每当应用程序启动时,后台进程将调用服务器的 API 并检查此版本值是否与服务器上的版本值匹配。
- 如果版本不匹配,该服务将自动从服务器下载内容并存储在用户设备的内部存储器。
- 然后应用会将本地资源替换为来自服务器的资源。
问题是我的这个变通办法太笨拙而且难以实施。有什么想法可以帮助我找到更清洁或更合适的解决方案吗?
你的逻辑是正确的...如果你是"versioning" assets outside APK,你需要跟踪一个"version"的本地assets与服务器|远程资产和 download/cache 新资产相比,当远程资产较新时...
您可以使用 APK 扩展 (*.obb) 文件将您的 "assets" 与 .apk 包分开。但是任何时候你需要更改 .obb
(即使它是基于补丁的 .obb
),应用程序版本也必须更改,因此你必须上传带有新版本的 .apk
到商店,即使里面的其他东西没有改变。
新的 .aab
格式(.apk
替换)允许您修改应用程序的各个组件,因此用户可以真正了解他们安装的内容与实际安装的内容之间的差异。导致非常小的更新大小的新更改。同样与 .obb 一样,应用程序的版本需要更改,因此必须上传新的 .aab
。
注意:Xamarin 目前不支持直接构建 .aab
包(就像 Android Studio 那样),但它们可以 "handmade" 来自 MSBuild 工件。
个人对于像你这样的场景,我只使用一个版本化的 .zip
,它包括所有可以在应用程序级别版本之间动态更改的文件|发布,因此只跟踪单个文件(解压缩到本地应用程序缓存下载后)。服务器上的版本文件(或只是文件哈希)包含最新版本和 zip 文件的 URL,并且 zip 文件本身包含匹配的版本文件。没有缓存文件,下载并解压缩文件。检查应用程序更新时,将缓存中的版本文件与服务器版本进行比较,如果需要,则 download/unzip。 (注意:我 没有 甚至使用单独的 "semantic version",我只使用 zip 文件的 SH1 哈希)。
我最近开始使用跨平台 Xamarin.Forms 工具包构建我的移动应用程序,但我很难尝试为其实现某种自动更新机制。
更具体地说,我的应用程序有一些 XML 文件以及存储在 assets 文件夹中的图像,所有这些都打包在 apk 文件中,发布到 Google Play。
我想要的是编辑和更新那些 xml 和资产 而无需在 Play 商店中发布新版本的 apk。但我也知道,一旦打包成apk,这些资源就无法更改,除非用户通过商店手动下载和更新应用程序。
所以我目前使用以下解决方法:
- 我把所有我想更新的 XML 文件或图像 放在我的服务器上 然后制作一个 API 用于指定其版本以及提供可下载的项目。
- 在我的应用程序中,我有一个代表资产当前版本的值。每当应用程序启动时,后台进程将调用服务器的 API 并检查此版本值是否与服务器上的版本值匹配。
- 如果版本不匹配,该服务将自动从服务器下载内容并存储在用户设备的内部存储器。
- 然后应用会将本地资源替换为来自服务器的资源。
问题是我的这个变通办法太笨拙而且难以实施。有什么想法可以帮助我找到更清洁或更合适的解决方案吗?
你的逻辑是正确的...如果你是"versioning" assets outside APK,你需要跟踪一个"version"的本地assets与服务器|远程资产和 download/cache 新资产相比,当远程资产较新时...
您可以使用 APK 扩展 (*.obb) 文件将您的 "assets" 与 .apk 包分开。但是任何时候你需要更改 .obb
(即使它是基于补丁的 .obb
),应用程序版本也必须更改,因此你必须上传带有新版本的 .apk
到商店,即使里面的其他东西没有改变。
新的 .aab
格式(.apk
替换)允许您修改应用程序的各个组件,因此用户可以真正了解他们安装的内容与实际安装的内容之间的差异。导致非常小的更新大小的新更改。同样与 .obb 一样,应用程序的版本需要更改,因此必须上传新的 .aab
。
注意:Xamarin 目前不支持直接构建 .aab
包(就像 Android Studio 那样),但它们可以 "handmade" 来自 MSBuild 工件。
个人对于像你这样的场景,我只使用一个版本化的 .zip
,它包括所有可以在应用程序级别版本之间动态更改的文件|发布,因此只跟踪单个文件(解压缩到本地应用程序缓存下载后)。服务器上的版本文件(或只是文件哈希)包含最新版本和 zip 文件的 URL,并且 zip 文件本身包含匹配的版本文件。没有缓存文件,下载并解压缩文件。检查应用程序更新时,将缓存中的版本文件与服务器版本进行比较,如果需要,则 download/unzip。 (注意:我 没有 甚至使用单独的 "semantic version",我只使用 zip 文件的 SH1 哈希)。