android9 update_engine 升级

最近在搞android 9的升级。这里顺便做一下记录,其实关于update_engine升级这块已经有很多文章了写的都
很好,我这边只是在前人的基础上,按照自己理解记录一下,大体分为一下几部分**

1、A/B升级和过去的recover升级的区别

2、java SystemUpdater 到 c++ updateEngine

3、updateEngine的内部启动流程

4、UpdateAttempterAndroid及action机制

5、四个action的执行过程

6、U盘升级和无线升级的下载及分区写入过程

7、BootCtrl 、BootLoader、update_verifier的关系

### Android `update_engine_client` 使用教程 #### 初始化与运行 `update_engine_client` 是用于触发和管理 Android 设备上更新过程的应用程序。其工作流程始于初始化并调用特定方法来启动更新引擎客户端实例。 ```cpp int main(int argc, char** argv) { // 创建 UpdateEngineClientAndroid 实例,并传递命令行参数给它。 chromeos_update_engine::internal::UpdateEngineClientAndroid client(argc, argv); // 运行客户端逻辑,处理传入的指令并与服务端交互。 return client.Run(); } ``` 这段代码展示了应用程序入口点如何创建 `UpdateEngineClientAndroid` 对象并将控制权交给该对象以继续执行[^1]。 #### 类定义及其继承关系 为了更好地理解这个类的功能实现方式: - 继承自 `brillo::Daemon` 基础类; - 提供了必要的接口去操作底层的服务组件; 此类通过 AIDL 接口 (`IUpdateEngine`, `IUpdateEngineCallback`) 来通信和服务端进行数据交换[^3]。 #### 参数解析 当使用 `-payload-file` 和 `-headers` 参数时,这些选项允许指定待安装的有效载荷文件路径以及附加元数据头信息的位置。这有助于在本地环境中测试或调试OTA包的行为而不必实际推送至设备网络中。 对于错误码如 `ErrorCode::kDownloadInvalidMetadataSize (32)` 的情况,则表明下载过程中遇到了无效大小的元数据问题,可能是因为提供的头部信息不匹配预期格式所致[^2]。 #### 使用示例 假设要模拟一次完整的更新请求,可以按照如下方式进行命令构建: ```bash ./update_engine_client \ --command=attempt_update \ --omaha_url=https://example.com/ota/update_check \ --payload_file=/path/to/payload.bin \ --headers=/path/to/additional_headers.json ``` 此命令尝试连接到指定 URL 获取最新版本信息,并利用给出的有效负载文件完成升级动作。同时还可以附加上额外配置项以便更精确地定制化行为模式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值