如何使用MToolkit进行ROM开发

2,940 阅读6分钟

这篇文章是ROM开发的一些流程,和个人工具的使用方法,推广元素很强哈,因为有这方面需求的往往不是开发者(反而是很多高中都没有念完的酷安基友们),而一些安卓开发者往往不会使用这类的工具,其实也是自己工具的一个使用教程

前几天发了一篇对官改圈子的吐槽

聊聊官改

我以小米10/小米8 Lite的ROM开发的流程,还有工具箱的使用为例

  • 小米10是比较新的设备,采用了动态分区,所以使用了教新的刷机机制
  • 小米8 Lite是比较旧的设备,传统的sar分区结构,非动态分区

什么是动态分区?

首先先了解什么是传统的分区,在安卓设备的传统分区中,例如64g的手机储存,你会发现你能用的只有40多g,原因在于手机的系统占用了很多的分区

例如小米8 Lite中:

  • system 空间占用3g
  • vendor 空间占用3g
  • firmware等分区占用若干

这也是所有旧设备的分区状况,区别在于system,vendor等分区大小不一样,而实际来看,vendor中的内容只有1g多一点,厂商为了保守起见,之后的一系列扩展需求,所以其实是浪费了用户的很多空间

所以动态分区中的做法是:

  • 在打包镜像的时候生成镜像需要的空间,比如vendor某次升级里面的内容为1.1g,那么这个镜像的生成大小就为1.1g
  • 刷机的时候动态调整了设备各个分区的大小为镜像大小(如上次更新system镜像大小为2.5g,下一次更新就可以根据刷机脚本动态调整为2.6g等,无需预留特别多的空间)

我们需要使用到的工具:

  • MT管理器
  • MToolkit

刷机的流程(这里指卡刷,也就是Rec中刷机)

Rec解压出刷机包的单个文件->META-INF/com/google/android/update-binary,这是个可以执行的文件,随后Rec直接执行这个文件,并将ROM的路径作为这个文件的参数,此时刷机开始

update-binary做了什么

update-binary负责提供刷机用到的一系列执行文件,例如unzip,chmod等,然后定义了一系列函数,主要负责解析META-INF/com/google/android/updater-script这一刷机脚本,updater-script中的脚本内容也就是不断调用update-binary中的函数,例如 ui_print,package_extract_file,run_program

下载完整的刷机包后用MT管理器直接打开

  • META-INF:ROM的签名文件夹,刷机脚本,刷机二进制
  • firmware-update:基带相关镜像文件
  • 外面的文件:system,vendor,boot等镜像

看下它的刷机脚本

所以就是通过ui_print显示当前正执行的操作,set_progress更新进度,package_extract_file刷写分区,update_dynamic_partitions动态更改分区大小等

做ROM开发,一般只需要主要修改它的系统层,和去除一些开机的验证,添加更多的功能,修改内核去除验证,去除开机卡米的验证,vbmeta,dtb验证等,这一系列交给工具箱完成

MToolkit/ROM工具使用教程(声明是会员功能)

首先需要了解各个功能的作用

MToolkit/ROM工具使用教程

单个功能使用的场景是比较少的,是为了有这些需求的人预留的功能,更多的会直接使用一键中的功能

打开App初始没有工程,点击新建工程

一键功能截图

点击执行会弹出文件管理器,我们找到下载的ROM包(zip),单击即可,随后工具箱便开始跑代码(整个过程会拦截你在工具箱内部的返回键,在执行结束后会释放,并通过弹窗给予提示)

工具箱默认勾选了解包的部分,这部分执行结束后会直接暴露出可以供开发者修改的文件目录 如下

在工程名的/UnpackedImg/下便有system/vendor这两个文件夹,里面就是对应分区的原始内容(就是没有什么壳子了),所以此时你便可以去自定义自己的内容,删除/添加内置应用,反编译修改系统apk等,

接下来你便可以根据自己ROM的情况勾选剩下的部分。 下列功能是针对MIUI ROM定制功能

  • 精简系统
  • 破解卡米
  • 状态栏时间显秒

再点执行

所以如果你不是MIUI ROM这几个一定不要打勾,随后如果你是动态分区,如上图后面几个有标记的也不要打勾。 上面的所有功能中,只有涉及到boot中的部分是需要root的(需要挂载boot分区,没root无法),其他的功能手机没有root也能正常使用。

是的,就这么简单,如果你不会自定义定制,那么就如同我对小米10的做法一样,直接全部勾选(除了动态分区不能勾选的),然后执行,出包,刷上,此时的ROM虽然没有太多的功能,但是有一系列破解,并且是正常的官改系统。能装xposed这些框架的。 工具箱的解包打包部分理论是覆盖安卓全版本,deodex部分仅支持8.0以上的ROM,整体对8.0以上的ROM稳定性较高。

  • 如果你对博文的任何内容有疑问,随时留言,再简单的问题,我看到就会回复你。如果你有看我上面对官改现状的一些吐槽,这些功能都绝对是有价值性的,即使会用到的人的却不多。
  • 我不会去主动的向任何个人安利我的会员功能,我只想用到它的是真正需要的人,也有很多人通过我的工具学会了自己ROM开发,通过我的工具去发布官改系统。
  • 因为在博客有很多人发布的ROM开发教程是使用电脑端的一些软件(也一样是付费的),那些软件其实早就过时,不兼容新的设备了(我不是恶意抬杠别人的产品哈,最初我加了他们的内测群反馈了核心的bug以及修复的方案,就给我踢掉了)。
  • 这一功能的初次诞生是在一年前,我用bat编写出了整个功能,后来又使用python从头到尾的重构,由于不想直接卖断源码所以pc端并未上线,等待Flutter PC端的开发