OTA Update官方文档(二,OTA 打包工具)

写在前面:

OTA打包工具ota_from_target_files(build/tools/releasetools/目录下)可以为我们创建两种类型的更新包:整包和增量包。打包工具一般来说会对我们称之为目标文件(target-files.zip)进行打包,该目标文件是有Android编译系统产生,通常可在终端下使用make otapackage生成。

一、整包升级

一个整包包含了Android设备的整个终态(system/boot/recovery分区),只要设备可以接收更新包并且进入recovery系统,就可以安装更新包而无需考虑设备当前状态。那么如何创建一个整包呢?

下面我们使用发布的打包工具来创建一个整包。

1.创建target-files.zip

% . build/envsetup.sh && lunch tardis-eng

% mkdir dist_output

% make dist DIST_DIR=dist_output

[...]

% ls -l dist_output/*target_files*

-rw-r----- 1 user eng  69965275 Sep 29 15:51 tardis-target_files.zip

2.创建整包

% ./build/tools/releasetools/ota_from_target_files \

dist_output/tardis-target_files.zip ota_update.zip

unzipping target target-files...

done.

% ls -l ota_update.zip

-rw-r----- 1 user eng 62236561 Sep 29 15:58 ota_update.zip

注!如果你看到的编译命令与工作中不一致,是由于不同平台(MTK、高通等)进行进一步封装,这里的文档只是做个参考。

二、增量升级

一个增量包包含了一系列相对于现有设备的二进制补丁,增量包相对来说比较小。因为如果文件没有发生变化就不会有内容包含在更新包中,如果文件文件相对于前一个版本改变很小,那么增量包中仅仅是包含两个文件不同的内容。

那么制作增量包就需要old版本的target_files.zip和new版本的target_files.zip。参考命令如下:

% ./build/tools/releasetools/ota_from_target_files \

-i PREVIOUS-tardis-target_files.zip \  # make incremental from this older version

dist_output/tardis-target_files.zip incremental_ota_update.zip

unzipping target target-files...

unzipping source target-files...

[...]

done.

% ls -l incremental_ota_update.zip

-rw-r----- 1 user eng 1175314 Sep 29 16:10 incremental_ota_update.zip

进行增量升级的时候必须保证设备中当前运行的版本与增量包old target_files.zip的版本保持一致。否则会安装中断。因此应在更新包安装前进行校验。

三、更新包

更新包是.zip格式的压缩包(ota_update.zip,incremental_ota_update.zip),它包含了可执行的二进制文件(META-INF/com/google/android/update-binary).在对更新包进行签名验证之后,recovery会通过下面的参水对将其提取到/tmp下并且执行它。

Update binaly API version number.二进制文件会通过这个参数增大它的值。

File descriptor of the command pipe.更新程序可以使用这个通道发送指令给recovery binary。

Filename of the update package .zip file.

原文如下:

The ota_from_target_files tool provided in build/tools/releasetoolscan
build two types of package: full and incremental. The tool takes thetarget-files .zip file produced by the Android build system as input.

Full updates



full update is one where the entire final state of the device (system, boot, and recovery partitions) is contained in the package. As long as the device is capable of receiving the package and booting the recovery system, the package can install
the desired build regardless of the current state of the device.

Example: Using the release tools to build a full update for the hypothetical tardis device:

# first, build the target-files .zip
% . build/envsetup.sh && lunch tardis-eng
% mkdir dist_output
% make dist DIST_DIR=dist_output
  [...]
% ls -l dist_output/*target_files*
-rw-r----- 1 user eng  69965275 Sep 29 15:51 tardis-target_files.zip

The target-files .zip contains everything needed to construct OTA packages.

% ./build/tools/releasetools/ota_from_target_files \
    dist_output/tardis-target_files.zip ota_update.zip
unzipping target target-files...
done.
% ls -l ota_update.zip
-rw-r----- 1 user eng 62236561 Sep 29 15:58 ota_update.zip

The ota_update.zip is now ready to be sent to test devices (everything is signed with the test key). For user devices, generate and use your own private keys as detailed in Signing
builds for release
.

Incremental updates



An incremental update contains a set of binary patches to be applied to the data already on the device. This can result in considerably smaller update packages:

  • Files that have not changed don‘t need to be included.
  • Files that have changed are often very similar to their previous versions, so the package need only contain an encoding of the differences between the two files.

You can install the incremental update package only on a device that has the old or source build used when constructing the package. To build an incremental update, you need the target_files .zip from the previous build (the one you want to update from)
as well as the target_files .zip from the new build.

% ./build/tools/releasetools/ota_from_target_files \
    -i PREVIOUS-tardis-target_files.zip \  # make incremental from this older version
    dist_output/tardis-target_files.zip incremental_ota_update.zip
unzipping target target-files...
unzipping source target-files...
   [...]
done.
% ls -l incremental_ota_update.zip
-rw-r----- 1 user eng 1175314 Sep 29 16:10 incremental_ota_update.zip

This build is very similar to the previous build, and the incremental update package is much smaller than the corresponding full update (about 1 MB instead of 60 MB).

Note: To generate a block-based OTA for subsequent updates, pass the --block option
toota_from_target_files.

Distribute an incremental package only to devices running exactly the same previous build used as the incremental package‘s starting point. Attempting to install the incremental package on a device with some other build results in the recovery error icon. Rebooting
the device at this point returns the user to the old system; the package verifies the previous state of all the files it updates before touching them, so the device should not be left in a half upgraded state if this occurs.

Update packages



An update package (ota_update.zipincremental_ota_update.zip) is a .zip file that contains the executable binary META-INF/com/google/android/update-binary.
After verifying the signature on the package, recovery extracts this binary to /tmp and runs it, passing the following arguments:

  • Update binary API version number. If the arguments passed to the update binary change, this number is incremented.
  • File descriptor of the command pipe. The update program can use this pipe to send commands back to the recovery binary (mostly for UI changes such as indicating progress to the user).
  • Filename of the update package .zip file.

A recovery package can use any statically-linked binary as the update binary. The OTA package construction tools use the updater program (source in bootable/recovery/updater), which provides
a simple scripting language that can do many installation tasks. You can substitute any other binary running on the device.

For details on the updater binary, edify syntax, and builtin functions, see Inside OTA Packages.

时间: 2024-10-28 16:31:54

OTA Update官方文档(二,OTA 打包工具)的相关文章

OTA Update官方文档(五、Recovery系统分区映射)

Recovery系统包含了很多钩子程序,因此OAT更新除了可以更新Android系统也可以更新设备的其他部分.(如基带.无线电处理器). 分区映射 从Android2.3起,平台开始支持eMMC存储设备和ext4文件系统.它同样支持MTD设备和yaffs2文件系统. 分区映射文件TARGET_RECOVERY_FSTAB一般会被recovery二进制程序和打包工具所使用,我们可以在BoardConfig.mk文件中配置映射文件的文件名为TARGET_RECOVERY_FSTAB. 下面是一个简单

Android 5.x OTA Update官方文档(十、版本签名)

在Android中,一般来说有两个地方使用加密签名. 1.每个.apk文件必须进行签名.Android的程序包管理器通过两种方式使用签名: 当一个应用程序被替换时,只有相同签名的应用才能操作旧版本的数据. 两个应用如果签名一致,那么这两个应用可以共享User ID和用户数据. 2.OTA更新包必须进行签名否则更新程序无法进行安装.(注!我们制作更新包的时候如果不指定key,系统会指定默认的key进行签名,如testkey.) 证书和秘钥 每个秘钥需要两个文件:扩展名为.x509.pem的证书(公

Android 5.x OTA Update官方文档(九、Sideloading-侧面安装机制)

写在前面: 本篇博文漏译了很多,英文功底比较好的同学可以选择阅读原版文档,如果方便请分享翻译后文档给大家,谢谢. recovery有一个侧面安装(sideloading)机制来方便我们手动的安装更新而不在使用OTA的方式.这种机制对于调试和维护是很有帮助的,特别是当我们无法正常启动我们的系统的时候. 目前来说我们,有了这种机制,我们可以在设备的SD卡中载入更新包.在没有启动设备的情况下,我们可以通过电脑将更新包拷贝到SD卡上,然后再将SD卡插入到设备中进行侧面安装.而且如果Android设备当前

Android 5.x OTA Update官方文档(八、图说Recovery UI)

写在前面: 若能直译,不会意译,意译不成,为了选择不误导他人也会漏译无伤大雅的部分,英语是硬伤,如果有误译,请路过的朋友帮忙指正,以免误导更多的朋友. RecoveryUI除了之前提到的标题.选项菜单.提示性文字还有另外的一个重要的成员图片.在正常的更新过程中,用户看到的仅仅是图片(这里指的标准的OTA升级流程,如开机进入recovery模式.安装更新时进度条发生变化,最后再开机进入正常模式),而且在这个过程,用户是没有机会与RecoveryUI进行交互的.但是一旦在更新过程中出现了异常,用户所

OTA Update官方文档(四、OTA更新包解读)

写在前面: 系统创建通过"bootable/recovery/updater"创建一个二进制更新程序并在OTA包中使用进行更新的安装. 更新包实际上也就是一个.zip格式的压缩文件(如我们之前提到过的ota_update.zip,incremental_ota_update.zip).在这个压缩包中包含了一个可执行的二进制程序-EMTA-INF/com/google/android/update-binary.这个二进制程序我们可以理解成一个升级程序,这个升级程序包含了一系列的内建函数

Android 5..x OTA Update官方文档(六、定制Recovery UI)

recovery界面 为了支持不同的硬件设备(物理按键.显示.LEDs等),我们可以定制recovery界面进行可视化显示,并进行相关的操作.那么我们可以通过继承bootable/recovery/defalust_device.cpp,并重写相关的函数来为我们的设备进行可视化定制.因此本篇博文旨在为大家介绍如何构建一个能够实现recovery界面定制的静态库.首先来了解西面这段头文件: device/yoyodyne/tardis/recovery/recovery_ui.cpp #inclu

Android 5..x OTA Update官方文档(七、构建设备)

我们通过调用recovery_ui.cpp中make_device()函数来创建一个Device的实例,如下: class TardisDevice : public Device { // ... all the above methods ... }; Device* make_device() { return new TardisDevice(); } 编译recovery_ui.cpp 再通过前一篇对recovery_ui.cpp的介绍我们来介绍一下如何为recovery_ui.cpp

OTA Updates官方文档(一,OTA 升级)

写在前面: Android设备可以接受和安装基于系统和应用的更新.在设备中有一个特殊recovery分区,在这个分区中有一套特殊的恢复系统可以将下载的更新包进行解压并应用到系统中去. 本节主要描述了更新包的组织架构,并且概述了如何使用更新包打包工具制作系统升级的更新包.OTA 的存在是用来对潜在系统的升级,或者在系统分区安装只读(不可卸载)的应用程序,因此在升级过程中不会影响到用于已经安装到系统中的 应用程序. 本节的内容主要基于Android5.x版本. 一.Android设备布局的设计 通常

ArcGIS API For JS官方文档解析教程

ArcGIS API For JavaScript(八)之Arcade ArcGIS API For JavaScript官方文档(一)之关于API ArcGIS API For JavaScript官方文档(一)之默认API配置 ArcGIS API For JavaScript官方文档(七)之编辑 ArcGIS API For Javascript官方文档(三)之从Web服务器取回数据 ArcGIS API For JavaScript官方文档(二)之默认的API字符串 ArcGIS API