Android 升级包的制作

    前段时间做了一个Android 的升级包,总结一下制作升级包的过程。

    先说明下升级包的作用吧,第一,当然是可以将新的功能添加到原来的版本上; 还有就是一种算是可选配置,例如 Google 的GMS(Google Mobile Service)包,因为并不是所有的版本都带有GMS服务,所以把GMS做成升级包提供给需要的客户。

    升级的时候,把升级包放到sd卡上,按住特殊的键开机进入recovery 模式,选择从SD卡升级,选择升级包就可以了。

    先来看一下一个完整的升级包的目录结构:

    


    主要有两部分,一部分是update-binary和updater-script , 另一部分是用于更新的文件。(CERT.RSA ,CERT.SF和 MANIFEST.MF是签名是产生的文件,不用管它)

    下面来制作升级包:

    1. 准备好升级的文件,如上图所示,建一个system 目录和一个META-INF/com/google/android/目录,然后按照更新后所在的位置建立目录结构。

    2. 准备update-binary 文件,这个文件是从 bootable/recovery/updater/编译出的,编译成out/target/product/xxxxxx/system/bin/updater  文件,把此文件拷贝过来命名成update-binary. 文件名“update-binary” 是在bootable/recovery/install.c中定义的,recovery 会执行这个文件完成升级。

    3.准备updater-script 文件,这是个文本文件,文件里写的是升级的命令, update-binary 执行时会解析这个文件,执行升级的命令。文件名"updater-script" 是在 bootable/recovery/updater/updater.c 中定义的。命令的格式在bootable/recovery/updater/install.c中有定义。

    一般的升级三个命令就够了:(1) mount system to /system. (2) extract system in zipfile to /system.  (3) unmount system.  (mount 命令会根据文件系统格式的不同有所不同)。

    4.打包 :zip -r update.zip system META-INF .

    5.签名:java –jar signapk.jar -w testkey.x509.pem  testkey.pk8 update.zip  update_signed.zip

    signapk.jar  out/host/linux-x86/framework/  目录下

    testkey.x509.pem  testkey.pk8 在 build/target/product/security/ 目录下


6.你可能会遇到下面的错误:

1).“E:signatureverification failed” means your signature is not correct.
2.)“E:Error in/tmp/sideload/package.zip(Status0)” means  this is an error of recovery, not the error of the zip.
3.)“E:Error in/tmp/sideload/package.zip(Status6)” means  this is an error of your updater-script , some command can not be parse correctly.
4.)“E:Error in/tmp/sideload/package.zip(Status 7)” means some command in your updater-script  is executed incorrectly and return an error. 

    7.升级Log信息:
   The recovery log is at  “/cache/recovery/last_log”

   8. 一些参考:

------------------------------------------------------------------------------------------------------updater-script command---------------------------------------------------------------------------------------------

Function Name: mount

Function Syntax: mount(fs_type, partition_type, location, mount_point)

Parameter Details:

fs_type = "yaffs2" | "ext4"
partition_type="MTD" | "EMMC"
location = partition | device
mount_point = target folder to mount FS.

Action: Mounts a filesystem to the defined mount point

Returns: The mount point if successful, null if failed

Function Name: is_mounted

Function Syntax: is_mounted(mount_point)

Parameter Details: mount_point = string, mount point to check if is mounted

Action: Checks if a filesystem is mounted.

Returns: The mount point if mounted, otherwise, returns null

Function Name: unmount

Function Syntax: unmount(mount_point)

Parameter Details: mount_point = string, mount point to unmount

Action: Unmounts the filesystem

Returns: The mount point that was dismounted if successful, otherwise it returns null

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值