本文转载自:http://zwkufo.blog.163.com/blog/static/2588251201382293049118/

很多时候厂商或者三方提供的ROM并不能满足需求,比如系统自带软件陈旧、缺少GMS软件包(Google Mobile Service,包含了Gmail、GooglePlay等Google自家的常用软件,很多用户习惯用Gmail、用ContactsSync,所以通常会对这个服务包有比较强烈的需求),等等。

 
在这种情况下,一种方法是用户可以通过破解设备、加Root权限的方式去安装/替换ROM中已有的应用;而另一种方法则是制作一个升级包(Update.zip),在Recovery模式下刷机升级——这种方式被Sony等很多厂商采用,因为它可以在不破解设备或者加Root权限的情况下顺利升级系统内软件或者其它数据。当然,这种方式要求用和被升级ROM一致的签名文件(Key)给升级包做签名。
 
下面以制作GMS升级包为例(我想很多人的目的就是这个吧),介绍制作一个简单Update.zip的过程:
 
1)创建一个目录(例如,名为“update”的文件夹)
里面包含需要打包到Update.zip用来升级或者替换原有ROM的内容:
    update/
    update/system
    update/system/app
    update/system/app/xxxx.apk
    update/META-INF
    update/META-INF/com
    update/META-INF/com/google
    update/META-INF/com/google/android
    update/META-INF/com/google/android/update-binary
    update/META-INF/com/google/android/updater-script
在GMS包中,我包含了源码Google提供的很多apk及Maps相关libs:
 
其中,updater-script是update.zip在释放安装时所需要的脚本文件;updatebinary是脚本文件所需要调用的函数库,这个文件可以从ROM中提取,或者从 >>>> 这里 <<<< 下载使用。
 
2)编写updater-script
目前广泛使用的是Edify脚本(updater-script和update-binary);很久以前还有Amend脚本(update-script),现在已经不再支持:所以如果有看到名为update-script的脚本示例,一般已经没有用了可以无视。
仍然以GMS为例,递归地Copy升级包中的文件到设备相应的目录中:
ui_print("***********************************************");
ui_print("               GMS for Beta User               ");
ui_print("***********************************************");
 
show_progress(1, 3);
 
mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "/system");
package_extract_dir("system", "/system");
set_perm_recursive(0, 0, 0755, 0644, "/system/app");
set_perm_recursive(0, 0, 0755, 0644, "/system/etc/permissions");
set_perm_recursive(0, 0, 0755, 0644, "/system/framework");
set_perm_recursive(0, 0, 0755, 0644, "/system/lib");
set_perm_recursive(0, 0, 0755, 0644, "/system/media");
set_perm_recursive(0, 0, 0755, 0644, "/system/usr");
unmount("/system");
 
ui_print("GMS update complated.");
上面“/system”的挂载点因设备而异。关于Edify脚本语法和函数的介绍,网上有很多资料,有兴趣可以再搜索看看是否能符合你客制化的需求。
 
3)打压缩包
压缩包可以用压缩工具,也可以用下面的命令行来做。但是要保证压缩包内的根目录下就有META-INF:
 
如果是Ubuntu一类的Linux环境下用“zip”命令做压缩包,则需要在步骤(1)的根目录中使用命令:

$ zip -qry ../update_unsigned.zip ./

 
4)给压缩包签名
使用下面的命令为上一步骤中生成的update_unsigned.zip做签名:

$ java -Xmx512m -jar signapk.jar -w releasekey.x509.pem releasekey.pk8 update.unsigned.zip update.zip

其中:
-Xmx512m:指定了java最大内存堆栈,我的包比较大512不够用,设置成4096就成功;
signapk.jar:签名工具,在源码中可以找到(/prebuilts/sdk/tools/lib/signapk.jar),或者从 >>>> 这里 <<<< 下载。下载链接中的文件基于Android4.3提取,不一定是通用的。
releasekey.x509.pem releasekey.pk8:这两个就是现有ROM发布时对应的签名Key,因设备/ROM而异。
 
5)应用update.zip升级包
至此,升级包已经制作完毕。将签过名的update.zip包放入SD卡或者其它能被访问到的目录(有些设备可能要求SD卡根目录),重启设备并进入Recovery模式,找到update.zip并升级(有些设备可能直接有“apply update.zip”的选项),成功后重启手机。

