当前位置: 首页 > news >正文

Android AB升级(一) - 升级各层级模块概述

Android A/B升级又称静默升级,它是一种在系统运行过程中进行的升级功能。为了减小系统运行负荷,整个升级过程会保持在一个较低的IO状态,所以升级时间比recovery升级明显要长。

1. 升级方法

当AB系统升级时,有两种方式来调用updateengine,来实现升级:

  • 一种方法是直接执行shell命令,调用update_engine_client,带参数来实现升级。界面不会显示,可通过打印日志观察进度adb logcat -s update_engine
//解压升级包
adb shell
update_engine_client --payload=file:///storage/5F49-FB9D/socupdate8g/payload.bin --update --headers="FILE_HASH=YP7Z1bFDv6O8C5LTWZ20JxTljXyoVitlCX27TBTyVDM=
FILE_SIZE=967460335
METADATA_HASH=1gpTz/Q7T1ysTu6suP8N2KVOfa+vKEdnJGnPsKcPiXw=
METADATA_SIZE=75378"
  • 另一种方式是应用层直接调用UpdateEngine的applyPayload方法来升级,主要的核心逻辑模块是update_engine

2. 原生Demo APP

原生的升级参考示例APK(以Android Q AOSP为例):packages/apps/Car/SystemUpdater

这是Android P(9)Google提供的一个Demo APK,可以用作本地U盘测试升级

启动方式:adb shell am start com.android.car.systemupdater/.SystemUpdaterActivity

该应用大概流程逻辑:

  1. 读取U盘中的升级文件,用户点击目标升级文件
  2. 调用updateEngine传递主要参数,updateEngine的callback向用户显示升级升级进度
  3. 在升级结束之后通知powermanager重启reboot机器

3. 应用层API相关接口说明

3.1. framwork层应用接口

源代码位置:

  • framwork/base/core/java/android/os/UpdateEngine.java
  • framwork/base/core/java/android/os/UpdateEngineCallback.java

3.2. APP应用调取升级接口applyUpdate流程

(需要系统权限的App,需要系统签名,这些Api也是@SystemApi的)

  1. 创建UpdateEngineCallback的对象mUpdateEngineCallback
  2. 创建UpdateEngine的对象mUpdateEngine, 创建后服务开启
  3. 使用mUpdateEngine.bind(mUpdateEngineCallback),因为bind方法时接受的callback对象,而我们创建的类继承了callback,传入当前类的对象即可
  4. 调用applyPayload(String url,long offset,long size,String[] headerKeyValuePairs)方法具体执行升级
  5. 在重写的onStatusUpdate(int status, float percent)方法中根据拿到的状态执行进度逻辑
  6. 在重写的onPayloadApplicationComplete(int errorCode)方法中执行升级完成后的逻辑

4. update_engine模块概述

update_engine是A/B升级的核心逻辑,用于执行下载和升级,路径:android/system/update_engine/

update_engine_client:update_engine_client是客户端进程,用来解析命令行的各种操作(suspend/resume/cancel/reset_status/follow/update),并将这些操作和参数通过binder机制,转发为对服务端进程UpdateEngineService相应操作的调用

4.1. update engine核心Action流程

update_engine升级会依次执行四个升级动作:InstallAction,DownloadAction,FilesystemVerfierAction,PostinstallRunnerAction

启动DownloadAction和PostinstallRunnerAction耗时最长

  1. DownloadAction是执行具体的升级拷贝动作,将镜像文件中的内容拷贝到指定分区,这一步的时间不容易缩减。

  2. PostinstallRunnerAction是根据post install script进行预编译工作,将target_slot标记为active。

在device.mk配置是:

#调试工具
PRODUCT_PACKAGES_DEBUG += \update_engine_client# A/B OTA dexopt package升级脚本
PRODUCT_PACKAGES += otapreopt_script#将这部分注释掉,可以减少PostinstallRunnerAction步骤的耗时(需谨慎修改)
# A/B OTA dexopt update_engine hookup
AB_OTA_POSTINSTALL_CONFIG += \RUN_POSTINSTALL_system=true \POSTINSTALL_PATH_system=system/bin/otapreopt_script \FILESYSTEM_TYPE_system=ext4 \POSTINSTALL_OPTIONAL_system=true
http://www.dtcms.com/a/606795.html

相关文章:

  • 沈阳网站开发培训价格冬奥会建设官方网站
  • 365科技简报 2025年11月13日 星期四
  • 医院做网站怎么就违规了论文格式样板模板
  • 建设不动产网站工业设计专业是干什么的
  • Redis 常见八股(不定期更新)
  • 做网站用什么网名好什么是最经典最常用的网站推广方式
  • 网站优化的基本思想网架公司赵娜
  • 哪里有做网站app的支部建设杂志官方网站
  • 选型指南:电流检测芯片 TI INA139 VS FP137 详解 如何根据关键参数选择?
  • module ‘torch.compiler‘ has no attribute ‘is_compiling‘
  • c 网站开发教程海城建设网站
  • 揭阳网站推广教程网站刷链接怎么做
  • C语言编程实战:每日刷题 - day2
  • 大模型运维
  • 今科网站建设费用职业生涯规划书模板
  • 第三方网站备案做男女的那个视频网站
  • 可信数据空间通用架构图全解:打破数据孤岛,实现安全互信
  • 对于位姿的理解
  • 【git】--远程Git仓库的名称发生更改
  • 建筑网站设置工资单人换了怎么换手游推广渠道平台
  • Unity 的URP渲染模式下,灯光只影响个别物体
  • 四合一网站郑州seo技术
  • 脚本语言与编译语言的区别与应用 | 深入探讨两者的特点与适用场景
  • 深度学习_神经网络激活函数
  • js 原型链分析
  • 深圳网站订制开发qq做我女朋友好吗网站
  • 好用的土木建筑网站uni做网站首页
  • C语言变量与内存深度解析
  • Cesium 大数据量优化加载方案
  • 网站卖东西怎么做粉丝帮女流做的网站