前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android改包3

Android改包3

作者头像
py3study
发布2020-01-09 10:46:57
1.9K0
发布2020-01-09 10:46:57
举报
文章被收录于专栏:python3python3

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包 截图如下:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档