前言
记录一下AndroidOTA中UpdateEngine更新过程中的状态回调值的具体含义。
Android OTA升级是比较重要的,相关内容记录一下,方便自己查阅。
正文
先看回调代码
private void startUpdateOs(File zipFile) throws IOException { // 1. 解析升级包 UpdateParser.ParsedUpdate update = UpdateParser.parse(zipFile); if (update == null || !update.isValid()) { Log.e(TAG, "startUpdateOs Update package parsing failed or invalid"); return; } Log.i(TAG, "startUpdateOs Parsed update: " + update); // 2. 创建 UpdateEngine 和 Callback UpdateEngine engine = new UpdateEngine(); UpdateEngineCallback callback = new UpdateEngineCallback() { @Override public void onStatusUpdate(int status, float percent) { // 进度回调:status 表示当前升级状态,percent 表示进度百分比 Log.i(TAG, "startUpdateOs OTA status: " + status + ", progress: " + percent); } @Override public void onPayloadApplicationComplete(int errorCode) { // 完成回调:errorCode 为 0 表示成功 } }; // 3. 绑定服务并应用升级 engine.bind(callback); engine.applyPayload(update.mUrl, update.mOffset, update.mSize, update.mProps); }
重点关注onStatusUpdate的参数
onStatusUpdate(int status, float percent)- status --》 升级状态值
- percent --》 升级进度(百分比,值为0.0~1.0)
status 定义在UpdateEngine.java
frameworks\base\core\java\android\os\UpdateEngine.javapublic static final class UpdateStatusConstants { public static final int IDLE = 0; public static final int CHECKING_FOR_UPDATE = 1; public static final int UPDATE_AVAILABLE = 2; public static final int DOWNLOADING = 3; public static final int VERIFYING = 4; public static final int FINALIZING = 5; public static final int UPDATED_NEED_REBOOT = 6; public static final int REPORTING_ERROR_EVENT = 7; public static final int ATTEMPTING_ROLLBACK = 8; public static final int DISABLED = 9; }
其具体含义
| 值 | 常量名 | 含义说明 |
|---|---|---|
| 0 | IDLE | 空闲状态:update_engine没有在执行任何升级操作,处于待命。 |
| 1 | CHECKING_FOR_UPDATE | 检查更新中:正在探测是否有可用 OTA 包(还未确认)。 |
| 2 | UPDATE_AVAILABLE | 有可用更新:已确认升级包存在,但尚未开始下载 / 写入。 |
| 3 | DOWNLOADING | 下载 / 写入中:正在将 payload 应用到未使用的 slot(A/B 实际“升级”阶段)。 |
| 4 | VERIFYING | 校验中:对 payload、元数据做完整性 / 签名校验。 |
| 5 | FINALIZING | 收尾中:写入完成,做最后的整理(如标记、准备切换)。 |
| 6 | UPDATED_NEED_REBOOT | 升级完成待重启:payload 已就绪,需重启才能切到新版本。 |
| 7 | REPORTING_ERROR_EVENT | 上报错误:升级过程中出现异常,正在上报错误状态。 |
| 8 | ATTEMPTING_ROLLBACK | 尝试回滚:升级失败,系统尝试切回上一个可用版本。 |
| 9 | DISABLED | 已禁用:update_engine被关闭,不再接受升级请求。 |
其完整的定义在
system/update_engine/client_library/include/update_engine/update_status.h下面是全部的升级状态值,并简单介绍了
enum class UpdateStatus { IDLE = 0, // 空闲,无升级操作 CHECKING_FOR_UPDATE = 1, // 正在检查更新 UPDATE_AVAILABLE = 2, // 有可用更新 DOWNLOADING = 3, // 下载 / 写入 payload VERIFYING = 4, // 校验 payload / 元数据 FINALIZING = 5, // 升级收尾(应用、整理) UPDATED_NEED_REBOOT = 6, // 升级完成,等待重启 REPORTING_ERROR_EVENT = 7, // 上报错误事件 ATTEMPTING_ROLLBACK = 8, // 尝试回滚 DISABLED = 9, // 更新引擎被禁用 NEED_PERMISSION_TO_UPDATE = 10, // 需用户授权(如非 Wi-Fi 禁止) CLEANUP_PREVIOUS_UPDATE = 11, // 清理上一次未完成更新 };

