分享

DIY手机刷机包之动手修改ROM并刷入(Aonly) 来自 白曦

 zcgege 2022-12-03 发布于广东

doge笑哭15号我就把图文的Word写好了 但想发的时候就咕了
本图文为一系列图文,分为三篇
(一)认识安卓手机刷机包 链接:查看链接
(二) 认识卡刷包的updater-script 链接:查看链接被吞了)
(三)动手修改ROM并刷入 →你在这里←
[(四)续篇?ROM移植?]
前言:

*****
这篇图文 你可以说是盗包教程 也可以把它当正常教程
+科普 (图文后半部分)
*****

(本图文涉及很多ROM工具,我真的没收钱,更不想打广告 酷安号还是珍贵的)流汗滑稽

啊啊啊啊啊啊 氵了两篇图文,终于到我们最后一篇了 (虽然之前有一篇被吞了受虐滑稽
看了前两篇图文是不是很想自己动手修改ROM了呢,是不是很激动了呢?
好吧(╯▽╰) 入门和大佬对这篇文章的评价可能是

本文涉及的ROM解包格式:.img解包,.new.dat解包,.new.dat.br解包,ozip解包,文件夹直接解包
如果你想了解详细的ROM修改(如精简,修改状态栏时钟等),你可以关注各位ROM大佬,如@奇萌大枪

图文架构:
┏━前言
┣━例:为lgv30MIUI添加gapps,magisk,搜狗输入法
--------分割 补充部分------(小白向)
┣━通用解包大法:ROM制作工具
┣━解包固件(线刷包)
┃ ┗三星, MIUI,Google,可解压zip打包的线刷包等(LG的解包方式过于复杂,我本来想写的,然后放弃了 网上其实有教程)
┣━解包ROM(卡刷包)
┃ ┗解包:常规打包方式解包,特殊解包(ozip,.fs等)
┃ ┗打包:文件夹打包法,.img打包法,.new.dat(br)打包法,其它解包法
┣━卡刷包内的结构
┃ ┗文件结构说明
┗━文末

正文开始受虐滑稽超长图文来袭(18+min阅读用时)

如何给lgv30MIUI添加gapps,magisk,搜狗输入法?
有以下10个步骤嘿哈

1.我们要做的准备:
Opengapps pico 4-12:查看链接
搜狗输入法10.7.1
magisk20.4卡刷包:查看链接
bandzip(lzip也可以 或者打了补丁的7-zip)
Python 2.7/3.6 :查看链接
rimg2sdat.py:查看链接
Brotli:查看链接

↑准备的文件&资料

2.解压ROM 提取ROM文件

3.分析我们要做什么,选择何种方式去修改ROM
这里我选择的是不修改system.img镜像的方法,而是/system目录法
新建system文件夹,并将解包好的opengapps全部复制过去

4.添加Google而不是使用opengapps[仅适用里面的apk文件](N大的miui刷opengapps会报错)
那么我们就要对opengapps进行解包,提取GMS
提取opengapps卡刷包中的Core和GApps,我们可以发现许多.tar.lz文件
linux下可以使用 lzip -d 提取出tar文件,再tar -xvf 提取
Windows下同样可以使用lzip+其它压缩软件 如果你使用的是bandzip,则可以直接解包

捂嘴笑解压zip相信大家还是会的

将Core和GApps的所有文件进行解包
这里(推荐)解包nodpi 因为这样我们可以不用担心因为dpi选择不正确导致的FC。
将所有的tar.lz的nodpi全部解压到一个文件夹
common也要解包

↑common通用配置文件

一般都是配置文件
(可选:不解包setupwizarddefault-all.tar.lz和setupwizardtablet-all.tar.lz,它们是Google开机向导 可能会导致你第一次开机卡谷歌锁)
同理,用这个办法,你可以给系统添加ARcore webview等其它组件(我这里添加了)

5.由于要适用搜狗输入法取代内置输入法,我们就必须删除内置的小米键盘,并将搜狗输入法添加至系统分区(我们俗称的预装)
为了防止卡米,我们因尽可能使用相同的路径
使用MT管理器查看小米输入法,
发现其预装在/system/app/SougouInput中

,
那么我们只需要将我们下载下来的SogouInput_android_v10.7.1_sweb.apk改名成SougouInput.apk扔到这个目录里面去就行了

移动到ROM(解包)好的根目录

5.5修改/META-INF/com/google/android/updater-script,以使rom在安装完system.img后可以解包system

注意⚠️⚠️⚠️:释放文件这一步骤必须在区块升级之后!
即block_image_update,package_extract_file

6.添加magisk
打开并编辑/META-INF/com/google/android/updater-script
我们看到了如图的字样,显然是为了magisk保留的了

↑magisk保留

那好办了 不需要我们添加额外的magisk卡刷包解压安装脚本,只需要按着路径添加magisk卡刷包就行
我们在META-INF下新建root文件夹,并将magisk卡刷包拖入并改名成root.zip即可

7.优化system.img大小
看着这个4GB的system.img emmm 似乎有点大
我们可以先将之转换成system.new.dat,再使用brotli压缩转换成system.new.dat.br
命令(./)rimg2sdat.py system.img -v 4

然后我们就可以删除system.img了

接下来,输入brotli.exe -9 system.new.dat 压缩 -9是指定最高压缩级(1-9级)
9级压缩相当久
然后我们就可以删除system.new.dat了

8.接下来,我们要修改/META-INF/com/google/android/updater-script,以使system.new.dat.br生效
看了下文件里面
package_extract_file函数 emmm 显然这个不行,它不能直接解包我们的system.new.dat.br 我们要换一个,在换用其它函数前,我们要把这个函数去掉(指package_extract_file('system.img', '/dev/block/bootdevice/by-name/system');)

然后查函数列表,发现block_image_update这个就不错.它可以同时支持我们的system.new.dat.br,system.new.dat
(函数用法看我的图文(二))
block_image_update('/dev/block/bootdevice/by-name/system', package_extract_file('system.transfer.list'), 'system.new.dat.br', 'system.patch.dat');
如果你想判断是否失败,你可以去掉后面的';'并使用短路运算符'||'来增加失败后执行的操作.比如 || abort('E1001: Failed to update system image.');
我的→

同样的,如果你想打包优化vendor分区也可以.但千万别打包boot等分区!!!!因为它是emmc(芯片直接打包区而不是ext4文件系统分区(硬刷可能会损坏字库))

你可能要替换卡刷包的这个文件才能解包br文件(最新的支持)
/META-INF/com/google/android/update-binary
你可以从最新的ROM(10.0)中提取并替换它(注意32/64位)

9.好了,重新将它打包回zip,享用ROM吧!
使用zip默认压缩模式就好 据说7-zip创建的压缩包比别家的压缩包更小哦!

10.(可选)签名ROM
ROM签名方式同Android应用签名方式类似,我们可以使用signapk.jar对apk/zip进行签名
我这里直接用APKDB工具进行签名了,对着打包好的zip右键,选择使用ApKDB编译,然后选择签名,等待签名完成就行

11.刷机
copy你的卡刷包进手机内部,使用twrp享用它吧!

(图文后半部分:知识储备)
---------------------------------------------超级分割--------------------------------
接下来,来说说ROM该怎么解包/打包流汗滑稽
我们先从解包开始
拿到一个ROM,我们可以使用基安人手一个的bandzip打开看看里面的文件目录,浏览一下其系统镜像打包格式,再做使用何种工具解包的选择
当然,你要是懒,那么你可以使用这个工具解包打包,然后本文结束受虐滑稽

点评:功能齐全又方便,适合everyone,但是不能解包专有线刷包格式。
只使用这个软件,不能提升我们的动手能力和技能,还是推荐一步一个脚印,慢慢来.

现在先说下三星的线刷包解包.(enc4已解密) 三星用户们应该都知道三星线刷固件”五件套”受虐滑稽神🐴?你不知道 。。 。

我们以AP的recovery解包为例(system太大 我的硬盘吃不消).我们使用万能的7-zip打开md5格式发现其是可以打开的,使用”信息”可以看到md5格式其实是tar压缩格式,并可以解压出其中的.lz4文件.如上图的recovery.img.lz4

那么md5 tar又有什么区别呢?其实 在md5文件中还含有检验,如果你不想检验,将md5改名为. tar就行嘿哈
而我们再想打开lz4却发现打不开了(提示数据错误)
Lz4是一种Linux下的压缩格式如果你是Linux环境,可以通过安装lz4(sudo apt install lz4 -y),,
并输入lz4 -d recovery.img.lz4即可解包出recovery.img 而我这里要说的是Windows(lz4同样有win版的),我们使用7-zip扩展来安装lz4依赖
扩展地址查看链接
下载后解压到7-zip目录下的Codecs文件夹

安装后 使用7Z I查看

然后你就会发现,你的7-zip已经可以打开lz4格式并可以解压了(实际上,不止lz4,你还可以打开Zstandard, Brotli(后文会提到),lz5, Lizard, Fast LZMA2等)

没装差插件前

我们再来看看miui的ROM

MIUI的线刷包解包是真的非常容易
我们可以直接打开(tgz tar格式),
然后就可以得到这样的一个线刷包目录了 里面有我们所需要的的system.img等
(部分解压缩软件可能要解压两次tgz. Tar特性流汗滑稽(套娃警告))

谷歌的线刷包我在图文(一)里已经给大家解包看了里面的架构了,这里我不写了受虐滑稽想知道各种img格式 回去看我的图文一
酷派(360)cpb格式解包可以用_破_解_版的奇酷刷机工具解包,我这里也不列出教程了
其它的线刷包,我们都可以尝试使用”万能”的7-zip打开查看,有的甚至可以直接解压

现在我们来看看卡刷包的解包
第一种是最简单的解包方式:直接解压,,修改完后压缩回去即可
(适用于直接打包/system文件夹的方式) 这种方式比较容易修改ROM

要注意下这个东西,尽量使用原包里面的:file_contexts,尽量别修改它.
修改这个文件可能导致基带丢失 系统FC
它与权限和SELinux有关
这个文件在后文中也还会再次提到
doge呵斥
.img解包

↑由.img格式构成的刷机包

这种方式常见于Android L以后的系统中(不再使用文件夹打包法,而是使用分区打包法,优缺点看我的图文(一)),同样是下文.new.dat , .new.dat.br打包的根基
首先,我们肯定要先将我们所需要的system.img解压出来得到单个文件啊,不解压出来还想进一步解包?做梦
如果你是Linux系统,你可以直接将.img文件进行挂载(推荐,因为这样容易保留链接和权限等信息),并修改之;
如果你是Windows也不要气馁,我们可以使用”万能”的7-zip打开/解压之

亦或者,我们可以使用 ImgExtractor来解压 ***推荐***
(对于大部分的Linux的img镜像这个都可以解压,有些文件系统的img 7z可解压不了哦)

直接把img文件拖过去就可以解压了
下载地址: 查看链接 当然我更推荐你去其它地方下载(如XDA)
参数很简单,直接 附带文件名即可解包(把img拖过去就行)

那么我们该怎么打包呢?
在Linux下,就很简单了(相信经常使用Linux的朋友们都知道)(如果你挂载了镜像可以跳过1-3步)
1.我们先制作镜像dd if=/dev/zero of=system.img bs=1M count=6000
2.接着,我们格式化镜像,并加入system分区卷标sudo mkfs.ext4 -F -L system system.img
3.挂载镜像mkdir android-mount;sudo mount system.img android-mount;
4.修改ROM(system)(copy文件)
5.卸载镜像(保存镜像)sudo umount android-mount
6.检查修复e2fsck -p -f system.img
7.(可选)精简镜像大小(把空余给去掉): resize2fs -M system.img懒得理
而Windows呢?则有点复杂了,主要是打包后我们还要修复权限,链接等信息(这可以解释为什么有些ROM是直接压缩成zip,后面再修复而不是打包成img并修复)
我们可以使用ROM制作工具打包(如果你之前使用它来解包ROM)如果没有使用怎么办呢?也不要着急
Adb中有这个文件(通常),我们可以使用它来打包
比如,我在adb目录下打包lib64文件夹,生成一个lib.img,我可以使用这个命令
make_ext4fs.exe -l 20M -S -a system lib.img system(预先将lib64 copy至system文件夹中)

让我们测试下使用Imgextractor解包的结果 显然可以解包

看 我们打包成功了,解包出来是lib_文件夹,我们可以打开看
不过呢,我们又遇到了一个新问题 文件权限问题,链接问题与Selinux问题
要解决这个问题,我们必须使用预设.通常是file_contexts(建议使用原ROM的文件)
make_ext4fs -l 6000M -S file_contexts -a system system_new.img system_dir
6000MB是打包大小,应当大于你之前解包镜像的大小或为系统分区大小
-S 后面指定的是使用预设的文件 必须是大写
-l 后面指定的是打包大小
-a 卷(挂载点)
-T代表对镜像中的unix文件时间戳进行设置,这里设置为0,表示1970-1-1
system_new.img打包成的镜像文件输出
system_dir打包的文件夹
我们可以使用
make_ext4fs -T 0 -S file_contexts -l 6000M -a system system_new.img system_dir
-s file_contexts指定了使用file_contexts里的预设
你也可以从这里获取该文件(file_contexts):查看链接
如果还是出了问题,那么有关权限怎么修复emmm 我建议你还是换Linux吧,当然,参考下面的代码修复也可

↑链接与设置权限 图文(二)

.new.dat解包

先解压刷机包,然后你会看到.new.dat文件
自从安卓5.0以后,谷歌采用了新的打包方式,不能再像4.4那样可以自己随便修改ROM了,那么肯定有基友为不能轻松地解包和打包system.new.dat而苦恼,不过没关系.上有政策下有对策.
老外写了这样一个工具,专门用于解包.new.dat文件 需要安装Python2.7以上 当然,也有用c/c++重写的,酷友们可以在GitHub上搜索
(壮哉我大Python)工具地址查看链接

(中文版的 不过需要Python3)

这里我copy了它的源代码 并进行了一些汉化和修改(汉化的版本需要Python3才能跑起来,如果你不使用Python3,可以用上面的工具地址下载原版)

汉化版下载: 查看链接
例:
sdat2img.py
sdat2img.py system.transfer.list system.new.dat
sdat2img.py system.transfer.list system.new.dat system.img

执行结果

输出成system.img,然后就可以按.img的解包法解包了
受虐滑稽反正我不喜欢这样打包回去 受虐滑稽
那么,我们又该怎么将.img打包成.new.dat?
有关这种格式的打包的相关代码,我们可以在这里找到
build/tools/releasetools/ blockimgdiff.py
并不是很推荐打包成new.dat,毕竟可以修改ROM了,直接打包成.img再压缩不更香吗?
如果真要打包,也不是不行
我们可以用图1的ROM制作工具打包

当然,我们还可以使用这个库
查看链接
img2sdat.py <system_img> [-o outdir] [-v version] [-p prefix]
-o 输出目录 -v Android版本 1 5.0 2 5.1 3 6.0 4 7.0或更高
如img2sdat system.img -v 4

这个库也不错rimg2sdat ***推荐√
查看链接
命令 与img2sdat基本一致
rimg2sdat.py -v 4 system.img

.new.dat.br解包
在图文(一)中,我已经初步介绍过.br格式

br文件实际就是使用Google就已经在官方博客上发布了新的压缩算法Brotli,使用Google官方提供的Brotli.exe就可以直接转换成dat文件

我们可以在这里下载brotli(如果你下载源代码,需要自己编译) 来解包/打包
查看链接
将system.new.dat.br 与brotli放在同一个目录下,执行
./brotli -d system.new.dat.br 解包,将得到.new.dat,然后按照.new.dat解包法解包就好
打包也很简单
使用命令 ./brotli -q 9 system.new.dat 进行压缩/打包 其中9是压缩水平(1-9,数值越高压缩效果越好)
我就不放图了

OPPO ozip解包

可以使用图文开始部分的ROM制作工具转换(不过需要RMB)

使用xda上的ozip2zip 然后再解包
在这里
需要使用Python3.6或更高版本
Github:查看链接
Xda原贴: 查看链接
在GitHub上下载后,在cmd中输入以下命令(Python3.6需要安装)
pip3 install pycryptodome
pip3 install docopt
接着,我们才能用ozip2zip工具解包
命令:ozipdecrypt.py <filename> [--mode=value]
例:ozipdecrypt.py PDEM10_11_OTA_0341_all_JP0xKUtTHjYL.ozip(我随便下的包)
然后,就可以使用bandzip等解压缩软件解包zip了

至于打包回ozip?没有必要!!!
Twrp不支持,官方rec不支持修改过签名的ROM

其它格式解包
我们要熟练使用”万能”工具7-zip,遇事不决,7z查看
我最后想介绍一种格式,后缀是.fs(.sfs),可以使用7-zip直接打开找到system.img

Emmm 其它冷门格式你还是上xda搜索吧
………
此处省略system分区内修改 调优教程(最简单的ROM修改 系统精简)
有关精简 相关emmm →
查看链接
你们有人问我可不可以出一篇ROM移植的教程 我@#$%$@$^*
OMG
上一次我做ROM移植还是17年的事情,移植colourOS给360N5,现在我的360木有了(送了)
/*
我emmm应该会写.保守估计三四个月后
我会拿魅蓝note6 写一篇移植colourOS的教程
别问我为什么是colourOS,问就是游戏玄学优化(以前我的华机畅享5s刷了colourOS后王者居然能满帧,360打游戏更烫了,不过也更稳了(CPU占用率高了啊))
*/(删掉)

=.=
那一篇图文我会把它明明为 续篇(四) DIY手机刷机包之:ROM移植
(可能会咕咕咕 主要是没时间 写代码+酷安图文也很累的呀)
卡刷包内结构(Aonly)
我们打包完了system,总该要知道卡刷包结构才知道该怎么放包吧=.=
最简单的 就是原封不动的替换/system system.img system.new.dat(.br) system.transfer.list 等文件 然后打包就行
Emmm 这么简单? 确实 就这么简单 ROM没有什么深奥的东西 最多就是图文(二)中修改刷机脚本的事了
/firmware-update BootLoader固件(当然 也有放在ROM根目录的)
/recovery Androidrecovery恢复环境相关文件
/file_contexts.bin file_contexts
/*.img 各种镜像文件(包括new.dat(.br),.fs等)看我的图文(二),有介绍
/META-INF/ 数字签名所在的文件夹(部分ROM在这里添加magisk等)
/META-INF/com/google/android 存放ROM刷机脚本
/*.sh 各种shell脚本,有其自己特殊的功能
/custom 魅族的预装
/data 有些手机会将这些文件释放到/data分区 主要是广告无用预装等
---------------------------------------------超级分割--------------------------------
doge笑哭
本系列图文到此就结束了
相信大家看完后仍然意犹未尽,想动手制作官改包,甚至是盗包了受虐滑稽
盗包其实也是个技术活,ROM内可能处处藏有原作签名等
甚至加密了的包
加密的包通常可以先刷再提取img
我这里不推荐大家看了这篇图文后去盗包,(特别是盗包后还转发说是自己原创的)受虐滑稽,这不尊重原作的行为很令人反感,如果你真想”盗包”,为何不与原作沟通,标注”参考”呢?

大多数盗取酷安图文的低素质群体们有尊重原作的意识么
比如说 从酷安这里搬运到头条
cos滑稽转载请注明出处 并通知我 谢谢合作哼唧
有的酷友给我留言,希望我出一篇ROM移植的教程emmm怎么说呢如果你真的想了解,酷安内大佬多多,又何必局限于我的这几篇图文呢?流汗滑稽

我不打算写(四)了 (主要是没时间 代码都没写完 不太想写(氵)文了 当然 有干货的话我也会与大家分享)
酷安的折叠和”文_字_狱”越来越厉害了…可能到时候我会转到Engage论坛奋战 doge笑哭害 希望酷安以后能越来越好吧

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多