当前位置: 首页 > ai >正文

Android:制作Update.zip升级包


2013-09-22 12:32:41|  分类: Android |  标签:update.zip  升级  gms  android  updater-script  |举报|字号 订阅

很多时候厂商或者三方提供的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:
Android:制作Update.zip升级包 - 乂乂 - 分享,态度 ·~~

其中,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:
Android:制作Update.zip升级包 - 乂乂 - 分享,态度 ·~~

如果是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 ”的选项) ,成功后重启手机。
【本文链接:http://zwkufo.blog.163.com/blog/static/2588251201382293049118/
http://www.xdnf.cn/news/11406.html

相关文章:

  • Android ComponentName的使用
  • 针不错!10+个综合资源网站,好用的很网站!
  • 什么是C语言?
  • ShellExecuteEx执行新进程,无需管理员权限写入注册表
  • C# ManagementObjectSearcher操作window案例详解
  • css边框border(含代码,易懂)
  • 怎样从零开始学习网络工程师?
  • notifyDataSetChanged()无效原因
  • 配置管理工具比较
  • 项目管理(PMP)真题解析(一)
  • 斑斓中国BlenderCN项目库
  • R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介)
  • 常用的开源中文分词工具
  • Altium Designer 之 批量修改过孔盖油设置
  • 【Java】ResourceBundle 使用
  • 有关My97DatePicker日期插件的详细使用
  • csdn软件是干什么的?
  • 基于Booth算法的64位浮点乘法器的实现
  • 光纤专线与普通宽带区别(ASDL)
  • MP3中设置播放顺序的软件《闪存式MP3伴侣》
  • 玩转百度AI Studio 之 用“四十路泰坦”跑线性回
  • Oracle视图
  • 雷神加速器云顶之弈|PBE云顶S11赛季上线时间介绍
  • UltraEdit-32常用操作
  • 什么是Portlet
  • Samba使用LDAP对用户进行认证
  • javascript中onmousemove、onmouseover、onmouseenter 的不同
  • 出现RPC服务器不可用的解决方法
  • 关于Try catch问题与常见异常类型
  • Java8新特性之Nashorn