用途说明:因我们开发的Android系统升级是通过网络自动升级的,没有触摸屏,需要远程控制,所以需要保证升级百分百成功,因试过如果网络推送升级包为不完整(网络差的时候丢掉一些文件)或者非法文件(没有签名),系统会进入recovery模式中,需要人为重启才能工作,这时我们就需要在进入recovery模式前判断升级包的完整性和合法性。以下就是该功能的详细讲解:
1.编译安卓verifier_test程序模块:
首先,如果自己的Android SDK编译是工程模式(eng),这里需要修改参数:cctc_0509_1080\bootable\recovery\Android.mk里的关于该工具的命令
LOCAL_MODULE_TAGS := tests 这里我们改成以下:
LOCAL_MODULE_TAGS := eng
user: 指该模块只在user版本下才编译
eng: 指该模块只在eng版本下才编译
tests: 指该模块只在tests版本下才编译
optional:指该模块在所有版本下都编译
在根目录下执行: . build.sh 编译整个SDK
进入cctc_0509_1080\bootable\recovery\ 下执行mm(单步编译,mm命令需要在上面执行编译整个SDK后才能工作)
Ok,在cctc_0509_1080\out\target\product\macallan\symbols\system\bin中生成该工具。
2.工具使用方法:
verifier_test是验证工具,使用的是base64+md5编码验证,它需要用到系统中的keys,位于cctc_0509_1080\out\target\product\macallan\recovery\root\res\keys
Android中MANIFEST.MF的SHA1-Digest 编码数字也是通过该keys生成的。
Keys是安卓系统中recovery模式加密工具,和signapk.jar testkey.x509.pem testkey.pk8 三个工具是配套的。
执行命令:
./verifier_test -file keys update.zip
在shell脚本中使用命令:
./verifier_test -file $KEYS $LOCAL_UPDATE_FILE
if [ "$?" = "0" ] ;then
echo ok
exit 0
fi
如果返回值等于0的话,说明update.zip升级包是合法的,包括已经签名和完整的包。
安卓的升级包必须是需要经过签名的,该工具就是验证签名的,工具需要用到对于系统的keys,通过SHA256算法计算升级包是否通过。
通过verifier_test工具可以检验安卓升级包的完整性和合法性(是否签名)。