简介

主要是从一个输入的中间压缩包,生成OTA升级包

1
2
3
4
5
6
7
./build/tools/releasetools/ota_from_target_files
Given a target-files zipfile, produces an OTA package that installs
that build. An incremental OTA is produced if -i is given, otherwise
a full OTA is produced.
Usage: ota_from_target_files [flags] input_target_files output_ota_package

常用的参数:

1
2
3
4
5
6
7
8
-k 指定签名文件,默认为"build/target/product/security/testkey"
-i 指定源文件
-p 指定编译主机可执行文件路径
-v 冗余信息打印
-w 清除用户数据
-e 定义额外运行的脚本
-m 定义采用的脚本格式,目前有两种,amend & edify, 其中amend为较老的格式。
-s 定义额外运行的脚本的路径

源码分析

入口:main

按照python惯例,单独执行的代码执行从main开始:

  1. 将用户设定的 Option 存入 OPTIONS 变量中。
  2. 解开输入包
  3. 设定输出文件,如果要签名(our case),则还需要一个临时输出文件。
  4. 根据参数,调用全量包或差分包创建 ZIP 创建函数。
  5. WriteFullOTAPackage 全量包生成

主要函数 WriteFullOTAPackage

  1. 获得脚本生成器,他们的实现见脚本 edify_generator.py 等
  2. 获得一些环境变量,来自android 环境变量。
  3. 创建连接
  4. MakeRecoveryPatch : 在输出 ZIP包中生成一个patch
  5. 在输出 ZIP包中生成一个脚本:recovery/etc/install-recovery.sh , 它最后会位于system/etc/install-recovery.sh
  6. 设置 system 目录下文件的权限及属主等。
  7. script.WriteRawImage(“boot”, “boot.img”) 在脚本中增加语句,将 boot.img 写到 boot 分区。
  8. 将前面生成的脚本输出到:META-INF/com/google/android/updater-script (对于edify)