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