OTA打包工具

在build/tools/releasetools文件夹中提供的 ota_from_target_files工具可以构建两种包:全镜像包和增量包.这些工作把Android构建系统提供的目标文件.zip文件作为他们的输入.

全更新

全更新就是把编译后设备的所有的状态(system,boot和recovery分区)都被包含到包里.只要设备能够接受更新包并且启动recovery系统,不管当前设备的状态是什么样的,包就能够安装整个系统.

例子:使用release工具为假设的tardis设备构建一个完整的更新包:

# 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

目标文件.zip包含你需要的构建OTA包的所有东西.

% ./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

ota_update.zip现在已经可以用于测试设备了.对于用户设备来说,要生成和使用你自己的密钥.(后面介绍)

增量更新

一个增量更新包含着要应用到设备中已存在的数据的补丁.这会使得更新包比较小:

  • 没有被改变的文件不必包含在更新包中
  • 被改变的文件如果和之前版本比较相似的话,更新包仅仅需要包含两个文件不同部分的编码即可.
  • 你仅仅可以在使用之前版本构建的设备上安装增量更新包.为了构建一个增量更新包,你需要来自上一个版本的目标文件.zip和新要构建的目标文件.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

这次构建和上一个非常相似,增量更新包比相应的全更新包要小的多.

注意:为了为后续的更新包生成基于块的OTA,向ota_from_target_files中传递–block选项.

仅仅向运行相同的上一个版本包的设备发行增量包才能正常运行.如果在运行其他构建版本的设备中尝试安装增量包的花就会导致在recovery模式中的错误.在这个时候重启设备就会返回用户之前的系统;在创建他们的时候,更新包验证所有文件的之前的状态,如果发生这种情况,该设备不会留在半升级状态。

更新包

一个更新包(ota_update.zip,incremental_ota_update.zip)是一个.zip文件,他包含可执行二进制文件META-INF/com/google/android/update-binary.在验证完成更新包的签名之后,recovery将这个二进制文件提取到/tmp目录下并运行该程序,同时,将下面的参数传递过去:

  • 更新二进制API版本号.如果传递到更新二进制的参数改变了,这个号就会被增加
  • 命令管道的文件描述符.更新程序可以使用这个管道来想recovery二进制发送命令(大多数都是UI改变,例如更新进度条等)
  • 更新包.zip文件的文件名

    一个recovery包可以使用任何静态链接的二进制文件作为更新二进制包.OTA包构建工具使用updater程序(源码位于bootable/recovery/updater),该文件提供了一个简单的可以做任何安装工作的脚本语言.你可以替代任何运行在设备上的其他二进制程序.

对于updater程序的细节,编写语法和内置函数,后面会有详细介绍.

posted @ 2015-11-17 10:19  陈洪波  阅读(900)  评论(0编辑  收藏  举报