Android Update Engine 分析(二十二)OTA 降级限制之 timestamp

本文详细分析了Android OTA更新时出现的max_timestamp错误,探讨了错误原因、解决方法,以及max_timestamp在升级流程中的作用。max_timestamp用于防止系统降级,确保更新的安全性。内容涵盖了max_timestamp的来源、处理流程,以及如何转换为UTC时间,同时提供了思考题以深化理解。

0. 导读

在我的 OTA 讨论群以及 VIP 答疑群里每隔一段时间就会有人问关于 OTA 降级,以及升级时检查 max_timestamp 失败的问题。我觉得有必要把这个问题总结一下。因此,本篇详细分析 OTA 升级时检查 max_timestamp 失败的原因,以及 max_timestamp 的整个处理流程。

本文主要分成 5 个部分:

  • 如果你只对检查 max_timestamp 失败的原因以及解决办法感兴趣,请跳转到第 1 节;
  • 如果你对 Android 引入 max_timestamp 的历史感兴趣,请跳转到第 2 节;
  • 如果你想了解整个 max_timestamp 的处理流传流程,请跳转到第 3 节查看一步一步详细的代码分析;
  • 如果你觉得第 3 节太啰嗦,请跳转到第 4 节查看 max_timestamp 操作流程总结;
  • 如果你想知道如何将 timestamp 转换成有意义的时间,请跳转到第 5 节;
  • 如果你想挑战一下自己,不妨看看第 6 节的几个思考题;

本文为洛奇看世界(guyongqiangx)原创,转载请注明出处。
原文链接:https://blog.youkuaiyun.com/guyongqiangx/article/details/133191750

本文基于 android-13.0.0_r3 代码进行分析,在线代码阅读请参考:http://aospxref.com/android-13.0.

Android Update Engine(AUE)是 Android 系统中负责处理空中升级(OTA)的核心组件,其更新机制涉及多个模块和版本迭代。在 Android Update Engine分析中,问题 7 或版本 7 的更新内容通常与升级过程中的元数据解析和验证机制有关。 在早期版本中,Update Engine 主要依赖于二进制格式的元数据来描述升级的内容,括分区的差分数据、哈希值、大小等信息。然而,随着系统复杂度的增加,特别是 A/B(无缝)升级机制和动态分区的引入,对元数据结构的灵活性和可扩展性提出了更高要求。 在问题 7 或版本 7 的更新中,Update Engine 引入了更高效的元数据格式和验证机制。具体而言,元数据结构被进一步优化,以支持动态分区和虚拟 A/B 分区的特性。升级中的元数据不仅含传统分区的信息,还支持逻辑分区的描述,括逻辑分区的名称、大小、内容哈希等信息。这种改进使得系统在升级过程中可以更灵活地管理分区结构的变化,例如新增分区、调整分区大小等[^2]。 此外,为了提高升级过程的安全性,问题 7 还引入了更强的签名验证机制。Update Engine 在解析元数据时会验证其签名,以确保升级的完整性和来源可信。这一机制基于公钥加密技术,通过设备端的公钥验证升级的签名,防止恶意篡改和非法升级。 在实现层面,Update Engine 的元数据解析模块负责读取并解析升级中的元数据,并将其转换为内部数据结构以供后续操作使用。该模块在版本 7 中进行了重构,以支持更复杂的元数据格式。例如,引入了新的数据结构来表示逻辑分区及其依赖关系,并优化了元数据的存储和读取效率。 以下是一个简化的伪代码示例,展示了元数据解析模块在处理逻辑分区信息时的流程: ```cpp struct PartitionMetadata { std::string name; // 分区名称 uint64_t size; // 分区大小 std::string hash; // 分区内容哈希 }; class MetadataParser { public: bool Parse(const std::vector<uint8_t>& data, std::vector<PartitionMetadata>& partitions) { // 解析元数据 // 验证签名 // 提取逻辑分区信息 return true; } }; ``` 上述代码展示了如何解析升级中的元数据并提取逻辑分区信息。通过这一机制,Update Engine 能够支持更复杂的升级场景,例如动态分区调整和新增分区。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛奇看世界

一分也是爱~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值