Android:制作Update.zip升级包 【转】

本文转载自: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”的选项),成功后重启手机。

时间: 2024-10-02 11:49:10

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

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

通过分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理.我们先从update.zip包的制作开始,然后是Android系统的启动模式分析,Recovery工作原理,如何从我们上层开始选择system update到重启到Recovery服务,以及在Recovery服务中具体怎样处理update.zip包升级的,我们的安装脚本updater-script怎样被解析并执行的等一系列问题.分析过程中所用的Android源码是gin

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

本文转载自:http://blog.csdn.net/mu0206mu/article/details/7465439  Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节            Recovery服务毫无疑问是Recovery启动模式中最核心的部分.它完成Recovery模式所有的工作.Recovery程序对应的源码文件位于:/gingerbread0919/bootable/recovery/recovery

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

目前update-script脚本格式是edify,其与amend有何区别,暂不讨论,我们只分析其中主要的语法,以及脚本的流程控制. 一.update-script脚本语法简介: 我们顺着所生成的脚本来看其中主要涉及的语法. 1.assert(condition):如果condition参数的计算结果为False,则停止脚本执行,否则继续执行脚本. 2.show_progress(frac,sec):frac表示进度完成的数值,sec表示整个过程的总秒数.主要用与显示UI上的进度条. 3.for

Android之Gzip/Zip压缩

前言: 做过Android网络开发的都知道,在网络传输中我们一般都会开启GZIP压缩,但是出于刨根问底的天性仅仅知道如何开启就不能满足俺的好奇心的,所以想着写个demo测试一下比较常用的两个数据压缩方式,GZIP/ZIP压缩. 首先认识一下GZIP压缩 GZIP是网站压缩加速的一种技术,对于开启后可以加快我们网站的打开速度,原理是经过服务器压缩,客户端浏览器快速解压的原理,可以大大减少了网站的流量.GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNIX系统的文件压

Android 解压zip包的实现

android 自身提供了zip包的解压接口 1 /** 2 * 解压操作 3 * 4 * @param zipFileString 被解压的文件路径 sdcard/0/a/b/test.zip 5 * @param outPathString 解压的目的路径 sdcard/0/a/b 6 */ 7 public static void UnZipFolder(String zipFileString, String outPathString) { 8 FileInputStream fis

从零开始学Xamarin.Forms(三) Android 制作启动画面

Xamarin.Forms 在启动的时候相当慢,必须添加一个启动界面,步骤如下: 1.将启动画面的图片命名为:splash_screen.png,并拷贝到 Resources 文件夹下的相应 Drawable 文件夹中: 2.在其中的 Drawable 文件夹下创建 splashscreen.xml ,内容为: <?xml version="1.0" encoding="utf-8" ?> <bitmap xmlns:android="h

android 制作9.png图片

什么叫.9.PNG呢,这是安卓开发里面的一种特殊的图片 这种格式的图片在android 环境下具有自适应调节大小的能力. (1)允许开发人员定义可扩展区域,当需要延伸图片以填充比图片本身更大区域时,可扩展区的内容被延展. (2)允许开发人员定义内容显示区,用于显示文字或其他内容 如下图所示: 左侧和上方的黑线交叉的部分即可扩展区域 右侧和下方的黑线交叉的部分即内容显示区 用它可以实现部分拉伸,从而实现图片在安卓系统上的完美应用 拆过系统framework-res.apk包的机油们细心点看,里面有

Android ----制作自己的Vendor

Android源代码使用一个可定制的编译系统来生成 特定的,针对自己硬件平台的Android系统,比方不使用缺省的out/target/prodect/generic文件夹, 本文档简介了这个编译系统,并做一个针对自己硬件平台的Android, 这部分工作主要是由Android源码中的Vendor目录来实现,假设该目录不成立, 自己能够在Android源码的根目录下建立该目录,这个目录里面存放特定的文件,比方自己板子上的3G驱动,WIFI驱动, 自己的应用程序,都能够放在这里.提取文件系统的时候

android:制作 Nine-Patch 图片

它是一种被特殊处理过的 png 图片,能够指定哪些区域可以被拉伸而 哪些区域不可以. 那么 Nine-Patch 图片到底有什么实际作用呢?我们还是通过一个例子来看一下吧.比如 说项目中有一张气泡样式的图片 message_left.png,如图 3.38 所示. 图   3.38 我们将这张图片设置为一个 LinearLayout 的背景图片,修改 activity_main.xml 中的代码, 如下所示: <RelativeLayout xmlns:android="http://sc