【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中描述的操作。
3、system目录
system/目录的内容在升级后会放在系统的system分区。主要用来更新系统的一些应用或则应用会用到的一些库等等。
4、userdata目录
userdata目录,用来更新系统中的用户数据部分。这部分内容在更新后会存放在系统的/data目录下。
5、其他文件
*.img是更新各个分区分区所需要的文件。
external-script 动态链接库文件表
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的分析,希望对大家有所帮助。后续我们还会带来系统升级流程的介绍,感兴趣的同学可以关注我们的微信公众号。