笔友城堡 - 可定义的个人主页

前言

记录一下AndroidOTAUpdateEngine更新过程中的状态回调值的具体含义。

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)
  1. status --》 升级状态值
  2. percent --》 升级进度(百分比,值为0.0~1.0)

status 定义在UpdateEngine.java

frameworks\base\core\java\android\os\UpdateEngine.java
public 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;
}

其具体含义

常量名含义说明
0IDLE空闲状态:update_engine没有在执行任何升级操作,处于待命。
1CHECKING_FOR_UPDATE检查更新中:正在探测是否有可用 OTA 包(还未确认)。
2UPDATE_AVAILABLE有可用更新:已确认升级包存在,但尚未开始下载 / 写入。
3DOWNLOADING下载 / 写入中:正在将 payload 应用到未使用的 slot(A/B 实际“升级”阶段)。
4VERIFYING校验中:对 payload、元数据做完整性 / 签名校验。
5FINALIZING收尾中:写入完成,做最后的整理(如标记、准备切换)。
6UPDATED_NEED_REBOOT升级完成待重启:payload 已就绪,需重启才能切到新版本。
7REPORTING_ERROR_EVENT上报错误:升级过程中出现异常,正在上报错误状态。
8ATTEMPTING_ROLLBACK尝试回滚:升级失败,系统尝试切回上一个可用版本。
9DISABLED已禁用: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,  // 清理上一次未完成更新
};

参考文章

  1. Android源码
  2. AI

相关文章

笔友城堡 - 可定义的个人主页

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

none
暂无评论...