Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33083
  • 博文数量: 7
  • 博客积分: 250
  • 博客等级: 二等列兵
  • 技术积分: 82
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-10 08:44
文章分类

全部博文(7)

文章存档

2011年(2)

2008年(5)

我的朋友
最近访客

分类: LINUX

2011-04-08 19:32:02

本文介绍如何从一个已经编译好的android源码树中提取一个update.zip所需要的所有资源, 从而最终构建一个可以在android recovery模式下刷机的update.zip包.在介绍之前,我们先假定你已经有了一个编译好的android源码树 myandroid.  

一. 在Android 2.1-update1版本中, 一个最基本的update.zip包的结构如下:

    .

    |-- META-INF

    |   `-- com

    |       `-- google

    |           `-- android

    |               |-- update-binary

    |               `-- updater-script

    `—system

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

                               该文件源自 myandroid/out/target/product/YOU_PRODUCT/system/bin/updater  重命名所得

                                     具体用什么名字是由 myandroid/bootable/recovery/install.c 文件中的宏 ASSUMED_UPDATE_BINARY_NAME 的值而定.

        • updater-script  : 该文件需要自己根据更新包需要更新的内容自行编写. 注意: 是updater-script, 而不是 update-script

                                               具体用什么名字是由 myandroid/bootable/recovery/updater/updater.c 文件中的宏 SCRIPT_NAME 的值而定.

        • system                :  该目录下放需要更新的内容. 比如, 如果你只是需要添加几个系统软件, 则在此目录下添加一个 app 目录, 然后把待添加的系统软件copy

                                                进来即可. 如果你是要制作一个系统更新包. 那需要把 myandroid/out/target/product/YOU_PRODUCT/system/ 中的所有文件copy

                                                到这个目录里来. 



        二. 一个系统更新 update.zip 包的制作步骤, 步骤在一台ubuntu系统中完成. 如果有命令缺失, 请自行安装.
        三. updater-script 脚本的编写.
        $mkdir update #在任意目录下,创建一个叫update的目录
        $cd upadte # 进入该目录
        $mkdir –p META-INF/com/google/android/  &&  mkdir system #在update目录下, 创建2个子目录
        $cp myandroid/out/target/product/YOU_PRODUCT/system/bin/updater  META-INF/com/google/android/update-binary #获取update-binary文件
        $cp myandroid/out/target/product/YOU_PRODUCT/system/ system/  #获取更新系统MTD所需要的文件
        $cp myandroid/out/target/product/YOU_PRODUCT/boot.img ./ #获取更新系统boot区域所需要的文件.这个boot.img = kernel + ramdisk
        $vim META-INF/com/google/android/updater-script # 打开updater-script脚本, 开始编写更新过程.(下文详述)
        $zip update.zip -r ./META-INF/ ./system/ ./boot.img #编辑完updater-script脚本后, 把update内的所有内容打成一个 update.zip包.
        $java –jar ---签名--- # 使用java对update.zip包进行签名 (下文详述)
        一个签过名的, 可以在recovery模式下刷机的更新包就做好了.
        updater-script 的内容其实为一行一行update-binery能识别的命令序列. 文件 myandroid/bootable/recovery/update/install.c 末尾描述了所有可执行命令.
        mount, is_mount, unmount, format, show_progress, set_progress, delete, delete_recursive, package_extract_dir, package_extract_file, symlink, set_perm, set_perm_recursive, getprop, file_getprop, write_raw_image, write_firmware_image, apply_patch,apply_patch_check, apply_patch_space ui_print, run_program
                这是目前支持的所有命令.下面介绍部分命令的使用实例:
        • mount :
                            eg : mount(“MTD”, “system”, “/system”);
                                  挂在 MTD的system分区到文件系统的 /system 目录下.
        • ui_print :
                            eg : ui_print(“Hello word!”);
                                   在屏幕上打印提示信息. 
        • format :
                            eg : format(“MTD”, “system”);
                                   格式化MTD的system分区
        • package_extract_dir :
                            eg : package_extract_dir(“system”, “/system”);
                                  把update包中system中的内容全部拷贝到文件系统/system下
                   四. update.zip签名
        update.zip包完成以后, 需要对该zip包进行签名, 否则在recovery模式刷机的时候, 会出现认证失败的错误提示.

        $java  –jar  myandroid/out/host/linux-x86/framework/signapk.jar  –w  myandroid/build/target/product/security/testkey.x509.pem     /testkey.pk8  update.zip update_signed.zip

        通过这条命令, 会对update.zip包进行签名, 然后输出一个update_signed.zip的签好名update包. 以此作为最终更新包

        这条命令需要5个条件:

        • host机需装有java环境, ubuntu上为 sun-java5-jdk DEB包
        • signapk.jar 文件. 在编译好的myandroid/out/host/linux-x86/framework目录下
        • testkey.x509.pem 在源码的 myandroid/build/target/product/security 目录下
        • testkey.pk8 在编译好的 myandroid/build/target/product/security 目录下
          • update.zip 没有经过签名的ZIP包.

        阅读(1229) | 评论(0) | 转发(0) |
        0

        上一篇:The versions of Android settings

        下一篇:没有了

        给主人留下些什么吧!~~