Android14 OTA差分包升级报kPayloadTimestampError (51)

ops/2025/3/6 9:28:49/

由于VF 架构, 所以镜像的打包时间可能存在偏差, 如 boot.img 和 客制化的一些镜像打包 可能会在 vendor 侧进行打包。
而 与system 侧进行merge 时,时间戳比较乱,为了解决这个问题,让时间戳进行统一。

使用adb方式验证

  • 进入recovery模式
adb reboot recovery
  • 稍等一会界面会提示
Now send the package you want to apply 
to the device with "adb sidelaod <filename>"...
  • 输入命令开始升级
adb sideload Z:\xxx\xxx\ota\update.zip

update.zip是制作好的差分包

报ErrorCode::kPayloadTimestampError (51)

[   41.140193] update_engine_sideload E 11-29 07:06:04   361   361 [ERROR:delta_performer.cc(1170)] The current OS build timestamp (1732851959) is newer than the maximum timestamp in the manifest (1732851610)
[   41.140394] update_engine_sideload E 11-29 07:06:04   361   361 [ERROR:download_action.cc(222)] Error ErrorCode::kPayloadTimestampError (51) in DeltaPerformer's Write method when processing the received payload -- Terminating processing
[   41.140478] update_engine_sideload I 11-29 07:06:04   361   361 [INFO:delta_performer.cc(217)] Discarding 210485 unused downloaded bytes
[   41.153646] update_engine_sideload I 11-29 07:06:04   361   361 [INFO:multi_range_http_fetcher.cc(177)] Received transfer terminated.
[   41.153736] update_engine_sideload I 11-29 07:06:04   361   361 [INFO:multi_range_http_fetcher.cc(129)] TransferEnded w/ code 200
[   41.153787] update_engine_sideload I 11-29 07:06:04   361   361 [INFO:multi_range_http_fetcher.cc(131)] Terminating.
[   41.153866] update_engine_sideload I 11-29 07:06:04   361   361 [INFO:action_processor.cc(116)] ActionProcessor: finished DownloadAction with code ErrorCode::kPayloadTimestampError
[   41.153917] update_engine_sideload I 11-29 07:06:04   361   361 [INFO:action_processor.cc(121)] ActionProcessor: Aborting processing due to failure.
[   41.153994] update_engine_sideload I 11-29 07:06:04   361   361 [INFO:update_attempter_android.cc(548)] Processing Done.

由于 打包时间 差异,所以导致 时间戳 比较乱。

解决办法

提取 目标版本 和源版本 的镜像中的 时间戳。
按时间戳 大的 (最后编译)进行打包到 ota 升级包中

  • /vendor_ap_s0/build/make/tools/releasetools/ota_utils.py
 target_boot_timestamp = 0source_boot_timestamp = 0
+  target_system_timestamp = 0
+  source_system_timestamp = 0if target_info:partition_prop = target_info.get("boot.build.prop")if partition_prop:boot_timestamp = partition_prop.GetProp("ro.bootimage.build.date.utc")if boot_timestamp:target_boot_timestamp = int(boot_timestamp)
+    partition_prop = target_info.get("system.build.prop")
+    if partition_prop:
+      system_timestamp = partition_prop.GetProp("ro.system.build.date.utc")
+      if system_timestamp:
+        target_system_timestamp = int(system_timestamp)    if source_info:partition_prop = source_info.get("boot.build.prop")if partition_prop:boot_timestamp = partition_prop.GetProp("ro.bootimage.build.date.utc")if boot_timestamp:source_boot_timestamp = int(boot_timestamp)
-  target_max_timestamp = max(target_boot_timestamp, source_boot_timestamp)
-  source_max_timestamp = source_boot_timestamp
+    partition_prop = source_info.get("system.build.prop")
+    if partition_prop:
+      system_timestamp = partition_prop.GetProp("ro.system.build.date.utc")
+      if system_timestamp:
+        source_system_timestamp = int(system_timestamp)    
+  target_max_timestamp = max(target_boot_timestamp, source_boot_timestamp, target_system_timestamp,
+    source_system_timestamp)
+  source_max_timestamp = max(source_boot_timestamp, source_system_timestamp)for partition in PARTITIONS_WITH_BUILD_PROP:partition_prop_key = "{}.build.prop".format(partition)if partition == "boot":

