GeneralUpdate.Avalonia.Android — 执行流程详解
目标读者: 需要在 Avalonia Android 应用中集成自动更新的开发者
阅读 完你将理解:
AndroidBootstrap的显式三步 API 设计意图(Validate → DownloadAndVerify → LaunchInstaller)HttpResumableApkDownloader的断点续传机制:Range 请求 + Sidecar 元数据 + 原子重命名- SHA256 校验的安全上下限与文件大小双重验证
- Android APK 安装的 FileProvider URI 授权流程
SemaphoreSlim(1,1)并发保护与线程安全设计IUpdateEventDispatcher的 UI 线程调度机制- 多协议认证架构(HMAC / Bearer / API Key / Basic)
目录
- 架构总览
- 入口:GeneralUpdateBootstrap 工厂
- AndroidBootstrap:三步显式 API
- Step 1:ValidateAsync — 版本校验
- Step 2:DownloadAndVerifyAsync — 下载与校验
- 断点续传:HttpResumableApkDownloader 深度解析
- 哈希校验与文件大小验证
- Step 3:LaunchInstallerAsync — APK 安装触发
- 并发安全与线程 模型
- 事件调度与 UI 线程
- 多协议认证架构
- 关键代码路径索引
1. 架构总览
1.1 六服务可替换架构
Avalonia.Android 采用全接口抽象 + 工厂装配的设计,每个核心能力都有接口,可独立替换:
┌──────────────────────────────────────────────────────────────┐
│ GeneralUpdateBootstrap(静态工厂) │
│ CreateDefault(options) → IAndroidBootstrap │
├── ────────────────────────────────────────────────────────────┤
│ AndroidBootstrap(编排层) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ IVersion │ │ IUpdate │ │ IHashValidator │ │
│ │ Comparer │ │ Downloader │ │ SHA256 校验 │ │
│ │ 版本对比 │ │ HTTP 断点续传 │ │ │ │
│ └──────────────┘ └──────────────┘ └──────────────────┘ │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ IApkInstaller│ │ IFileStorage │ │ IUpdateEvent │ │
│ │ 系统安装器 │ │ 文件系统抽象 │ │ Dispatcher │ │
│ │ FileProvider │ │ │ │ UI 线程调度 │ │
│ └──────────────┘ └──────────────┘ └──────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ HttpDownloadOptions(横切配置) │ │
│ │ SSL 策略 / 代理 / 超时 / 重试 / 认证 │ │
│ └──────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────── ────┘
1.2 三步 API 设计哲学
与 Maui.Android 的合并式 API 不同,Avalonia.Android 采用显式三步 API:
| 步骤 | 方法 | 职责 | 调用方控制点 |
|---|---|---|---|
| 1 | ValidateAsync | 版本对比,判断是否有更新 | 决定是否继续 |
| 2 | DownloadAndVerifyAsync | 下载 + SHA256 校验 | 显示进度 UI |
| 3 | LaunchInstallerAsync | 触发系统安装器 | 用户确认后调用 |
设计意图: 调用方在每个步骤之间拥有完全的控制权——可以在版本检查后展示更新提示、在下载中显示进度条、在安装前要求用户确认。