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

前言

下面记录一下Android A/B OTA 升级 — update_engine 错误码完整参考中完整的参考码,以及相关的内容介绍和问题原因。

记录于此,方便自己查阅。

正文

Android A/B OTA 升级 — update_engine 错误码完整参考

AOSP system/update_engine/common/error_code.h

Java 层:android.os.UpdateEngine.ErrorCodeConstants

通用状态

错误码枚举名说明
0kSuccess升级成功
1kError通用失败(未归类错误)

前置 / 请求 / 响应阶段

Omaha & 网络

枚举名中文说明
2kOmahaRequestErrorOmaha 请求发送失败(DNS/网络断开)
3kOmahaResponseHandlerErrorOmaha 响应处理逻辑异常
30kOmahaRequestEmptyResponseError服务器返回空响应
31kOmahaRequestXMLParseErrorXML 响应解析失败
34kOmahaResponseInvalidOmaha 响应内容非法
35kOmahaUpdateIgnoredPerPolicy因企业策略忽略本次更新
36kOmahaUpdateDeferredPerPolicy因策略条件未满足延迟更新
37kOmahaErrorInHTTPResponseHTTP 状态码异常(404/500 等)
40kOmahaUpdateDeferredForBackoff触发指数退避,暂缓重试
46kOmahaRequestXMLHasEntityDeclXML 含实体声明(防 XXE 攻击拒收)

下载 & Payload 元数据校验阶段

枚举名中文说明
9kDownloadTransferError下载传输失败(网络中断/超时)
12kDownloadPayloadVerificationErrorPayload 整体签名校验失败
14kDownloadWriteError写入分区失败(磁盘 IO 错误)
20kDownloadStateInitializationError下载状态初始化失败
21kDownloadInvalidMetadataMagicStringMetadata Magic 字符串不匹配(offset 错误常见)
22kDownloadSignatureMissingInManifestManifest 中缺少签名声明
23kDownloadManifestParseErrorManifest 解析失败
24kDownloadMetadataSignatureErrorMetadata 签名格式错误
25kDownloadMetadataSignatureVerificationErrorMetadata 签名验签失败
26kDownloadMetadataSignatureMismatchMetadata 签名不匹配
27kDownloadOperationHashVerificationError单条操作 Hash 校验异常
28kDownloadOperationExecutionError差分操作执行出错(bsdiff/imgpatch 失败)
29kDownloadOperationHashMismatch操作数据 Hash 不匹配
32kDownloadInvalidMetadataSizeMetadata 大小与声明不一致
33kDownloadInvalidMetadataSignatureMetadata 签名非法
38kDownloadOperationHashMissingError操作缺少 Hash(无法校验完整性)
39kDownloadMetadataSignatureMissingErrorMetadata 缺少签名

安装 & Post-install 阶段

枚举名中文说明
4kFilesystemCopierError文件系统拷贝错误(预留/兼容)
5kPostinstallRunnerErrorPost-install 脚本执行失败
6kPayloadMismatchedTypePayload 类型不支持(如全量/增量不匹配)
7kInstallDeviceOpenError安装分区设备打开失败
8kKernelDeviceOpenErrorKernel 分区设备打开失败
10kPayloadHashMismatchErrorPayload Hash 不匹配
11kPayloadSizeMismatchErrorPayload 大小不匹配
13kDownloadNewPartitionInfoError新分区信息读取失败
15kNewRootfsVerificationError新 RootFS 校验失败
16kNewKernelVerificationError新 Kernel 校验失败
17kSignedDeltaPayloadExpectedError期望签名增量包但未提供
18kDownloadPayloadPubKeyVerificationErrorPayload 公钥校验失败
41kPostinstallPowerwashErrorPost-install Powerwash(恢复出厂)失败
42kUpdateCanceledByChannelChange切换更新通道导致更新取消
43kPostinstallFirmwareRONotUpdatableRO Firmware 不可更新
44kUnsupportedMajorPayloadVersionPayload 主版本号不被支持
45kUnsupportedMinorPayloadVersionPayload 次版本号不被支持
47kFilesystemVerifierError文件系统校验器报错

用户交互 & 特殊状态

枚举名中文说明
48kUserCanceled用户手动取消更新
49kNonCriticalUpdateInOOBEOOBE 初始化阶段忽略非关键更新
50kOmahaUpdateIgnoredOverCellular蜂窝网络下忽略大体积 OTA(需 Wi-Fi)
51kPayloadTimestampErrorPayload 时间戳早于当前系统(防降级)
52kUpdatedButNotActive写入成功但未激活新 Slot(A/B 切换失败)
53kNoUpdate服务器返回无可用的新版本
54kRollbackNotPossible不允许回滚到旧版本
60kNotEnoughSpace存储空间不足
61kDeviceCorrupted设备分区损坏,禁止继续更新
62kPackageExcludedFromUpdate指定包被排除在更新外

常见排错速查

  • 错误 51 (kPayloadTimestampError):设备当前分区时间戳 > Payload 中 max_timestamp,通常是刷了较新 vendor 后试图刷旧版本 OTA,或 SPL 日期倒退。检查 build.propro.build.date.utc 与 Payload manifest。3
  • 错误 32 (kDownloadInvalidMetadataSize):调用 applyPayload 时传的 METADATA_SIZE 与包内实际大小不一致,常见于 offset/size 填错。4
  • 错误 47 (kFilesystemVerifierError):post-install 校验新系统分区 hash 失败,多见于损坏的 OTA 包或闪存坏块。
  • 错误 60 (kNotEnoughSpace):A/B 设备虽有两个 Slot,但仍需临时空间解压,建议保留 ≥ 预留大小 + payload 解压空间。
> 💡 调试时可通过 `adb logcat | grep update_engine` 或查看 `/data/misc/update_engine_log/` 下日志获取具体报错行号辅助定位。

Java 层对应常量

// android.os.UpdateEngine.ErrorCodeConstants
public static final int SUCCESS = 0;
public static final int ERROR = 1;
public static final int PAYLOAD_TIMESTAMP_ERROR = 51;
public static final int UPDATED_BUT_NOT_ACTIVE = 52;
public static final int NOT_ENOUGH_SPACE = 60;
public static final int DEVICE_CORRUPTED = 61;

参考文章

AI (千问元宝)

相关文章

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

暂无评论

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

none
暂无评论...