boot.img 编译时间ro.bootimage.build.date.utc
system 编译时间ro.system.build.date.utc

比较哪个数值越大,就表明版本后面编译的时间来决定。


http://www.ppmy.cn/ops/163560.html

相关文章

火语言RPA--删除PDF页

【组件功能】&#xff1a;删除PDF指定页文档 配置预览 配置说明 文件路径 支持T或# 默认FLOW输入项 待删除PDF页的PDF文件完整路径。 删除页码 支持T或# 要删除的页面&#xff0c;多个用逗号分隔&#xff0c;连续删除多页用“-”连接起始结尾&#xff0c;例如&#xff1a;…

Python数据可视化——Matplotlib的基本概念和使用

Matplotlib是Python中最常用的绘图和数据可视化库之一&#xff0c;能够帮助我们将数据以图表的形式展示出来&#xff0c;使数据的规律和趋势更加直观。无论是在科学计算、工程分析&#xff0c;还是商业报告和机器学习领域&#xff0c;Matplotlib都能发挥重要作用。 Matplotlib…

服务器内存

1、cpu对内存的支持 有两个内存控制器&#xff08;IMC&#xff0c;Integrate Memory Controller&#xff09;。 每个内存控制器上都有一个 DDR PHY。DDR PHY 是连接 DDR 内存条和内存控制器的桥梁。它负在内存控制器和内存条之间做协议信号的转换。 每个 DDR PHY 有 3 个 chann…

[数据结构]设计循环队列

思路展示&#xff1a; 代码实现&#xff1a; typedef struct {int *a;int front;int rear;int k; } MyCircularQueue;bool myCircularQueueIsEmpty(MyCircularQueue* obj);bool myCircularQueueIsFull(MyCircularQueue* obj); MyCircularQueue* myCircularQueueCreate(int k) …

Adam优化器

目录 1. 核心思想 2. 数学原理 ​维护变量 ​参数更新规则 ​3. Adam 的关键改进 ​4. 优点 ​5. 缺点 ​6. 与其他优化器的对比 7. 实际应用场景 Adam&#xff08;Adaptive Moment Estimation&#xff09;​​ 是一种结合 ​动量&#xff08;Momentum&#xff09;​​…

Web Snapshot 网页截图 模块代码详解

本文将详细解析 Web Snapshot 模块的实现原理和关键代码。这个模块主要用于捕获网页完整截图&#xff0c;特别优化了对动态加载内容的处理。 1. 模块概述 snapshot.py 是一个功能完整的网页截图工具&#xff0c;它使用 Selenium 和 Chrome WebDriver 来模拟真实浏览器行为&am…

七、Redis 内存管理详解:模型、优化策略(LRU/LFU、对象共享)

Redis 内存管理详解:模型、优化策略(LRU/LFU、对象共享) Redis 以高性能和低延迟著称,但作为基于内存的数据库,内存管理是其核心问题之一。本文将深入解析 Redis 的内存模型、内存优化策略(包括 LRU/LFU 机制、对象共享等),帮助开发者提高 Redis 的存储效率和性能。 1…

本地部署pangolin获取谱系,从而达到预测新冠的流行趋势

步骤 1&#xff1a;安装Docker 注&#xff1a;此步骤忽略&#xff0c;可通过Docker官网对于文档进行安装,地址如下 Docker: Accelerated Container Application Developmenthttps://www.docker.com/ 步骤 2&#xff1a;拉取Pangolin镜像 docker pull staphb/pangolin:latest 步…