【android系统】android系统升级流程分析(二)---update升级包分析

接下来我们将通过几篇文章来分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理。今天让我先来分析下升级包update.zip。

一、目录结构

update.zip包的目录结构,如下图所示:

二、目录结构分析

下面分析以全量包升级为准。

1、META文件夹

bootargs.txt    bootargs启动参数

filesystem_config.txt    system目录文件权限

recovery.fstab    分区表

2、META-INF目录

目录结构如下:|---META-INF/
       `|CERT.RSA
       `|CERT.SF
       `|MANIFEST.MF
       `|----com/
              `|----android/
                      `|----metadata
              `|----google/
                      `|----android/
                             `|----update-binary
                             `|----updater-script
CERT.RSA:与签名文件相关联的签名程序块文件,它存储了用于签名JAR文件的公共签名。

CERT.SF:这是JAR文件的签名文件,其中前缀CERT代表签名者。

MANIFEST.MF:这个manifest文件定义了与包的组成结构相关的数据。类似Android应用的mainfest.xml文件。

metadata文件:是描述设备信息及环境变量的元数据。主要包括一些编译选项,签名公钥,时间戳以及设备型号等。

updater-script:此文件是一个脚本文件,具体描述了更新过程。我们可以根据具体情况编写该脚本来适应我们的具体需求。

update-binary:是一个二进制文件,相当于一个脚本解释器,能够识别updater-script中描述的操作。

文件怎么来的:

1、CERT.RSA、CERT.SF、MANIFEST.MF、metadata文件是自动生成的(怎么生成详见下文签名部分)

2、update-binary一般是系统编译过程中自动生成的升级脚本,但是这部分是可以通过手动编辑(详见后文update-binary脚本语言详解)

3、update-binary在sdk中哪个部分

./device/hisilicon/bigfish/build/emmc.mk
cp -a $(PRODUCT_OUT)/system/bin/updater $(EMMC_PRODUCT_OUT)/update/file/META-INF/com/google/android/update-binary

又上面脚本部分可知update-binary其实就是updater,updater部分是通过源码编译生成的,源码路径在:

bootable/recovery/updater/

3、system目录

system/目录的内容在升级后会放在系统的system分区。主要用来更新系统的一些应用或则应用会用到的一些库等等。

有的时候会以打包的形式(system.img)存在。

4、userdata目录

userdata目录,用来更新系统中的用户数据部分。这部分内容在更新后会存放在系统的/data目录下。

有的时候会以打包的形式(userdata.img)存在。

5、其他文件

*.img是更新各个分区分区所需要的文件。

三、如何制作一个update升级包

update升级包一般有两种方式得到:

  • 一种是通过编译系统得到update.zip包(make ota-package)
  • 另一种是通过自己手动创建的方式得到update升级包

这里我们主要介绍下如何通过自己手动创建的方式得到update升级包

1、创建文件夹并拷贝你需要的升级文件

可以将原有的升级包中的升级文件解压拷贝过来,再替换你需要的文件,比如在system中添加一个apk或者修改写升级脚本updater-script。

2、打包

将你需要的升级文件导入进来后,通过压缩打包成update.zip包

接下来就是最重要的一步,进行update包签名。

3、update包签名

      update.zip包的签名:update.zip更新包在制作完成后需要对其签名,否则在升级时会出现认证失败的错误提示。而且签名要使用和目标板一致的加密公钥。加密公钥及加密需要的三个文件在Android源码编译后生成的具体路径为:
               out/host/linux-x86/framework/signapk.jar 
               build/target/product/security/testkey.x509.pem         
               build/target/product/security/testkey.pk8 。
      我们用命令make 制作生成的update.zip包是已签过名的,如果自己做update.zip包时必须手动对其签名。具体的加密方法:

      java –jar yourpath/signapk.jar –w yourpath/testkey.x509.pem yourpath/testkey.pk8 update.zip update_signed.zip
      以上命令在update.zip包所在的路径下执行,其中signapk.jar testkey.x509.pem以及testkey.pk8文件的引用使用你自己(yourpath替换你的)绝对路径。update.zip 是我们已经打好的包,update_signed.zip包是命令执行完生成的已经签过名的包。

另外,在具体升级时,对update.zip包检查时大致会分三步:

①检验SF文件与RSA文件是否匹配。
②检验MANIFEST.MF与签名文件中的digest是否一致。
③检验包中的文件与MANIFEST中所描述的是否一致。

结束语

以上就是对update.zip的分析,希望对大家有所帮助。后续我们还会带来系统升级流程相关知识点的介绍,感兴趣的同学可以关注我们的微信公众号。

å¨è¿éæå¥å¾çæè¿°

上一篇:【android系统】android系统升级流程分析(一)---android升级流程分析
下一篇:【android系统】android系统升级流程分析(三)---updater-script语法(文尾含实例分析)

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值