本文转载自: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 制作升级包,如何制作自己的android升级包(update.zip)

    手动制作update.zip包的过程: 1.创建一个update目录,该目录包含自己想要升级或替换的内容 例如: update/ update/system update/system/app upd ...

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

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

  3. Android系统系统升级过程分析之------update.zip包的制作

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

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

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

  5. android 版本更新原理,Android系统Recovery工作原理之使用update.zip升级过程分析(二)...

    Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的解决 在上一篇末尾提到的生成差分包时出现的问题,现已解决,由于最近比较忙,相 ...

  6. Android系统Recovery工作原理之使用update.zip升级过程分析(二)---u...

    2019独角兽企业重金招聘Python工程师标准>>>  Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的 ...

  7. 安卓升级固件update.zip解析

    点击打开链接 一.update.zip包目录结构详解     1.boot.img是更新boot分区所需要的文件.这个boot.img主要包括kernel+ramdisk.      2.system ...

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

    Android系统Recovery工作原理之使用update.zip升级过程分析(五)---update.zip包从上层进入Recovery服务文章开头我们就提到update.zip包来源有两种,一个 ...

  9. Android OTA升级原理和流程分析(五)---update.zip包从上层进入Recovery服务

    转载自:http://blog.chinaunix.net/uid-22028566-id-3533854.html 文章开头我们就提到update.zip包来源有两种: 一个是OTA在线下载(一般下 ...

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

    Android系统Recovery模式的工作原理在使用update.zip包升级时怎样从主系统(main system)重启进入Recovery模式,进入Recovery模式后怎样判断做何种操作,以及 ...

最新文章

  1. Oracle中查看表空间的使用率的脚本
  2. [转] GloVe公式推导
  3. mount windows目录
  4. QT旋转按钮控件的实现
  5. HbuilderX跳转 / 定义快捷键
  6. pta_l1-6(连续因子)
  7. Eclipse工作常见问题总结
  8. Mircosoft 正式把Windows Mobile改名为Windows Phone,你会因此而购买Windows Phone吗?
  9. 使用VB.net建立excel文件
  10. c语言 指正判断字符串大小
  11. 递增三元组蓝桥杯c语言,蓝桥-递增三元组-蓝桥
  12. vc实现html显示,在VC对话框中用ChtmlView控件显示HTML(2)
  13. 计算机基础知识点总结
  14. 简单的快速提取Fbank特征的方法
  15. Codeforces Round #727 (Div. 2)_B. Love Song(前缀和)
  16. STM32F103C8T6基础开发教程(HAL库)—点亮第一颗LED灯
  17. 这个php兼职靠谱吗?一月3000?
  18. 获得屏幕的宽度和高度
  19. linux 脚本中=$4,shell脚本实例,通向shell脚本大师的必经之路
  20. CM211-1增强版2+16_荣耀飞龙开机动画_当贝桌面卡刷固件

热门文章

  1. 优化理论13----黄金分割法、单峰函数、python实现及验证
  2. 分类模型评估之ROC-AUC曲线和PRC曲线
  3. centos yum源_Linux入门珍藏课件系列第一讲:YUM源(图文)
  4. linux切分文件指定行_vim技巧:在不同文件buffer间切换,在多窗口跳转和改变窗口大小...
  5. 现控笔记(四):能控性和能观性
  6. AndroidStudio 文件目录如何“刷新”
  7. Servlet — 线程安全问题
  8. 【剑指offer】面试题 14. 剪绳子
  9. JEECG(三) JEECG minidao如何封装自己的 多表联合查询 分页查询
  10. The Unsolvable Problem