Android:制作Update.zip升级包 【转】的更多相关文章

  1. Android系统Recovery工作原理之使用update.zip升级过程分析(一)---update.zip包的制作【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7399822 这篇及以后的篇幅将通过分析update.zip包在具体Android系统升级的过 ...

  2. Android系统Recovery工作原理之使用update.zip升级过程分析(一)

    通过分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理.我们先从update.zip包的制作开始,然后是Android系统的启动 ...

  3. Android系统Recovery工作原理之使用update.zip升级过程分析(三)【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7464699 以下的篇幅开始分析我们在上两个篇幅中生成的update.zip包在具体更新中所经 ...

  4. OTA升级中关于update.zip包的一些总结【转】

    本文转载自:http://429564140.iteye.com/blog/2337165 update.zip包整理 一. update.zip包的目录结构           |----boot. ...

  5. Android系统Recovery工作原理之使用update.zip升级过程---updater-script脚本语法简介以及执行流程(转)

    目前update-script脚本格式是edify,其与amend有何区别,暂不讨论,我们只分析其中主要的语法,以及脚本的流程控制. 一.update-script脚本语法简介: 我们顺着所生成的脚本 ...

  6. Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7465603       Android系统Recovery工作原理之使用update.zip ...

  7. Android系统Recovery工作原理之使用update.zip升级过程分析(七)---Recovery服务的核心install_package函数【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7465514 一.       Recovery服务的核心install_package(升级 ...

  8. Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7465439  Android系统Recovery工作原理之使用update.zip升级过程分 ...

  9. Android系统Recovery工作原理之使用update.zip升级过程分析(八)---解析并执行升级脚本updater-script【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7465551  Android系统Recovery工作原理之使用update.zip升级过程分 ...

随机推荐

  1. html用过标签记录

    nowrap="nowrap" //用于列表中td不许换行 maxlength="100" //用于输入框的长度限制 colspan="2" ...

  2. 图解TCP/IP笔记(3)——IP协议

    目录 IP协议 IP寻址 IP地址组成 IP地址分类 广播地址 子网掩码 全局地址和私有地址 IP协议 跨越不同数据链路,实现两端节点之间的数据包传输 数据链路:只负责某一个区间之间的通信传输 IP协 ...

  3. Centos 安装 Moosefs文件系统

    一.环境介绍Moosefs master:192.168.55.148Moosefs Metalogger:192.168.55.149Moosefs Chunk-01:192.168.55.150M ...

  4. react特性-声明式编程

    网络上有很多关于声明式编程和命令式编程的对比和说明,但是大多都是大同小异,总的来说就是一句话"告诉电脑我要做什么,但是让电脑自己决定怎么做." 1.命令式编程. 这种编程模式比较常 ...

  5. vue04 组件化开发 Vue自动化工具

    5. 组件化开发 5.1 组件[component] 组件(Component)是自定义封装的功能.在前端开发过程中,经常出现多个网页的功能是重复的,而且很多不同的网站之间,也存在同样的功能. 而在网 ...

  6. 6.shell脚本

    6.1 shell基础语法 6.1.1 shell的概述 shell的基本概念 1.什么是shell shell是用户和Linux操作系统之间的接口,它提供了与操作系统之间的通讯方式 shell是一个 ...

  7. ORM 进阶操作

    ORM多表操作 一.创建模型 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息:作者详情模型和作者模型之间是一对一的关系. 出版商模型:出版商有 ...

  8. LVM(Logical Volume Manager)逻辑卷管理

    本文实验部分,完全由本人亲自动手实践得来 文章中有部分的内容是我个人通过实验测试出来的,虽以目前本人的能力还没发现不通之处,但错误难免,所以若各位朋友发现什么错误,或有疑惑.更好的建议等,盼请各位能在 ...

  9. BUPT2017 wintertraining(15) #9

    下面不再说明题意了请自行读题,直接放contest链接. https://vjudge.net/contest/151607 A.考虑当火车隔k站一停时 区间长度 >= k 的纪念品一定能买到 ...

  10. RSAROLL

    题目:http://www.shiyanbar.com/ctf/1918 # -*- coding: utf-8 -*- import gmpy2 ciper = [704796792, 752211 ...