c# - 为使用 Xamarin.Forms 构建的 Android 应用程序实现自动更新的正确方法

标签 c# android xamarin xamarin.forms auto-update

我最近开始使用跨平台 Xamarin.Forms 工具包构建我的移动应用程序,但我很难尝试为其实现某种自动更新机制。

更具体地说,我的应用程序有一些 XML 文件以及图像存储在 assets 文件夹中,所有这些都打包在 apk 文件中,发布到 Google Play。

我想要的是编辑和更新那些 xml 和 Assets 而无需在 Play 商店中发布新版本的 apk。但我也知道,一旦打包到 apk 中,这些资源就无法更改,除非用户通过商店手动下载和更新应用。

所以我目前使用以下解决方法:

  1. 我将所有我想要更新的东西(例如 XML 文件或图像)放在我的服务器上,然后创建一个 API 来指定它们的版本并提供可下载的项目.
  2. 在我的应用程序中,我有一个代表 Assets 当前版本的值。每当应用程序启动时,后台进程都会调用服务器的 API 并检查此版本值是否与服务器上的版本值匹配。
  3. 如果版本不匹配,该服务将自动从服务器下载内容并存储在用户设备的内部存储中。
  4. 然后应用程序将用服务器资源替换本地资源。

问题是我的这个变通办法太笨拙而且难以实现。有什么想法可以帮助我找到更清洁或更合适的解决方案吗?

最佳答案

您的逻辑是正确的...如果您在 APK 的外部“版本化” Assets ,您需要跟踪本地 Assets 与服务器|远程 Assets 的“版本”并在远程 Assets 较新时下载/缓存新 Assets ...

您可以使用 APK 扩展 (*.obb) 文件将您的“ Assets ”与 .apk 包分开 bundle 。但是任何时候您需要更改 .obb(即使它是基于补丁的 .obb),应用程序版本也必须更改,因此您必须上传 >.apk 将新版本发布到商店,即使其中的任何其他内容都没有更改。

回复:APK Expansion Files

新的 .aab 格式(.apk 替换)允许您修改应用程序的各个组件,因此用户可以获得真正的差异差异他们安装了新的更改,导致更新大小非常小。同样与 .obb 一样,应用程序的版本需要更改,因此必须上传新的 .aab

注意:Xamarin 目前不支持直接构建 .aab 包(就像 Android Studio 那样),但它们可以从 MSBuild Artifact “手工制作”。

回复:Android App Bundles

就您个人而言,对于像您这样的场景,我只使用单个版本化的 .zip,其中包含所有可在应用程序级别版本|发布之间动态更改的文件,因此仅跟踪该单个文件(解压缩到本地下载时应用程序缓存)。服务器上的版本文件(或只是文件哈希)包含最新版本和 zip 文件的 URL,并且 zip 文件本身包含匹配的版本文件。没有缓存文件,下载并解压缩文件。应用更新检查时,将缓存中的版本文件与服务器版本进行比较,并在需要时下载/解压缩。 (注意:我甚至使用单独的“语义版本”,我只使用 zip 文件的 SH1 哈希)。

关于c# - 为使用 Xamarin.Forms 构建的 Android 应用程序实现自动更新的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55856092/

相关文章:

c# - LINQ Select - CS0411 无法从用法中推断出类型参数 - 我做错了什么?

java - 停止可运行程序

ios - Xamarin iOS 获取每个 UITableView 部分的重复数据

xamarin - CallygraphyXamarin 无法在 MvxAppCompatActivity 中工作

c# - MVC 模型绑定(bind) - 抽象集合属性

c# - 如何将 Byte[] 转换为 BitmapImage

c# - 在C#中反序列化JSON数据的好方法

Android 游戏客户端, fragment 上未显示成就解锁弹出窗口

android - 如何从 RecyclerView Adapter 获取 ViewModel 的值

android - 使用 SupportMapFragment 而不是 MapFragment