本文最后更新于:2024年9月8日 凌晨
前言
由于小米手机在rom制作圈中的地位,本文以小米手机为例,介绍安卓ROM制作的基本流程。
认识刷机包文件
在制作入门前,首先先来拆解一个刷机包文件,了解一下其中内部的结构。
现在的刷机包主要分为两类:
- 线刷包: 使用fastboot工具刷入
- 卡刷包: 使用recovery工具刷入
- 9008包: 使用9008工具刷入
但实际上,这三种包只是刷入方式和格式的区别,其内部结构是一样的。刷机包的本质是将打包好的img镜像,通过某种方式,刷入到手机指定的分区中。
下面来具体分析几个包文件的结构:
miui_FUXI_OS1.0.8.0.UMCCNXM_14.0_240326_ENC
小米13的线刷卡刷合一包,作者为酷安的@白羊
解压后的文件结构如下: 已经删除了一些不必要的文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| │ 刷机脚本.bat │ ├─bin │ ├─android │ │ busybox │ │ zstd │ │ │ ├─platform-tools-darwin │ │ │ adb │ │ │ dmtracedump │ │ │ e2fsdroid │ │ │ etc1tool │ │ │ fastboot │ │ │ hprof-conv │ │ │ make_f2fs │ │ │ make_f2fs_casefold │ │ │ mke2fs │ │ │ mke2fs.conf │ │ │ NOTICE.txt │ │ │ sload_f2fs │ │ │ source.properties │ │ │ sqlite3 │ │ │ │ │ └─lib64 │ │ libc++.dylib │ │ │ ├─platform-tools-linux │ │ │ adb │ │ │ dmtracedump │ │ │ e2fsdroid │ │ │ etc1tool │ │ │ fastboot │ │ │ hprof-conv │ │ │ make_f2fs │ │ │ make_f2fs_casefold │ │ │ mke2fs │ │ │ mke2fs.conf │ │ │ NOTICE.txt │ │ │ sload_f2fs │ │ │ source.properties │ │ │ sqlite3 │ │ │ │ │ └─lib64 │ │ libc++.so │ │ │ └─platform-tools-windows │ adb.exe │ AdbWinApi.dll │ AdbWinUsbApi.dll │ awk.exe │ busybox.exe │ cho.exe │ curl.exe │ cut.exe │ dmtracedump.exe │ etc1tool.exe │ fastboot.exe │ FstabQF.exe │ hprof-conv.exe │ libwinpthread-1.dll │ make_f2fs.exe │ make_f2fs_casefold.exe │ mke2fs.conf │ mke2fs.exe │ NOTICE.txt │ source.properties │ sqlite3.exe │ zstd.exe │ ├─images │ abl.img │ aop.img │ aop_config.img │ bluetooth.img │ boot.img │ boot_kernelsu.img │ cpucp.img │ cust.img │ devcfg.img │ dsp.img │ dtbo.img │ featenabler.img │ hyp.img │ imagefv.img │ init_boot.img │ init_boot_kernelsu.img │ init_boot_magisk.img │ keymaster.img │ modem.img │ multiimgqti.img │ qupfw.img │ recovery.img │ recovery_twrp.img │ shrm.img │ super.img │ tz.img │ uefi.img │ uefisecapp.img │ vbmeta.img │ vbmeta_system.img │ vendor_boot.img │ vendor_boot_less.img │ xbl.img │ xbl_config.img │ xbl_ramdump.img │ └─META-INF └─com ├─android │ metadata │ metadata.pb │ otacert │ └─google └─android update-binary
|
下面来解释一下文件夹中的文件的作用:
- bin.android: 里面存放了一些常用工具,在刷机包中放置了busybox和zstd
- busybox: 一个类似于linux的工具集,可以在android中执行一些linux命令,如ls, cp等
- zstd: 一个压缩工具,用于解压缩刷机包中的压缩文件
- bin.platform-tools-darwin: 里面存放了一些macOS下的工具与依赖库
- bin.platform-tools-linux: 里面存放了一些linux下的工具与依赖库
- bin.platform-tools-windows: 里面存放了一些windows下的工具与依赖库
这部分主要是用在刷机脚本中,用于多平台的兼容。
- adb: android调试桥,用于和手机进行通信
- fastboot: 一个刷机工具,用于刷入img文件
- images: 里面存放了一些img分区镜像文件,这些文件是刷机包的核心,是要刷入到手机的分区中的文件
image 分区文件解析
这些镜像文件是刷机包的核心,是要刷入到手机的分区中的文件,每个文件对应一个分区,刷机包的制作就是将这些文件打包成一个刷机包文件。