Android改包3
2. ROM的提取
这一节介绍如何从ROM中提取文件。最常用的就是提取apk文件。在论坛中经常看到求救帖子:“大侠,救命哇,我把XXXX.apk给删掉了,手机出错。。。”。我说,你完全可以自救,不必在论坛里跪求他人或在线等。出路很简单:就是自己先做备份或有手段去提取文件。另外,如果你掌握了文件的提取方法,你就可以从其它ROM中方便地移植你喜欢的应用程序和功能了。例如,移植输入法,更换主题或桌面,等等。
所谓ROM的提取或从ROM中“提取”文件,实际上就是要对factoryfs.rfs文件进行解包,把里面要用的文件复制出来。factoryfs.rfs是镜像文件,用了三星自定义的格式。RFS是Robust File System的缩写。在刷机包里还有cache.rfs和dbdata.rfs,都是同类镜像文件。对它们的解包打包方法是相同的。下面来介绍几种常用解包方法。
1) 直接从卡刷ROM包提取
如果你的ROM是“卡刷”包,直接提取就好啦,不需要解包。卡刷包是zip格式的压缩文件。用WinRAR或WinZip直接解压ROM文件就得到所有的原文件。一个典型的ROM打开后有三个文件夹:
META-INF 签名文件和刷机脚本文件
system 这就是factoryfs.rfs内的所有内容
updates 存放内核和基带
进入/system/app目录,一切apk程序都在这里,对应于factoryfs.rfs内的内容和手机的/system目录。刷机就是把/system下的内容复制到规定的分区
2) 用RE管理器从手机里提取,复制到SD卡
还有一种ROM的提取方法,不需要其它软件。用RE管理器,利用它的“多选”-“全选”-“复制”功能,一次把多个文件复制到手机的SD卡上。然后,进入“大容量存储”把文件拷贝到计算机里。这也是做备份的一种常用方法。
3) 利用91手机助手从手机提取
还有一种不需要对ROM解包就可以提取到文件的途径。如果你是91手机助手的使用者,你一定熟悉它。打开91手机助手的文件管理,想提取那个就提取那个。把文件直接拖出来放到你的计算机里就行了。
4) MagicISO/UltraiSO/WinImage软件
由于factoryfs.rfs是镜像文件,你可以用某些镜像解包软件来打开刷机文件factoryfs.rfs。常用的软件有MagicISO和UltraISO。论坛里有介绍和下载链接。我在上一节的例子中就是用到MagicISO。类似的软件有很多,你们可能各有利器。最近,也用过WinImage,结果相同。
注意:这些软件只能用于解包提取文件之用,不能进行RFS打包操作。
5) 在linux下通过对factoryfs.rfs的解包
在Linux环境下,通过对factoryfs.rfs进行解包操作是提取ROM的高级手段。在下一节详细叙述。
3. RFS的解包和打包
先强调一下,我们这一节讲的RFS文件的解包和打包不是为了提取文件之用。我们的目的并不仅仅停留在提取ROM文件上的层面上。更重要的是,我们不但要对factoryfs.rfs能解包,我们需要对包内的内容进行修改后还要能够再打包成RFS文件格式。其最终目的是为了定制自己的ROM刷机包。从技术上讲,RFS文件的打包只能在Linux系统下进行。我们在这一节就介绍如何在Linux系统下对RFS文件的解包和打包。
1) 在计算机的Linux系统下
计算机已经安装了Linux操作系统和配置了java环境。下面是对factoryfs.rfs的解包和RFS打包过程。在Linux下主要使用mount和umount两个命令,要求具有超级用户权限。操作步骤如下:
a)先创建一个子目录:/home/sunny/Work
b)把factoryfs.rfs复制到/home/sunny/Work这个子目录
c)再在Work之下创建一个子目录System
d)在用户终端/home/sunny/Work输入
$ su
PassWord:XXXXXXXX(你的Root口令)
输入“Password”后,获得超级用户权限,提示符变成
root@ubuntu:/home/sunny/Work#
e)在超级用户终端/home/sunny/Work# 输入下列命令,挂载 RFS文件factoryfs.rfs 为一个磁盘:
# mount –o loop factoryfs.rfs System
进入“磁盘”System目录,你就可以看到factoryfs.rfs解包后的所有内容。像对待正常文件夹一样,你可以用“文件夹”浏览器查看 System文件夹里面的内容,但是不能删除和添加文件。
f)在超级用户终端,你可以用rm和cp命令任意删除和添加应用程序。你也可以把文件从System目录复制出来(提取文件)。由于/home/sunny/Work/System是factoryfs.rfs挂载的磁盘,修改System下的内容就是在修改factoryfs.rfs的内容。所有美化、修改、编辑工作都在此进行。
g)修改好/System的内容后,在超级用户终端执行下面的语句卸载该“磁盘” ,这个操作等价于“打包”过程。为此,首先退到目录/home/sunny/Work,输入下列命令:
# umount System
h)卸载System“磁盘”后,我们就得到修改好了的factoryfs.rfs。/home/sunny/Work 目录下的factoryfs.rfs就是修改和打包后可用的文件了。System目录什么都没有了(空目录)。
i)关于factoryfs.rfs的打包。在以上的操作过程中,好像没有“打包”操作,怎么就得到新的factoryfs.rfs文件了呢?事实上,在这个操作过程中factoryfs.rfs根本就没有被“解开”,是通过挂载磁盘完成的,修改工作也是在“磁盘”上做的。因而也就没有“打包”过程。这与制作Motorola XT502 NB0刷机包的过程不同。玩习惯了XT502的NB0刷机包,还一直想着如何打包呢。
2) 利用手机操作系统
我们Android手机的操作系统实际上就是Linux系统,是简化的Linux系统。你可以在该Linux系统中做很多事情,像在计算机的Linux系统中一样。我们可以利用它来实现RFS文件的“打包”,从而获得RFS文件(例如:factoryfs.rfs)。我们在上一节不是用它来“解包”提取过文件了吗?
这里,我们利用手机并结合windows系统来完成factoryfs.rfs的“打包”操作,或称提取factoryfs.rfs。要求手机获得Root权限。步骤如下:
a)在Windows下安装ADB驱动(ADB工具包已经在第一讲给出)。
b)用USB数据线把手机连接计算机。
c)手机要在“设置”-“应用程序”-“开发”下勾“USB测试”
d)在DOS下输入(假定ADB安装在C:/ADB/目录内):
C:\ADB> adb shell
$ su
# dd if=dev/block/stl9 of=/sdcard/factoryfs.rfs bs=4096
几分钟之后,再次出现“#”提示符。输入:
# exit
$ exit
在SD卡上产生了打包好的factoryfs.rfs文件,大小为278M。
e)把factoryfs.rfs文件从SD卡拷贝到计算机,待用。用MagicISO打开检查一下,是不是你要的内容。
f)如果要提取其它cache.rfs和dbdata.rfs文件就用下列命令:
dd if=/dev/block/stl10 of=/sdcard/dbdata.rfs bs=4096
dd if=/dev/block/stl11 of=/sdcard/cache.rfs bs=4096
注意:用了某些优化内核时,所提取出来的RFS文件无法用MagicISO或UltraISO打开。需要选取合适的内核。
===============================================================
【第三课】如何制作刷机补丁和CWM刷机包ROM
================================================================
本讲的内容包括两个部分:
1.制作刷机补丁
2.制作完整刷机包ROM
通常,两者都称作刷机包。在本文中,我们说“刷机补丁”是指ROM的补充内容。例如:在英文底包上刷中文文件,或者替换字库,替换主题或桌面等等。它们不构成可使手机运行的全部文件,它们仅仅是ROM的一部分。以前,常用update.zip来传播。当我们说“完整刷机包ROM”时,我们是特指一个独立完整的ROM,包含一个刷ROM所具有的所有必要刷机元素。
1. 制作刷机补丁
我们都知道,ROM发布者通常发布刷机补丁来升级ROM。ROM发布后,需要增加、刷新、更改ROM内容或功能时,没有必要重新安装整个ROM。只要把需要更新的部分写成一个“刷机补丁”,刷进手机与已有的系统合并就行了。
在介绍如何制作刷机补丁之前,先让我们来看一个实例:用刷机补丁来更新两个主题文件,把TouchWiz30Launcher.apk和SystemUI.apk复制进手机的/system/app目录。刷机包补丁文件名为:CWM_Update.zip。
用WinRAR打开刷机补丁文件CWM_Update.zip,看到有两个目录:
META-INF 刷机脚本文件和签名
system 要复制的补丁内容
继续打开/system就看到文件夹/app,再下去在 /app下看到要复制的两个主题文件TouchWiz30Launcher.apk和SystemUI.apk(见截图)。从/system目录开始,所有的目录结构和akp文件放置的位置都必须与手机里的内容一一对应。
然后进入META-INF目录(见截图),我们看到有三个文件和一个字文件夹com。这三个文件是签名文件,是签名操作产生的。在Android手机里,所有要刷入手机或在手机里运行的程序都必须经过签名。从com继续向下走,在/META-INF/com/Google/android目录下看到有两个文件:
update-binary 刷机包用的二进制文件
updater-script 刷机包脚本文件
这个刷机包脚本文件updater-script规定了要刷什么,刷到哪和怎样刷。
从这个具体的例子,我们可以总结制作刷机补丁的步骤如下:
1)创建一个工作目录:先假定它是CWM_Update。
2)在CWM_Update下产生两个子文件夹:META-INF和system
CWM_Update/META-INF
CWM_Update/system
3)再在CWM_Update/system下产生下一级子文件夹,存放补丁的内容。目录结构和文件放置要与手机里的文件结构完全一致。apk应用程序放在/app下,字库放在/fonts下,主题放在/framework下,触摸键定义放在/usr/keylayout下,库文件放在/lib下,等等。
4)在CWM_Update/META-INF下再产生
/META-INF/com/google/android
到其它的刷机包里去把现成的update-binary和 updater-script复制进/android目录。
我的做法是把META-INF的整个目录内容都一起复制过了,里面已经有了三个签名文件和刷机包用的二进制文件update-binary,一次搞定,省事。不要碰再它们了。
5)现在来编辑脚本文件updater-script,它规定了要复制什么、怎么复制、复制到什么地方。用文本编辑器打开updater-script,看到内容如下:
mount("MTD", "system", "/system");
ui_print("Updating system...");
show_progress(0.100000, 0);
set_progress(1.000000);
package_extract_dir("system", "/system");
show_progress(0.900000, 10);
ui_print("Update complete!");
unmount("/system");
对脚本文件updater-script内容解释如下:
mount("MTD", "system", "/system");
挂载MTD、system、/system(system是CWM_Update.zip里的/system文件夹,/system是手机空间上的文件夹)
ui_print("Updating system...");
手机屏幕显示提示信息 Updating system...
show_progress(0.100000, 0);
是控制进度条状态(进度条当操作完成后前进10%)
set_progress(1.000000);
把进度条手动设置到100%
package_extract_dir("system", "/system");
将CWM_Update.zip的system文件夹下的内容复制到手机的/system
show_progress(0.900000, 10);
同上,是控制进度条状态(进度条当操作完成后前进90%)
ui_print("Update complete!");
手机屏幕显示提示信息 Update complete!
unmount("/system");
卸载手机/system文件系统,刷机到此结束。
注意:在unmount之后必须有一个空行!这是规定。
6)在CWM_Update目录下,把META-INF和system两个目录打包成一个压缩文件CWM_Update.zip。
7)最后,用签名程序Auto-Sign对CWM_Update.zip进行签名。制作过程结束,刷机补丁就做好了。
注释:如果你打算制作一个刷机补丁的话,原样使用这个脚本文件就行了,不用做任何修改。在实际制作时,可以直接从已有的刷机补丁中把META-INF目录完全复制过来,连签名过程都省了。但是注意检查一下updater-script的内容,以防造成错误后果!
2. 制作完整刷机包ROM
有了上面如何制作刷机补丁做基础,你也不难制作出一个完整的“卡刷”刷机包ROM。与制作Odin刷机包相比,这里没有复杂的RFS解包和打包过程,不需要Linux环境,所有操作在Windows下就搞定了。编辑/system目录下的内容直截了当,删减和添加内容都方便。
我们还是从一个实例出发,考察ROM结构和文件的放置,然后归纳制作步骤,介绍制作技巧。
打开某个ROM包 截图如下:
相关文章