<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.uotan.cn/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Iibchara-dev</id>
	<title>Uotan Wiki · 刷机百科 - 用户贡献 [zh-cn]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.uotan.cn/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Iibchara-dev"/>
	<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E7%89%B9%E6%AE%8A:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/Iibchara-dev"/>
	<updated>2026-06-13T21:57:04Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=596</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=596"/>
		<updated>2024-03-10T13:05:32Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* 欢迎来到 120px · 刷机百科 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 欢迎来到 &amp;lt;span style=&amp;quot;display: inline-block; vertical-align: middle; padding-bottom: 11px;&amp;quot;&amp;gt;[[文件:Uotan Wiki.png|120px]]&amp;lt;/span&amp;gt; · 刷机百科 =&lt;br /&gt;
&lt;br /&gt;
'''我们致力于打造一个更适合国人使用、更贴近刷机本身的玩机知识站点'''&lt;br /&gt;
&lt;br /&gt;
'''本站现有{{NUMBEROFUSERS}}名用户，{{NUMBEROFEDITS}}次编辑，{{NUMBEROFARTICLES}}篇条目，{{NUMBEROFACTIVEUSERS}}位活跃编辑者。'''&lt;br /&gt;
== 刷机入门 ==&lt;br /&gt;
# [[ADB与Fastboot|ADB 与 Fastboot]]&lt;br /&gt;
# [[解锁Bootloader|解锁 Bootloader]]&lt;br /&gt;
# [[刷入第三方Recovery|刷入第三方 Recovery]]&lt;br /&gt;
# [[获取Root权限|获取 Root 权限]]&lt;br /&gt;
# [[Miflash线刷|MiFlash 线刷]]&lt;br /&gt;
&lt;br /&gt;
== 进阶内容 ==&lt;br /&gt;
# [[使用柚坛工具箱进行线刷]]&lt;br /&gt;
# [[ADB SideLoad]]&lt;br /&gt;
# [[Fastboot Update]]&lt;br /&gt;
# [[Fastboot 命令]]&lt;br /&gt;
# [[刷入任意单独镜像]]&lt;br /&gt;
# [[Android Verified Boot|AVB（Android Verified Boot）]]&lt;br /&gt;
# [[Super Empty|Super empty]]&lt;br /&gt;
# [[9008深度刷机|9008 深度刷机]]&lt;br /&gt;
# [[MTK Flashtool深度刷机|MTK Flashtool 深度刷机]]&lt;br /&gt;
# [[提取分区]]&lt;br /&gt;
# [[修改分区]]&lt;br /&gt;
# [[QCN]]&lt;br /&gt;
&lt;br /&gt;
== 系统修改 ==&lt;br /&gt;
# [[ADB命令|ADB 命令]]&lt;br /&gt;
# [[Magisk模块|Magisk 模块]]&lt;br /&gt;
# [[LsPosed 模块|LSPosed 模块]]&lt;br /&gt;
# [[KSU 模块]]&lt;br /&gt;
# [[修改方案合集]]&lt;br /&gt;
&lt;br /&gt;
== Mindows工具箱 ==&lt;br /&gt;
# [[为手机刷入Windows|为手机刷入 Windows]]&lt;br /&gt;
# [[更新驱动程序]]&lt;br /&gt;
# [[重新安装Windows|重新安装 Windows]]&lt;br /&gt;
# [[一些常见问题及其解决方案]]&lt;br /&gt;
&lt;br /&gt;
== 高级内容 ==&lt;br /&gt;
# [[Android 分区详解]]&lt;br /&gt;
# [[GKI 内核]]&lt;br /&gt;
# [[如何解包 Android ROM]]&lt;br /&gt;
# [[如何打包 Android ROM]]&lt;br /&gt;
# [[如何从源码构建 TWRP Recovery]]&lt;br /&gt;
# [[如何从源码构建 Android ROM]]&lt;br /&gt;
# [[使用edl.py|使用 edl.py]]&lt;br /&gt;
# [[为手机安装Linux|为手机安装 Linux]]&lt;br /&gt;
# [[Git使用教程]]&lt;br /&gt;
# [[Android内核编译入门]]&lt;br /&gt;
# [[为新设备编写Recovery device tree]]&lt;br /&gt;
# [[为新设备编写类原生device tree]]&lt;br /&gt;
&lt;br /&gt;
== 知名玩机博主 ==&lt;br /&gt;
# [[极客湾Geekerwan]]&lt;br /&gt;
# [[小白测评]]&lt;br /&gt;
# [[微积分WekiHome]]&lt;br /&gt;
# [[晨钟酱Official]]&lt;br /&gt;
# [[江灵夏草]]&lt;br /&gt;
# [[柚坛UOTAN]]&lt;br /&gt;
# [[派大宝UI]]&lt;br /&gt;
# [[我可以等你十年]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[凡生TalkING]]&lt;br /&gt;
注：以上排名不分先后&lt;br /&gt;
&lt;br /&gt;
== 知名良心开发者 ==&lt;br /&gt;
# [[暮间雾]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[Amktiao]]&lt;br /&gt;
# [[小太阳ACA]]&lt;br /&gt;
# [[hellobbn]]&lt;br /&gt;
注：以上排名不分先后&lt;br /&gt;
&lt;br /&gt;
== 更多词条 ==&lt;br /&gt;
# [[设备代号收录集合]]&lt;br /&gt;
# [[通用系统镜像]]&lt;br /&gt;
# [[AOSP]]&lt;br /&gt;
# [[Linux mainlining]]&lt;br /&gt;
# [[Windows on arm|WOA (Windows on arm)]]&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=595</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=595"/>
		<updated>2024-03-01T11:28:54Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* 欢迎来到 120px · 刷机百科 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 欢迎来到 &amp;lt;span style=&amp;quot;display: inline-block; vertical-align: middle; padding-bottom: 11px;&amp;quot;&amp;gt;[[文件:Uotan Wiki.png|120px]]&amp;lt;/span&amp;gt; · 刷机百科 =&lt;br /&gt;
&lt;br /&gt;
'''我们致力于打造一个更适合国人使用、更贴近刷机本身的玩机知识站点'''&lt;br /&gt;
&lt;br /&gt;
'''本站现有{{NUMBEROFUSERS}}{{NUMBEROFACTIVEUSERS}}名用户，{{NUMBEROFEDITS}}次编辑，{{NUMBEROFARTICLES}}篇条目，{{NUMBEROFACTIVEUSERS}}位活跃编辑者。'''&lt;br /&gt;
== 刷机入门 ==&lt;br /&gt;
# [[ADB与Fastboot|ADB 与 Fastboot]]&lt;br /&gt;
# [[解锁Bootloader|解锁 Bootloader]]&lt;br /&gt;
# [[刷入第三方Recovery|刷入第三方 Recovery]]&lt;br /&gt;
# [[获取Root权限|获取 Root 权限]]&lt;br /&gt;
# [[Miflash线刷|MiFlash 线刷]]&lt;br /&gt;
&lt;br /&gt;
== 进阶内容 ==&lt;br /&gt;
# [[使用柚坛工具箱进行线刷]]&lt;br /&gt;
# [[ADB SideLoad]]&lt;br /&gt;
# [[Fastboot Update]]&lt;br /&gt;
# [[Fastboot 命令]]&lt;br /&gt;
# [[刷入任意单独镜像]]&lt;br /&gt;
# [[Android Verified Boot|AVB（Android Verified Boot）]]&lt;br /&gt;
# [[Super Empty|Super empty]]&lt;br /&gt;
# [[9008深度刷机|9008 深度刷机]]&lt;br /&gt;
# [[MTK Flashtool深度刷机|MTK Flashtool 深度刷机]]&lt;br /&gt;
# [[提取分区]]&lt;br /&gt;
# [[修改分区]]&lt;br /&gt;
# [[QCN]]&lt;br /&gt;
&lt;br /&gt;
== 系统修改 ==&lt;br /&gt;
# [[ADB命令|ADB 命令]]&lt;br /&gt;
# [[Magisk模块|Magisk 模块]]&lt;br /&gt;
# [[LsPosed 模块|LSPosed 模块]]&lt;br /&gt;
# [[KSU 模块]]&lt;br /&gt;
# [[修改方案合集]]&lt;br /&gt;
&lt;br /&gt;
== Mindows工具箱 ==&lt;br /&gt;
# [[为手机刷入Windows|为手机刷入 Windows]]&lt;br /&gt;
# [[更新驱动程序]]&lt;br /&gt;
# [[重新安装Windows|重新安装 Windows]]&lt;br /&gt;
# [[一些常见问题及其解决方案]]&lt;br /&gt;
&lt;br /&gt;
== 高级内容 ==&lt;br /&gt;
# [[Android 分区详解]]&lt;br /&gt;
# [[GKI 内核]]&lt;br /&gt;
# [[如何解包 Android ROM]]&lt;br /&gt;
# [[如何打包 Android ROM]]&lt;br /&gt;
# [[如何从源码构建 TWRP Recovery]]&lt;br /&gt;
# [[如何从源码构建 Android ROM]]&lt;br /&gt;
# [[使用edl.py|使用 edl.py]]&lt;br /&gt;
# [[为手机安装Linux|为手机安装 Linux]]&lt;br /&gt;
# [[Git使用教程]]&lt;br /&gt;
# [[Android内核编译入门]]&lt;br /&gt;
# [[为新设备编写Recovery device tree]]&lt;br /&gt;
# [[为新设备编写类原生device tree]]&lt;br /&gt;
&lt;br /&gt;
== 知名玩机博主 ==&lt;br /&gt;
# [[极客湾Geekerwan]]&lt;br /&gt;
# [[小白测评]]&lt;br /&gt;
# [[微积分WekiHome]]&lt;br /&gt;
# [[晨钟酱Official]]&lt;br /&gt;
# [[江灵夏草]]&lt;br /&gt;
# [[柚坛UOTAN]]&lt;br /&gt;
# [[派大宝UI]]&lt;br /&gt;
# [[我可以等你十年]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[凡生TalkING]]&lt;br /&gt;
注：以上排名不分先后&lt;br /&gt;
&lt;br /&gt;
== 知名良心开发者 ==&lt;br /&gt;
# [[暮间雾]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[Amktiao]]&lt;br /&gt;
# [[小太阳ACA]]&lt;br /&gt;
# [[hellobbn]]&lt;br /&gt;
注：以上排名不分先后&lt;br /&gt;
&lt;br /&gt;
== 更多词条 ==&lt;br /&gt;
# [[设备代号收录集合]]&lt;br /&gt;
# [[通用系统镜像]]&lt;br /&gt;
# [[AOSP]]&lt;br /&gt;
# [[Linux mainlining]]&lt;br /&gt;
# [[Windows on arm|WOA (Windows on arm)]]&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E5%A6%82%E4%BD%95%E6%89%93%E5%8C%85_Android_ROM&amp;diff=509</id>
		<title>如何打包 Android ROM</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E5%A6%82%E4%BD%95%E6%89%93%E5%8C%85_Android_ROM&amp;diff=509"/>
		<updated>2024-02-16T18:30:02Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* 2. 打包 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 提醒事项 ==&lt;br /&gt;
注意：本教程以在 Windows 10 平台下进行打包操作为例，并确保你拥有可以访问国际网络的能力&lt;br /&gt;
&lt;br /&gt;
== 格式确认 ==&lt;br /&gt;
在正式开始之前，你需要了解你接下来需要打包的是哪种类型的文件。本教程将介绍&lt;br /&gt;
&lt;br /&gt;
# [[#img格式打包|'''img格式''']]&lt;br /&gt;
# [[#dat格式打包|'''dat格式''']]&lt;br /&gt;
# [[#br格式打包|'''br格式''']]&lt;br /&gt;
&lt;br /&gt;
== img格式打包 ==&lt;br /&gt;
&lt;br /&gt;
=== 特别注意 ===&lt;br /&gt;
本章节将分为三个部分，分别是：&lt;br /&gt;
&lt;br /&gt;
# '''ext4 格式 img 打包'''&lt;br /&gt;
# '''erofs 格式 img 打包'''&lt;br /&gt;
# '''boot/recovery类型 img 打包'''&lt;br /&gt;
&lt;br /&gt;
=== 1. ext4 格式打包 ===&lt;br /&gt;
本部分将分为两个部分(两种打包方式)，分别是&lt;br /&gt;
&lt;br /&gt;
# 通过 make_ext4fs 打包&lt;br /&gt;
# 通过 mke2fs + e2fsdroid 打包&lt;br /&gt;
&lt;br /&gt;
==== 1. 通过 make_ext4fs 打包 ====&lt;br /&gt;
&lt;br /&gt;
===== 1.获得所需工具 - make_ext4fs - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/make_ext4fs.exe GitHub] =====&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问工具链接并点击 '''下载图标''' 下载文件&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== 2. 打包 =====&lt;br /&gt;
# 将工具放置到'''所需打包分区'''所在目录&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 记录 '''config\分区名_size.txt''' 内数值&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;make_ext4fs.exe -J -T 1167580800 -S config\分区名_file_contexts -l 上一步记录的数值 -C config\分区名_fs_config -L 分区名 -a 分区名 打包文件名 分区文件夹名&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;make_ext4fs.exe -J -T 1167580800 -S config\vendor_file_contexts -l 1145141919 -C config\vendor_fs_config -L vendor -a vendor vendor_new.img vendor&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
* 打包要求您的文件需要'''严格按照解包后的结构'''（即'''所需打包文件夹 + config文件夹'''）存放，避免造成找不到文件的情况。如果您的机器是动态分区，请参考第二种打包方式&lt;br /&gt;
* 正确存放示例：&amp;lt;code&amp;gt;vendor config make_ext4fs.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 2. 通过 mke2fs + e2fsdroid 打包 ====&lt;br /&gt;
&lt;br /&gt;
===== 1. 获得所需工具 - mke2fs + e2fsdroid =====&lt;br /&gt;
'''所需环境：Python''' - [https://www.python.org/ 官网]&lt;br /&gt;
&lt;br /&gt;
所需工具:&lt;br /&gt;
* mke2fs - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/mke2fs.exe GitHub]&lt;br /&gt;
* e2fsdroid - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/e2fsdroid.exe GitHub]&lt;br /&gt;
* 工具运行库 - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/cygwin1.dll GitHub]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问对应链接 并点击 '''下载图标''' 下载文件&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fspatch - [https://github.com/affggh/fspatch GitHub]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问 fspatch 仓库并点击 '''Code - Download zip''' 下载&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== 2. 打包 =====&lt;br /&gt;
&lt;br /&gt;
# 将工具及运行库放置到'''所需打包分区'''所在目录&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/pre&amp;gt; 示例：&amp;lt;pre&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 记录'''config\分区名_size.txt'''内数值，并除以'''4096'''后的数值 (例如: 11451419 / 4096)。如果有'''小数点'''（如 114514.19），请向上取整（如 114515）&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;mke2fs -O ^has_journal -L 分区名 -I 256 -M /分区名 -m 0 -t ext4 -b 4096 打包文件名 上一步记录的数值&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;mke2fs -O ^has_journal -L vendor -I 256 -M /vendor -m 0 -t ext4 -b 4096 vendor_new.img 114515&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;e2fsdroid -e -T 1167580800 -S 分区名_fs_config的绝对路径 -C 分区名_fs_config的绝对路径 -a /分区名 -f 分区文件夹名 上一步输入的打包文件名&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;e2fsdroid -e -T 1167580800 -S D:\homo\config\vendor_file_contexts -C D:\homo\config\vendor_fs_config -a /vendor -f vendor vendor_new.img&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* 打包要求您的文件需要'''严格按照解包后的结构'''（即'''所需打包文件夹 + config文件夹'''）存放，避免造成找不到文件的情况。&lt;br /&gt;
* 正确存放示例：&amp;lt;code&amp;gt;vendor config mke2fs.exe e2fsdroid.exe cygwin1.dll fspatch.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. erofs 格式打包 ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 获得所需工具 - mkfs.erofs ====&lt;br /&gt;
所需环境：Python - [https://www.python.org/ 官网]&lt;br /&gt;
&lt;br /&gt;
所需工具:&lt;br /&gt;
* mkfs.erofs - [https://github.com/sekaiacg/erofs-utils GitHub]&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问工具 GitHub 仓库并从 '''Release''' 内下载工具&amp;lt;/p&amp;gt;&lt;br /&gt;
* fspatch - [https://github.com/affggh/fspatch GitHub]&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问 fspatch 仓库并点击 '''Code - Download zip''' 下载&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2. 打包 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具内所有文件放置到'''所需打包分区'''所在目录&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;mkfs.erofs -zlz4hc,8 -T 1167580800 --mount-point=/分区名 --fs-config-file=分区名_fs_config的绝对路径 --file-contexts=分区名_file_contexts的绝对路径 打包文件名 分区文件夹名&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;mkfs.erofs -zlz4hc,8 -T 1167580800 --mount-point=/vendor --fs-config-file=D:\homo\config\vendor_fs_config --file-contexts=D:\homo\config\vendor_file_contexts vendor_new.img vendor&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* 打包要求您的文件需要'''严格按照解包后的结构'''（即'''所需打包文件夹 + config文件夹'''）存放，避免造成找不到文件的情况。&lt;br /&gt;
* 正确存放示例：&amp;lt;code&amp;gt;vendor config mkfs.erofs.exe winfsp-x64.dll cygwin1.dll fspatch.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. boot/recovery类型 img 打包 ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 获得所需工具 - magiskboot([https://github.com/ookiineko/magiskboot_build GitHub]) ====&lt;br /&gt;
请访问工具 GitHub 仓库并从 Release 内下载工具&lt;br /&gt;
&lt;br /&gt;
==== 2. 打包 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具放置到'''所需打包的boot/recovery'''的'''所在目录'''&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;magiskboot.exe repack 原img文件 新img文件&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;magiskboot.exe repack boot.img boot_new.img&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* 请'''严格按照'''解包教程内的'''解包方法'''操作才可使用本方法进行打包&lt;br /&gt;
&lt;br /&gt;
== dat格式打包 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 获得所需工具 - img2sdat([https://kkgithub.com/xpirt/img2sdat GitHub]) ===&lt;br /&gt;
所需环境: Python([https://www.python.org/ 官网])&lt;br /&gt;
&lt;br /&gt;
访问 img2sdat 仓库并点击 Code - Download zip 下载&lt;br /&gt;
&lt;br /&gt;
=== 2. 打包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 img文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;pre&amp;gt;python img2sdat.py img文件 -v 4 [-p 分区名]&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;python img2sdat.py system.img -v 4 -p system&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;[-p 分区名]&amp;lt;/code&amp;gt; 为可选项 不传入此参数打包得到的 dat 名称默认为 &amp;lt;code&amp;gt;system.new.dat&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;system.patch.dat&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;system.transfer.list&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== br格式打包 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 获得所需工具 - brotli([https://github.com/google/brotli/releases GitHub]) ===&lt;br /&gt;
请访问工具 GitHub 仓库并从 Release 内下载工具&lt;br /&gt;
&lt;br /&gt;
=== 2. 打包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 br文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;brotli -q 5 dat文件 -o 输出的br文件&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;brotli -q 5 system.new.dat -o system.new.dat.br&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会，br文件将会被解压，解压后的文件在'''同目录'''&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* '''-q''' 后的数字为压缩等级，可选1 - 9。数字越大，压缩率越高，耗时越长。&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E5%A6%82%E4%BD%95%E8%A7%A3%E5%8C%85_Android_ROM&amp;diff=508</id>
		<title>如何解包 Android ROM</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E5%A6%82%E4%BD%95%E8%A7%A3%E5%8C%85_Android_ROM&amp;diff=508"/>
		<updated>2024-02-16T16:41:50Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 提醒事项 ==&lt;br /&gt;
注意：本教程以在 Windows 10 平台下进行解包操作为例，并确保你拥有可以访问国际网络的能力。在阅读本篇wiki前，请确保你有一定的基础。&lt;br /&gt;
&lt;br /&gt;
== 格式确认 ==&lt;br /&gt;
在正式开始之前，你需要了解你接下来需要解包的是哪种类型的文件。本教程将介绍&lt;br /&gt;
&lt;br /&gt;
# [[#Payload.bin解包|'''payload.bin''']]&lt;br /&gt;
# [[#super.img 解包|'''super.img''']]&lt;br /&gt;
# [[#ozip 解包|'''ozip格式''']]&lt;br /&gt;
# [[#br格式解包|'''br格式''']]&lt;br /&gt;
# [[#dat格式解包|'''dat格式(以及vivo分段dat)''']]&lt;br /&gt;
# [[#img格式解包|'''img格式''']]&lt;br /&gt;
&lt;br /&gt;
== Payload.bin解包 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 获得所需工具 - Payload dumper go - [https://kkgithub.com/ssut/payload-dumper-go GitHub] ===&lt;br /&gt;
请访问工具 GitHub 仓库并从 Release 内下载工具&lt;br /&gt;
&lt;br /&gt;
=== 2. 解包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 payload.bin 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;payload-dumper-go.exe payload.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
# 小等一会 payload.bin 内的所有文件将会解压到 output_xxx 目录内&lt;br /&gt;
&lt;br /&gt;
=== 3. 进阶用法[可选] ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 只解包某个分区 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 payload.bin 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;payload-dumper-go.exe -p 所需分区名 payload.bin&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;payload-dumper-go.exe -p system payload.bin&amp;lt;/code&amp;gt; )&lt;br /&gt;
# 小等一会 所指定的文件将会解压到 output_xxx 目录内&lt;br /&gt;
&lt;br /&gt;
==== 2. 只解包部分分区 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 payload.bin 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;payload-dumper-go.exe -l payload.bin&amp;lt;/code&amp;gt; 以列出 payload.bin 内所有的分区文件&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;payload-dumper-go.exe -p 所需分区名并以英文逗号分隔 payload.bin&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;payload-dumper-go.exe -p system,vendor payload.bin&amp;lt;/code&amp;gt; )&lt;br /&gt;
# 小等一会 所指定的文件将会解压到一个名为 output_xxx 的目录内&lt;br /&gt;
&lt;br /&gt;
注意：指定的顺序需要按照工具所列出的输入，否则无法正常解压指定的分区(如：system,vendor √ vendor,system ×)&lt;br /&gt;
&lt;br /&gt;
== super.img 解包 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 获得所需工具 - lpunpack([https://github.com/unix3dgforce/lpunpack GitHub]) ===&lt;br /&gt;
所需环境: Python([https://www.python.org/ 官网])&lt;br /&gt;
&lt;br /&gt;
访问 lpunpack 仓库并点击 Code - Download zip 下载&lt;br /&gt;
&lt;br /&gt;
=== 2. 解包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 super.img 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;python lpunpack.py super.img output&amp;lt;/code&amp;gt;&lt;br /&gt;
# 小等一会 super.img 内的所有文件将会解压到 output 目录内&lt;br /&gt;
&lt;br /&gt;
=== 3. 进阶用法[可选] ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 只想要某个分区 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 super.img 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;python lpunpack.py -p 所需分区名 super.img output&amp;lt;/code&amp;gt;(示例: &amp;lt;code&amp;gt;python lpunpack.py -p system_a super.img output&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== 特别注意 ===&lt;br /&gt;
由于小米线刷包提供的是 sparse image(simg) 而解压 super.img 前需要转换为 raw image(rimg) 请跟随以下步骤转换&lt;br /&gt;
&lt;br /&gt;
# 下载 simg2img([https://github.com/KinglyWayne/simg2img_win GitHub])&lt;br /&gt;
# 解压到 super.img 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;simg2img.exe super.img super.rimg.img&amp;lt;/code&amp;gt;&lt;br /&gt;
# 小等一会 super.img 将会转换为 raw image&lt;br /&gt;
&lt;br /&gt;
注: 转换之后上面教程中的 super.img 请替换为 super.rimg.img(示例: &amp;lt;code&amp;gt;python lpunpack.py super.rimg.img output&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== ozip 解包 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 获得所需工具 - oppo_ozip_decrypt([https://github.com/bkerler/oppo_ozip_decrypt GitHub]) ===&lt;br /&gt;
所需环境: Python([https://www.python.org/ 官网])&lt;br /&gt;
&lt;br /&gt;
访问 oppo_ozip_decrypt 仓库并点击 Code - Download zip 下载&lt;br /&gt;
&lt;br /&gt;
=== 2. 解包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 ozip 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;pip install -r requirements.txt&amp;lt;/code&amp;gt; (只需运行一次 即后续使用无需再次运行)&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;python ozipdecrypt.py Example.ozip&amp;lt;/code&amp;gt; (这里的 Example.ozip 替换为你所需要解压的 ozip 文件)&lt;br /&gt;
# 小等一会 ozip 将会转换为 zip&lt;br /&gt;
&lt;br /&gt;
== br格式解包 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 获得所需工具 - brotli([https://github.com/google/brotli/releases GitHub]) ===&lt;br /&gt;
请访问工具 GitHub 仓库并从 Release 内下载工具&lt;br /&gt;
&lt;br /&gt;
=== 2. 解包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 br文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;brotli.exe -d br文件&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;brotli.exe -d system.new.dat.br&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 小等一会 br文件 将会被解压 解压后的文件在同目录内&lt;br /&gt;
&lt;br /&gt;
=== 3. 进阶使用[可选] ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 解包后删除源文件 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 br文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;brotli.exe -j -d br文件&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;brotli.exe -j -d system.new.dat.br&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 小等一会 br文件 将会被解压到同目录下 同时 br文件 也会被删除&lt;br /&gt;
&lt;br /&gt;
== dat格式解包 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 获得所需工具 - sdat2img([https://github.com/xpirt/sdat2img GitHub]) ===&lt;br /&gt;
所需环境: Python([https://www.python.org/ 官网])&lt;br /&gt;
&lt;br /&gt;
访问 sdat2img 仓库并点击 Code - Download zip 下载&lt;br /&gt;
&lt;br /&gt;
=== 2. 解包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 dat文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;python sdat2img.py transfer.list文件 dat文件 [输出img名]&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;python sdat2img.py system.transfer.list system.new.dat system.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 小等一会 dat文件 将会被解压 解压后的文件在同目录内&lt;br /&gt;
&lt;br /&gt;
注意：&amp;lt;code&amp;gt;[输出img名]&amp;lt;/code&amp;gt; 为可选项 不传入此参数解压得到的 img 名称默认为 system.img&lt;br /&gt;
&lt;br /&gt;
=== 3. vivo 分段dat 解包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 dat文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;type dat文件.* &amp;gt; dat文件&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;type system.new.dat.* &amp;gt; system.new.dat&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;python sdat2img.py transfer.list文件 dat文件 [输出img名]&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;python sdat2img.py system.transfer.list system.new.dat system.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 小等一会 dat文件 将会被解压 解压后的文件在同目录内&lt;br /&gt;
&lt;br /&gt;
注意：&amp;lt;code&amp;gt;[输出img名]&amp;lt;/code&amp;gt; 为可选项 不传入此参数解压得到的 img 名称默认为 system.img&lt;br /&gt;
&lt;br /&gt;
== img格式解包 ==&lt;br /&gt;
&lt;br /&gt;
=== 特别注意 ===&lt;br /&gt;
本章节将分为三个部分，分别是&lt;br /&gt;
&lt;br /&gt;
# ext4 格式 img 解压&lt;br /&gt;
# erofs 格式 img 解压&lt;br /&gt;
# boot/recovery类型 img 解压&lt;br /&gt;
&lt;br /&gt;
=== 1. ext4 格式解包 ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 获得所需工具 - imgextractor &amp;amp; ext4 ====&lt;br /&gt;
所需环境: Python([https://www.python.org/ 官网])&lt;br /&gt;
&lt;br /&gt;
所需工具:&lt;br /&gt;
&lt;br /&gt;
imgextractor - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/imgextractor.py GitHub] &amp;amp; ext4 - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/ext4.py GitHub]&lt;br /&gt;
&lt;br /&gt;
访问对应链接 并点击 下载图标 下载文件&lt;br /&gt;
&lt;br /&gt;
==== 2. 解包 ====&lt;br /&gt;
&lt;br /&gt;
# 将文件放置到 img文件 所在目录(imgextractor.py 和 ext4.py 均需要放置)&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;python imgextractor.py img文件 输出目录&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;python imgextractor.py system.img system&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 小等一会 img文件 将会被解压&lt;br /&gt;
&lt;br /&gt;
=== 2. erofs 格式解包 ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 获得所需工具 - extract.erofs([https://github.com/sekaiacg/erofs-utils GitHub]) ====&lt;br /&gt;
请访问工具 GitHub 仓库并从 Release 内下载工具&lt;br /&gt;
&lt;br /&gt;
==== 2. 解包 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具内所有文件放置到 img文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;extract.erofs.exe -i img文件 -o 输出目录&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;extract.erofs.exe -i system.img -o system&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 小等一会 img文件 将会被解压&lt;br /&gt;
&lt;br /&gt;
=== 3. boot/recovery类型 img 解压包 ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 获得所需工具 - magiskboot([https://github.com/ookiineko/magiskboot_build GitHub]) ====&lt;br /&gt;
请访问工具 GitHub 仓库并从 Release 内下载工具&lt;br /&gt;
&lt;br /&gt;
==== 2. 解包 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具放置到 img文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;magiskboot.exe unpack -h img文件&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;magiskboot.exe unpack -h boot.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 小等一会 img文件 将会被解压&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E5%A6%82%E4%BD%95%E6%89%93%E5%8C%85_Android_ROM&amp;diff=503</id>
		<title>如何打包 Android ROM</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E5%A6%82%E4%BD%95%E6%89%93%E5%8C%85_Android_ROM&amp;diff=503"/>
		<updated>2024-02-16T16:09:36Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* 提醒事项 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 提醒事项 ==&lt;br /&gt;
注意：本教程以在 Windows 10 平台下进行打包操作为例，并确保你拥有可以访问国际网络的能力&lt;br /&gt;
&lt;br /&gt;
== 格式确认 ==&lt;br /&gt;
在正式开始之前，你需要了解你接下来需要打包的是哪种类型的文件。本教程将介绍&lt;br /&gt;
&lt;br /&gt;
# [[#img格式打包|'''img格式''']]&lt;br /&gt;
# [[#dat格式打包|'''dat格式''']]&lt;br /&gt;
# [[#br格式打包|'''br格式''']]&lt;br /&gt;
&lt;br /&gt;
== img格式打包 ==&lt;br /&gt;
&lt;br /&gt;
=== 特别注意 ===&lt;br /&gt;
本章节将分为三个部分，分别是：&lt;br /&gt;
&lt;br /&gt;
# '''ext4 格式 img 打包'''&lt;br /&gt;
# '''erofs 格式 img 打包'''&lt;br /&gt;
# '''boot/recovery类型 img 打包'''&lt;br /&gt;
&lt;br /&gt;
=== 1. ext4 格式打包 ===&lt;br /&gt;
本部分将分为两个部分(两种打包方式)，分别是&lt;br /&gt;
&lt;br /&gt;
# 通过 make_ext4fs 打包&lt;br /&gt;
# 通过 mke2fs + e2fsdroid 打包&lt;br /&gt;
&lt;br /&gt;
==== 1. 通过 make_ext4fs 打包 ====&lt;br /&gt;
&lt;br /&gt;
===== 1.获得所需工具 - make_ext4fs - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/make_ext4fs.exe GitHub] =====&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问工具链接并点击 '''下载图标''' 下载文件&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== 2. 打包 =====&lt;br /&gt;
# 将工具放置到'''所需打包分区'''所在目录&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 记录 '''config\分区名_size.txt''' 内数值&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;make_ext4fs.exe -J -T 1167580800 -S config\分区名_file_contexts -l 上一步记录的数值 -C config\分区名_fs_config -L 分区名 -a 分区名 打包文件名 分区文件夹名&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;make_ext4fs.exe -J -T 1167580800 -S config\vendor_file_contexts -l 1145141919 -C config\vendor_fs_config -L vendor -a vendor vendor_new.img vendor&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
* 打包要求您的文件需要'''严格按照解包后的结构'''（即'''所需打包文件夹 + config文件夹'''）存放，避免造成找不到文件的情况。如果您的机器是动态分区，请参考第二种打包方式&lt;br /&gt;
* 正确存放示例：&amp;lt;code&amp;gt;vendor config make_ext4fs.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 2. 通过 mke2fs + e2fsdroid 打包 ====&lt;br /&gt;
&lt;br /&gt;
===== 1. 获得所需工具 - mke2fs + e2fsdroid =====&lt;br /&gt;
'''所需环境：Python''' - [https://www.python.org/ 官网]&lt;br /&gt;
&lt;br /&gt;
所需工具:&lt;br /&gt;
* mke2fs - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/mke2fs.exe GitHub]&lt;br /&gt;
* e2fsdroid - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/e2fsdroid.exe GitHub]&lt;br /&gt;
* 工具运行库 - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/cygwin1.dll GitHub]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问对应链接 并点击 '''下载图标''' 下载文件&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fspatch - [https://github.com/affggh/fspatch GitHub]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问 fspatch 仓库并点击 '''Code - Download zip''' 下载&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== 2. 打包 =====&lt;br /&gt;
&lt;br /&gt;
# 将工具及运行库放置到'''所需打包分区'''所在目录&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/pre&amp;gt; 示例：&amp;lt;pre&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 记录'''config\分区名_size.txt'''内数值，并除以'''4096'''后的数值 (例如: 11451419 / 4096)。如果有'''小数点'''（如 114514.19），请去除小数点并 '''+1'''（即 114515）&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;mke2fs -O ^has_journal -L 分区名 -I 256 -M /分区名 -m 0 -t ext4 -b 4096 打包文件名 上一步记录的数值&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;mke2fs -O ^has_journal -L vendor -I 256 -M /vendor -m 0 -t ext4 -b 4096 vendor_new.img 114515&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;e2fsdroid -e -T 1167580800 -S 分区名_fs_config的绝对路径 -C 分区名_fs_config的绝对路径 -a /分区名 -f 分区文件夹名 上一步输入的打包文件名&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;e2fsdroid -e -T 1167580800 -S D:\homo\config\vendor_file_contexts -C D:\homo\config\vendor_fs_config -a /vendor -f vendor vendor_new.img&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* 打包要求您的文件需要'''严格按照解包后的结构'''（即'''所需打包文件夹 + config文件夹'''）存放，避免造成找不到文件的情况。&lt;br /&gt;
* 正确存放示例：&amp;lt;code&amp;gt;vendor config mke2fs.exe e2fsdroid.exe cygwin1.dll fspatch.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. erofs 格式打包 ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 获得所需工具 - mkfs.erofs ====&lt;br /&gt;
所需环境：Python - [https://www.python.org/ 官网]&lt;br /&gt;
&lt;br /&gt;
所需工具:&lt;br /&gt;
* mkfs.erofs - [https://github.com/sekaiacg/erofs-utils GitHub]&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问工具 GitHub 仓库并从 '''Release''' 内下载工具&amp;lt;/p&amp;gt;&lt;br /&gt;
* fspatch - [https://github.com/affggh/fspatch GitHub]&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问 fspatch 仓库并点击 '''Code - Download zip''' 下载&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2. 打包 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具内所有文件放置到'''所需打包分区'''所在目录&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;mkfs.erofs -zlz4hc,8 -T 1167580800 --mount-point=/分区名 --fs-config-file=分区名_fs_config的绝对路径 --file-contexts=分区名_file_contexts的绝对路径 打包文件名 分区文件夹名&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;mkfs.erofs -zlz4hc,8 -T 1167580800 --mount-point=/vendor --fs-config-file=D:\homo\config\vendor_fs_config --file-contexts=D:\homo\config\vendor_file_contexts vendor_new.img vendor&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* 打包要求您的文件需要'''严格按照解包后的结构'''（即'''所需打包文件夹 + config文件夹'''）存放，避免造成找不到文件的情况。&lt;br /&gt;
* 正确存放示例：&amp;lt;code&amp;gt;vendor config mkfs.erofs.exe winfsp-x64.dll cygwin1.dll fspatch.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. boot/recovery类型 img 打包 ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 获得所需工具 - magiskboot([https://github.com/ookiineko/magiskboot_build GitHub]) ====&lt;br /&gt;
请访问工具 GitHub 仓库并从 Release 内下载工具&lt;br /&gt;
&lt;br /&gt;
==== 2. 打包 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具放置到'''所需打包的boot/recovery'''的'''所在目录'''&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;magiskboot.exe repack 原img文件 新img文件&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;magiskboot.exe repack boot.img boot_new.img&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* 请'''严格按照'''解包教程内的'''解包方法'''操作才可使用本方法进行打包&lt;br /&gt;
&lt;br /&gt;
== dat格式打包 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 获得所需工具 - img2sdat([https://kkgithub.com/xpirt/img2sdat GitHub]) ===&lt;br /&gt;
所需环境: Python([https://www.python.org/ 官网])&lt;br /&gt;
&lt;br /&gt;
访问 img2sdat 仓库并点击 Code - Download zip 下载&lt;br /&gt;
&lt;br /&gt;
=== 2. 打包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 img文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;pre&amp;gt;python img2sdat.py img文件 -v 4 [-p 分区名]&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;python img2sdat.py system.img -v 4 -p system&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;[-p 分区名]&amp;lt;/code&amp;gt; 为可选项 不传入此参数打包得到的 dat 名称默认为 &amp;lt;code&amp;gt;system.new.dat&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;system.patch.dat&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;system.transfer.list&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== br格式打包 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 获得所需工具 - brotli([https://github.com/google/brotli/releases GitHub]) ===&lt;br /&gt;
请访问工具 GitHub 仓库并从 Release 内下载工具&lt;br /&gt;
&lt;br /&gt;
=== 2. 打包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 br文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;brotli -q 5 dat文件 -o 输出的br文件&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;brotli -q 5 system.new.dat -o system.new.dat.br&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会，br文件将会被解压，解压后的文件在'''同目录'''&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* '''-q''' 后的数字为压缩等级，可选1 - 9。数字越大，压缩率越高，耗时越长。&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E5%A6%82%E4%BD%95%E6%89%93%E5%8C%85_Android_ROM&amp;diff=502</id>
		<title>如何打包 Android ROM</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E5%A6%82%E4%BD%95%E6%89%93%E5%8C%85_Android_ROM&amp;diff=502"/>
		<updated>2024-02-16T16:09:10Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* 1. 获得所需工具 - mke2fs + e2fsdroid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 提醒事项 ==&lt;br /&gt;
注意：本教程以在 Windows 10 平台下进行解包操作为例，并确保你拥有可以访问国际网络的能力&lt;br /&gt;
&lt;br /&gt;
== 格式确认 ==&lt;br /&gt;
在正式开始之前，你需要了解你接下来需要打包的是哪种类型的文件。本教程将介绍&lt;br /&gt;
&lt;br /&gt;
# [[#img格式打包|'''img格式''']]&lt;br /&gt;
# [[#dat格式打包|'''dat格式''']]&lt;br /&gt;
# [[#br格式打包|'''br格式''']]&lt;br /&gt;
&lt;br /&gt;
== img格式打包 ==&lt;br /&gt;
&lt;br /&gt;
=== 特别注意 ===&lt;br /&gt;
本章节将分为三个部分，分别是：&lt;br /&gt;
&lt;br /&gt;
# '''ext4 格式 img 打包'''&lt;br /&gt;
# '''erofs 格式 img 打包'''&lt;br /&gt;
# '''boot/recovery类型 img 打包'''&lt;br /&gt;
&lt;br /&gt;
=== 1. ext4 格式打包 ===&lt;br /&gt;
本部分将分为两个部分(两种打包方式)，分别是&lt;br /&gt;
&lt;br /&gt;
# 通过 make_ext4fs 打包&lt;br /&gt;
# 通过 mke2fs + e2fsdroid 打包&lt;br /&gt;
&lt;br /&gt;
==== 1. 通过 make_ext4fs 打包 ====&lt;br /&gt;
&lt;br /&gt;
===== 1.获得所需工具 - make_ext4fs - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/make_ext4fs.exe GitHub] =====&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问工具链接并点击 '''下载图标''' 下载文件&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== 2. 打包 =====&lt;br /&gt;
# 将工具放置到'''所需打包分区'''所在目录&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 记录 '''config\分区名_size.txt''' 内数值&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;make_ext4fs.exe -J -T 1167580800 -S config\分区名_file_contexts -l 上一步记录的数值 -C config\分区名_fs_config -L 分区名 -a 分区名 打包文件名 分区文件夹名&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;make_ext4fs.exe -J -T 1167580800 -S config\vendor_file_contexts -l 1145141919 -C config\vendor_fs_config -L vendor -a vendor vendor_new.img vendor&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
* 打包要求您的文件需要'''严格按照解包后的结构'''（即'''所需打包文件夹 + config文件夹'''）存放，避免造成找不到文件的情况。如果您的机器是动态分区，请参考第二种打包方式&lt;br /&gt;
* 正确存放示例：&amp;lt;code&amp;gt;vendor config make_ext4fs.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 2. 通过 mke2fs + e2fsdroid 打包 ====&lt;br /&gt;
&lt;br /&gt;
===== 1. 获得所需工具 - mke2fs + e2fsdroid =====&lt;br /&gt;
'''所需环境：Python''' - [https://www.python.org/ 官网]&lt;br /&gt;
&lt;br /&gt;
所需工具:&lt;br /&gt;
* mke2fs - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/mke2fs.exe GitHub]&lt;br /&gt;
* e2fsdroid - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/e2fsdroid.exe GitHub]&lt;br /&gt;
* 工具运行库 - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/cygwin1.dll GitHub]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问对应链接 并点击 '''下载图标''' 下载文件&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fspatch - [https://github.com/affggh/fspatch GitHub]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问 fspatch 仓库并点击 '''Code - Download zip''' 下载&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== 2. 打包 =====&lt;br /&gt;
&lt;br /&gt;
# 将工具及运行库放置到'''所需打包分区'''所在目录&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/pre&amp;gt; 示例：&amp;lt;pre&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 记录'''config\分区名_size.txt'''内数值，并除以'''4096'''后的数值 (例如: 11451419 / 4096)。如果有'''小数点'''（如 114514.19），请去除小数点并 '''+1'''（即 114515）&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;mke2fs -O ^has_journal -L 分区名 -I 256 -M /分区名 -m 0 -t ext4 -b 4096 打包文件名 上一步记录的数值&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;mke2fs -O ^has_journal -L vendor -I 256 -M /vendor -m 0 -t ext4 -b 4096 vendor_new.img 114515&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;e2fsdroid -e -T 1167580800 -S 分区名_fs_config的绝对路径 -C 分区名_fs_config的绝对路径 -a /分区名 -f 分区文件夹名 上一步输入的打包文件名&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;e2fsdroid -e -T 1167580800 -S D:\homo\config\vendor_file_contexts -C D:\homo\config\vendor_fs_config -a /vendor -f vendor vendor_new.img&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* 打包要求您的文件需要'''严格按照解包后的结构'''（即'''所需打包文件夹 + config文件夹'''）存放，避免造成找不到文件的情况。&lt;br /&gt;
* 正确存放示例：&amp;lt;code&amp;gt;vendor config mke2fs.exe e2fsdroid.exe cygwin1.dll fspatch.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. erofs 格式打包 ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 获得所需工具 - mkfs.erofs ====&lt;br /&gt;
所需环境：Python - [https://www.python.org/ 官网]&lt;br /&gt;
&lt;br /&gt;
所需工具:&lt;br /&gt;
* mkfs.erofs - [https://github.com/sekaiacg/erofs-utils GitHub]&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问工具 GitHub 仓库并从 '''Release''' 内下载工具&amp;lt;/p&amp;gt;&lt;br /&gt;
* fspatch - [https://github.com/affggh/fspatch GitHub]&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问 fspatch 仓库并点击 '''Code - Download zip''' 下载&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2. 打包 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具内所有文件放置到'''所需打包分区'''所在目录&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;mkfs.erofs -zlz4hc,8 -T 1167580800 --mount-point=/分区名 --fs-config-file=分区名_fs_config的绝对路径 --file-contexts=分区名_file_contexts的绝对路径 打包文件名 分区文件夹名&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;mkfs.erofs -zlz4hc,8 -T 1167580800 --mount-point=/vendor --fs-config-file=D:\homo\config\vendor_fs_config --file-contexts=D:\homo\config\vendor_file_contexts vendor_new.img vendor&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* 打包要求您的文件需要'''严格按照解包后的结构'''（即'''所需打包文件夹 + config文件夹'''）存放，避免造成找不到文件的情况。&lt;br /&gt;
* 正确存放示例：&amp;lt;code&amp;gt;vendor config mkfs.erofs.exe winfsp-x64.dll cygwin1.dll fspatch.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. boot/recovery类型 img 打包 ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 获得所需工具 - magiskboot([https://github.com/ookiineko/magiskboot_build GitHub]) ====&lt;br /&gt;
请访问工具 GitHub 仓库并从 Release 内下载工具&lt;br /&gt;
&lt;br /&gt;
==== 2. 打包 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具放置到'''所需打包的boot/recovery'''的'''所在目录'''&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;magiskboot.exe repack 原img文件 新img文件&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;magiskboot.exe repack boot.img boot_new.img&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* 请'''严格按照'''解包教程内的'''解包方法'''操作才可使用本方法进行打包&lt;br /&gt;
&lt;br /&gt;
== dat格式打包 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 获得所需工具 - img2sdat([https://kkgithub.com/xpirt/img2sdat GitHub]) ===&lt;br /&gt;
所需环境: Python([https://www.python.org/ 官网])&lt;br /&gt;
&lt;br /&gt;
访问 img2sdat 仓库并点击 Code - Download zip 下载&lt;br /&gt;
&lt;br /&gt;
=== 2. 打包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 img文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;pre&amp;gt;python img2sdat.py img文件 -v 4 [-p 分区名]&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;python img2sdat.py system.img -v 4 -p system&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;[-p 分区名]&amp;lt;/code&amp;gt; 为可选项 不传入此参数打包得到的 dat 名称默认为 &amp;lt;code&amp;gt;system.new.dat&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;system.patch.dat&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;system.transfer.list&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== br格式打包 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 获得所需工具 - brotli([https://github.com/google/brotli/releases GitHub]) ===&lt;br /&gt;
请访问工具 GitHub 仓库并从 Release 内下载工具&lt;br /&gt;
&lt;br /&gt;
=== 2. 打包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 br文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;brotli -q 5 dat文件 -o 输出的br文件&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;brotli -q 5 system.new.dat -o system.new.dat.br&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会，br文件将会被解压，解压后的文件在'''同目录'''&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* '''-q''' 后的数字为压缩等级，可选1 - 9。数字越大，压缩率越高，耗时越长。&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E5%A6%82%E4%BD%95%E6%89%93%E5%8C%85_Android_ROM&amp;diff=501</id>
		<title>如何打包 Android ROM</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E5%A6%82%E4%BD%95%E6%89%93%E5%8C%85_Android_ROM&amp;diff=501"/>
		<updated>2024-02-16T16:06:57Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 提醒事项 ==&lt;br /&gt;
注意：本教程以在 Windows 10 平台下进行解包操作为例，并确保你拥有可以访问国际网络的能力&lt;br /&gt;
&lt;br /&gt;
== 格式确认 ==&lt;br /&gt;
在正式开始之前，你需要了解你接下来需要打包的是哪种类型的文件。本教程将介绍&lt;br /&gt;
&lt;br /&gt;
# [[#img格式打包|'''img格式''']]&lt;br /&gt;
# [[#dat格式打包|'''dat格式''']]&lt;br /&gt;
# [[#br格式打包|'''br格式''']]&lt;br /&gt;
&lt;br /&gt;
== img格式打包 ==&lt;br /&gt;
&lt;br /&gt;
=== 特别注意 ===&lt;br /&gt;
本章节将分为三个部分，分别是：&lt;br /&gt;
&lt;br /&gt;
# '''ext4 格式 img 打包'''&lt;br /&gt;
# '''erofs 格式 img 打包'''&lt;br /&gt;
# '''boot/recovery类型 img 打包'''&lt;br /&gt;
&lt;br /&gt;
=== 1. ext4 格式打包 ===&lt;br /&gt;
本部分将分为两个部分(两种打包方式)，分别是&lt;br /&gt;
&lt;br /&gt;
# 通过 make_ext4fs 打包&lt;br /&gt;
# 通过 mke2fs + e2fsdroid 打包&lt;br /&gt;
&lt;br /&gt;
==== 1. 通过 make_ext4fs 打包 ====&lt;br /&gt;
&lt;br /&gt;
===== 1.获得所需工具 - make_ext4fs - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/make_ext4fs.exe GitHub] =====&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问工具链接并点击 '''下载图标''' 下载文件&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== 2. 打包 =====&lt;br /&gt;
# 将工具放置到'''所需打包分区'''所在目录&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 记录 '''config\分区名_size.txt''' 内数值&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;make_ext4fs.exe -J -T 1167580800 -S config\分区名_file_contexts -l 上一步记录的数值 -C config\分区名_fs_config -L 分区名 -a 分区名 打包文件名 分区文件夹名&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;make_ext4fs.exe -J -T 1167580800 -S config\vendor_file_contexts -l 1145141919 -C config\vendor_fs_config -L vendor -a vendor vendor_new.img vendor&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
* 打包要求您的文件需要'''严格按照解包后的结构'''（即'''所需打包文件夹 + config文件夹'''）存放，避免造成找不到文件的情况。如果您的机器是动态分区，请参考第二种打包方式&lt;br /&gt;
* 正确存放示例：&amp;lt;code&amp;gt;vendor config make_ext4fs.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 2. 通过 mke2fs + e2fsdroid 打包 ====&lt;br /&gt;
&lt;br /&gt;
===== 1. 获得所需工具 - mke2fs + e2fsdroid =====&lt;br /&gt;
'''所需环境：Python''' - [https://www.python.org/ 官网]&lt;br /&gt;
&lt;br /&gt;
所需工具:&lt;br /&gt;
* mke2fs - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/mke2fs.exe GitHub]&lt;br /&gt;
* e2fsdroid - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/e2fsdroid.exe GitHub]&lt;br /&gt;
* 工具运行库 - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/cygwin1.dll GitHub]&lt;br /&gt;
&lt;br /&gt;
访问对应链接 并点击 '''下载图标''' 下载文件&lt;br /&gt;
&lt;br /&gt;
fspatch - [https://github.com/affggh/fspatch GitHub]&lt;br /&gt;
&lt;br /&gt;
访问 fspatch 仓库并点击 '''Code - Download zip''' 下载&lt;br /&gt;
&lt;br /&gt;
===== 2. 打包 =====&lt;br /&gt;
&lt;br /&gt;
# 将工具及运行库放置到'''所需打包分区'''所在目录&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/pre&amp;gt; 示例：&amp;lt;pre&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 记录'''config\分区名_size.txt'''内数值，并除以'''4096'''后的数值 (例如: 11451419 / 4096)。如果有'''小数点'''（如 114514.19），请去除小数点并 '''+1'''（即 114515）&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;mke2fs -O ^has_journal -L 分区名 -I 256 -M /分区名 -m 0 -t ext4 -b 4096 打包文件名 上一步记录的数值&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;mke2fs -O ^has_journal -L vendor -I 256 -M /vendor -m 0 -t ext4 -b 4096 vendor_new.img 114515&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;e2fsdroid -e -T 1167580800 -S 分区名_fs_config的绝对路径 -C 分区名_fs_config的绝对路径 -a /分区名 -f 分区文件夹名 上一步输入的打包文件名&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;e2fsdroid -e -T 1167580800 -S D:\homo\config\vendor_file_contexts -C D:\homo\config\vendor_fs_config -a /vendor -f vendor vendor_new.img&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* 打包要求您的文件需要'''严格按照解包后的结构'''（即'''所需打包文件夹 + config文件夹'''）存放，避免造成找不到文件的情况。&lt;br /&gt;
* 正确存放示例：&amp;lt;code&amp;gt;vendor config mke2fs.exe e2fsdroid.exe cygwin1.dll fspatch.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. erofs 格式打包 ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 获得所需工具 - mkfs.erofs ====&lt;br /&gt;
所需环境：Python - [https://www.python.org/ 官网]&lt;br /&gt;
&lt;br /&gt;
所需工具:&lt;br /&gt;
* mkfs.erofs - [https://github.com/sekaiacg/erofs-utils GitHub]&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问工具 GitHub 仓库并从 '''Release''' 内下载工具&amp;lt;/p&amp;gt;&lt;br /&gt;
* fspatch - [https://github.com/affggh/fspatch GitHub]&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问 fspatch 仓库并点击 '''Code - Download zip''' 下载&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2. 打包 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具内所有文件放置到'''所需打包分区'''所在目录&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;mkfs.erofs -zlz4hc,8 -T 1167580800 --mount-point=/分区名 --fs-config-file=分区名_fs_config的绝对路径 --file-contexts=分区名_file_contexts的绝对路径 打包文件名 分区文件夹名&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;mkfs.erofs -zlz4hc,8 -T 1167580800 --mount-point=/vendor --fs-config-file=D:\homo\config\vendor_fs_config --file-contexts=D:\homo\config\vendor_file_contexts vendor_new.img vendor&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* 打包要求您的文件需要'''严格按照解包后的结构'''（即'''所需打包文件夹 + config文件夹'''）存放，避免造成找不到文件的情况。&lt;br /&gt;
* 正确存放示例：&amp;lt;code&amp;gt;vendor config mkfs.erofs.exe winfsp-x64.dll cygwin1.dll fspatch.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. boot/recovery类型 img 打包 ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 获得所需工具 - magiskboot([https://github.com/ookiineko/magiskboot_build GitHub]) ====&lt;br /&gt;
请访问工具 GitHub 仓库并从 Release 内下载工具&lt;br /&gt;
&lt;br /&gt;
==== 2. 打包 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具放置到'''所需打包的boot/recovery'''的'''所在目录'''&lt;br /&gt;
# 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;magiskboot.exe repack 原img文件 新img文件&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;magiskboot.exe repack boot.img boot_new.img&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* 请'''严格按照'''解包教程内的'''解包方法'''操作才可使用本方法进行打包&lt;br /&gt;
&lt;br /&gt;
== dat格式打包 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 获得所需工具 - img2sdat([https://kkgithub.com/xpirt/img2sdat GitHub]) ===&lt;br /&gt;
所需环境: Python([https://www.python.org/ 官网])&lt;br /&gt;
&lt;br /&gt;
访问 img2sdat 仓库并点击 Code - Download zip 下载&lt;br /&gt;
&lt;br /&gt;
=== 2. 打包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 img文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;pre&amp;gt;python img2sdat.py img文件 -v 4 [-p 分区名]&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;python img2sdat.py system.img -v 4 -p system&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;[-p 分区名]&amp;lt;/code&amp;gt; 为可选项 不传入此参数打包得到的 dat 名称默认为 &amp;lt;code&amp;gt;system.new.dat&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;system.patch.dat&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;system.transfer.list&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== br格式打包 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 获得所需工具 - brotli([https://github.com/google/brotli/releases GitHub]) ===&lt;br /&gt;
请访问工具 GitHub 仓库并从 Release 内下载工具&lt;br /&gt;
&lt;br /&gt;
=== 2. 打包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 br文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入：&amp;lt;pre&amp;gt;brotli -q 5 dat文件 -o 输出的br文件&amp;lt;/pre&amp;gt;示例：&amp;lt;pre&amp;gt;brotli -q 5 system.new.dat -o system.new.dat.br&amp;lt;/pre&amp;gt;&lt;br /&gt;
# 小等一会，br文件将会被解压，解压后的文件在'''同目录'''&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* '''-q''' 后的数字为压缩等级，可选1 - 9。数字越大，压缩率越高，耗时越长。&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E5%A6%82%E4%BD%95%E6%89%93%E5%8C%85_Android_ROM&amp;diff=499</id>
		<title>如何打包 Android ROM</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E5%A6%82%E4%BD%95%E6%89%93%E5%8C%85_Android_ROM&amp;diff=499"/>
		<updated>2024-02-16T15:47:29Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 提醒事项 ==&lt;br /&gt;
注意：本教程以在 Windows 10 平台下进行解包操作为例，并确保你拥有可以访问国际网络的能力&lt;br /&gt;
&lt;br /&gt;
== 格式确认 ==&lt;br /&gt;
在正式开始之前，你需要了解你接下来需要打包的是哪种类型的文件。本教程将介绍&lt;br /&gt;
&lt;br /&gt;
# [[#img格式打包|'''img格式''']]&lt;br /&gt;
# [[#dat格式打包|'''dat格式''']]&lt;br /&gt;
# [[#br格式打包|'''br格式''']]&lt;br /&gt;
&lt;br /&gt;
== img格式打包 ==&lt;br /&gt;
&lt;br /&gt;
=== 特别注意 ===&lt;br /&gt;
本章节将分为三个部分，分别是：&lt;br /&gt;
&lt;br /&gt;
# '''ext4 格式 img 打包'''&lt;br /&gt;
# '''erofs 格式 img 打包'''&lt;br /&gt;
# '''boot/recovery类型 img 打包'''&lt;br /&gt;
&lt;br /&gt;
=== 1. ext4 格式打包 ===&lt;br /&gt;
本部分将分为两个部分(两种打包方式)，分别是&lt;br /&gt;
&lt;br /&gt;
# 通过 make_ext4fs 打包&lt;br /&gt;
# 通过 mke2fs + e2fsdroid 打包&lt;br /&gt;
&lt;br /&gt;
==== 1. 通过 make_ext4fs 打包 ====&lt;br /&gt;
&lt;br /&gt;
===== 1.获得所需工具 - make_ext4fs - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/make_ext4fs.exe GitHub] =====&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;访问工具链接并点击 '''下载图标''' 下载文件&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== 2. 打包 =====&lt;br /&gt;
1. 将工具放置到'''所需打包分区'''所在目录&lt;br /&gt;
&lt;br /&gt;
2. 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
&lt;br /&gt;
3. 记录 '''config\分区名_size.txt''' 内数值&lt;br /&gt;
&lt;br /&gt;
4. 输入：&lt;br /&gt;
&amp;lt;pre&amp;gt;make_ext4fs.exe -J -T 1167580800 -S config\分区名_file_contexts -l 上一步记录的数值 -C config\分区名_fs_config -L 分区名 -a 分区名 打包文件名 分区文件夹名&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make_ext4fs.exe -J -T 1167580800 -S config\vendor_file_contexts -l 1145141919 -C config\vendor_fs_config -L vendor -a vendor vendor_new.img vendor&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
打包要求您的文件需要'''严格按照解包后的结构'''（即'''所需打包文件夹 + config文件夹'''）存放，避免造成找不到文件的情况。如果您的机器是动态分区，请参考第二种打包方式&lt;br /&gt;
&lt;br /&gt;
正确存放示例：&amp;lt;code&amp;gt;vendor config make_ext4fs.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 2. 通过 mke2fs + e2fsdroid 打包 ====&lt;br /&gt;
&lt;br /&gt;
===== 1. 获得所需工具 - mke2fs + e2fsdroid =====&lt;br /&gt;
所需环境: Python - [https://www.python.org/ 官网]&lt;br /&gt;
&lt;br /&gt;
所需工具:&lt;br /&gt;
&lt;br /&gt;
mke2fs - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/mke2fs.exe GitHub]&lt;br /&gt;
&lt;br /&gt;
e2fsdroid - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/e2fsdroid.exe GitHub]&lt;br /&gt;
&lt;br /&gt;
工具运行库 - [https://github.com/ColdWindScholar/MIO-KITCHEN-SOURCE/blob/main/bin/Windows/AMD64/cygwin1.dll GitHub]&lt;br /&gt;
&lt;br /&gt;
访问对应链接 并点击 '''下载图标''' 下载文件&lt;br /&gt;
&lt;br /&gt;
fspatch - [https://github.com/affggh/fspatch GitHub]&lt;br /&gt;
&lt;br /&gt;
访问 fspatch 仓库并点击 '''Code - Download zip''' 下载&lt;br /&gt;
&lt;br /&gt;
===== 2. 打包 =====&lt;br /&gt;
&lt;br /&gt;
1. 将工具及运行库放置到'''所需打包分区'''所在目录&lt;br /&gt;
&lt;br /&gt;
2. 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
&lt;br /&gt;
3. 输入 &amp;lt;pre&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/pre&amp;gt; &lt;br /&gt;
示例: &lt;br /&gt;
&amp;lt;pre&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. 记录'''config\分区名_size.txt'''内数值，并除以'''4096'''后的数值 (例如: 11451419 / 4096)。如果有'''小数点'''（如 114514.19），请去除小数点并 '''+1'''（即 114515）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. 输入：&lt;br /&gt;
&amp;lt;pre&amp;gt;mke2fs -O ^has_journal -L 分区名 -I 256 -M /分区名 -m 0 -t ext4 -b 4096 打包文件名 上一步记录的数值&amp;lt;/pre&amp;gt;&lt;br /&gt;
示例：&lt;br /&gt;
&amp;lt;pre&amp;gt;mke2fs -O ^has_journal -L vendor -I 256 -M /vendor -m 0 -t ext4 -b 4096 vendor_new.img 114515&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. 输入 &amp;lt;pre&amp;gt;e2fsdroid -e -T 1167580800 -S 分区名_fs_config的绝对路径 -C 分区名_fs_config的绝对路径 -a /分区名 -f 分区文件夹名 上一步输入的打包文件名&amp;lt;/pre&amp;gt;&lt;br /&gt;
示例：&lt;br /&gt;
&amp;lt;pre&amp;gt;e2fsdroid -e -T 1167580800 -S D:\homo\config\vendor_file_contexts -C D:\homo\config\vendor_fs_config -a /vendor -f vendor vendor_new.img&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* 打包要求您的文件需要'''严格按照解包后的结构'''（即'''所需打包文件夹 + config文件夹'''）存放，避免造成找不到文件的情况。&lt;br /&gt;
* 正确存放示例：&amp;lt;code&amp;gt;vendor config mke2fs.exe e2fsdroid.exe cygwin1.dll fspatch.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. erofs 格式打包 ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 获得所需工具 - mkfs.erofs ====&lt;br /&gt;
所需环境: Python - [https://www.python.org/ 官网]&lt;br /&gt;
&lt;br /&gt;
所需工具:&lt;br /&gt;
&lt;br /&gt;
mkfs.erofs - [https://github.com/sekaiacg/erofs-utils GitHub]&lt;br /&gt;
&lt;br /&gt;
请访问工具 GitHub 仓库并从 '''Release''' 内下载工具&lt;br /&gt;
&lt;br /&gt;
fspatch - [https://github.com/affggh/fspatch GitHub]&lt;br /&gt;
&lt;br /&gt;
访问 fspatch 仓库并点击 '''Code - Download zip''' 下载&lt;br /&gt;
&lt;br /&gt;
==== 2. 打包 ====&lt;br /&gt;
&lt;br /&gt;
1. 将工具内所有文件放置到'''所需打包分区'''所在目录&lt;br /&gt;
&lt;br /&gt;
2. 在'''该目录'''下打开 cmd 命令行&lt;br /&gt;
&lt;br /&gt;
3. 输入：&lt;br /&gt;
&amp;lt;pre&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/pre&amp;gt;&lt;br /&gt;
示例：&lt;br /&gt;
&amp;lt;pre&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. 输入：&amp;lt;pre&amp;gt;mkfs.erofs -zlz4hc,8 -T 1167580800 --mount-point=/分区名 --fs-config-file=分区名_fs_config的绝对路径 --file-contexts=分区名_file_contexts的绝对路径 打包文件名 分区文件夹名&amp;lt;/pre&amp;gt;&lt;br /&gt;
示例：&lt;br /&gt;
&amp;lt;pre&amp;gt;mkfs.erofs -zlz4hc,8 -T 1167580800 --mount-point=/vendor --fs-config-file=D:\homo\config\vendor_fs_config --file-contexts=D:\homo\config\vendor_file_contexts vendor_new.img vendor&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
* 打包要求您的文件需要'''严格按照解包后的结构'''（即'''所需打包文件夹 + config文件夹'''）存放，避免造成找不到文件的情况。&lt;br /&gt;
* 正确存放示例：&amp;lt;code&amp;gt;vendor config mkfs.erofs.exe winfsp-x64.dll cygwin1.dll fspatch.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. boot/recovery类型 img 打包 ===&lt;br /&gt;
&lt;br /&gt;
==== 1. 获得所需工具 - magiskboot([https://github.com/ookiineko/magiskboot_build GitHub]) ====&lt;br /&gt;
请访问工具 GitHub 仓库并从 Release 内下载工具&lt;br /&gt;
&lt;br /&gt;
==== 2. 打包 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具放置到 所需打包boot/recovery 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;magiskboot.exe repack 原img文件 新img文件&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;magiskboot.exe repack boot.img boot_new.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
# 请严格按照解包教程内的 解包方法 操作才可使用本方法进行打包&lt;br /&gt;
&lt;br /&gt;
== dat格式打包 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 获得所需工具 - img2sdat([https://kkgithub.com/xpirt/img2sdat GitHub]) ===&lt;br /&gt;
所需环境: Python([https://www.python.org/ 官网])&lt;br /&gt;
&lt;br /&gt;
访问 img2sdat 仓库并点击 Code - Download zip 下载&lt;br /&gt;
&lt;br /&gt;
=== 2. 打包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 img文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;python img2sdat.py img文件 -v 4 [-p 分区名]&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;python img2sdat.py system.img -v 4 -p system&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;[-p 分区名]&amp;lt;/code&amp;gt; 为可选项 不传入此参数打包得到的 dat 名称默认为 &amp;lt;code&amp;gt;system.new.dat&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;system.patch.dat&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;system.transfer.list&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== br格式打包 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 获得所需工具 - brotli([https://github.com/google/brotli/releases GitHub]) ===&lt;br /&gt;
请访问工具 GitHub 仓库并从 Release 内下载工具&lt;br /&gt;
&lt;br /&gt;
=== 2. 打包 ===&lt;br /&gt;
&lt;br /&gt;
# 将工具解压到 br文件 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;brotli -q 5 dat文件 -o 输出的br文件&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;brotli -q 5 system.new.dat -o system.new.dat.br&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 小等一会 br文件 将会被解压 解压后的文件在同目录&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
# -q 后的数字为压缩等级，可选1 - 9，数字越大 压缩率越高 耗时越长&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E6%8F%90%E5%8F%96%E5%88%86%E5%8C%BA&amp;diff=490</id>
		<title>提取分区</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E6%8F%90%E5%8F%96%E5%88%86%E5%8C%BA&amp;diff=490"/>
		<updated>2024-02-16T13:19:15Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* 通过root权限提取 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;通常来说，Android有三种提取分区的方式:&lt;br /&gt;
&lt;br /&gt;
* 从刷机包中提取&lt;br /&gt;
* 设备已获取root权限，通过root权限提取&lt;br /&gt;
* 通过MTK深刷/9008提取（不讨论）&lt;br /&gt;
* 大容量模式（不讨论）&lt;br /&gt;
&lt;br /&gt;
=== 从刷机包中提取 ===&lt;br /&gt;
从刷机包中提取分区非常简单，对于zip格式的线刷包（其他格式自行寻找解包方法），只需要以压缩文件方式打开线刷包，解压需要提取的分区即可&lt;br /&gt;
&lt;br /&gt;
如果是卡刷包， 参考[[如何解包 Android ROM|这里]]提取分区&lt;br /&gt;
&lt;br /&gt;
=== 通过root权限提取 ===&lt;br /&gt;
如果设备已经获取root权限，则可以通过root权限提取分区&lt;br /&gt;
&lt;br /&gt;
'''注意:有些分区提取后可能并不支持直接通过fastboot刷入'''&lt;br /&gt;
&lt;br /&gt;
有很多软件支持提取分区的功能，比如爱玩机工具箱，如果需要方便，可以试试这些软件&lt;br /&gt;
&lt;br /&gt;
'''每个机型的提取方式可能不同，请自行在&amp;lt;code&amp;gt;/dev/block&amp;lt;/code&amp;gt;下查看'''. 以红米5p举例，分区所在的内核节点路径在:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/dev/block/bootdevice/by-name/分区名&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
比如，若需要提取system分区，则分区所在的内核节点路径为:&amp;lt;code&amp;gt;/dev/block/bootdevice/by-name/system&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
取得内核节点路径后，有两种方式提取分区:&lt;br /&gt;
&lt;br /&gt;
# 通过cp指令: &amp;lt;code&amp;gt;cp 内核节点路径 要提取到的文件路径&amp;lt;/code&amp;gt;，例如&amp;lt;code&amp;gt;cp /dev/block/bootdevice/by-name/system /sdcard/system.img&amp;lt;/code&amp;gt;，这会提取system分区到/sdcard/system.img&lt;br /&gt;
# 通过dd指令: &amp;lt;code&amp;gt;dd if=内核节点路径 of=要提取到的文件路径 bs=4M&amp;lt;/code&amp;gt;，例如&amp;lt;code&amp;gt;dd if=/dev/block/bootdevice/by-name/system of=/sdcard/system.img bs=4M&amp;lt;/code&amp;gt;，这同样会提取system分区到/sdcard/system.img，&amp;lt;code&amp;gt;bs=4M&amp;lt;/code&amp;gt;意为将块大小指定为4M，由于储存器的特性，小于扇区大小会造成更多的寿命损失并增加读写时间。因此，为了加快速度并减少寿命损失，可使用类似于4M的整数. 对于较老的机型，可尝试转为字节，如&amp;lt;code&amp;gt;bs=4M&amp;lt;/code&amp;gt;可换为&amp;lt;code&amp;gt;bs=4194304&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=438</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=438"/>
		<updated>2024-02-16T05:14:22Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* 知名良心开发者 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 欢迎来到 &amp;lt;span style=&amp;quot;display: inline-block; vertical-align: middle; padding-bottom: 11px;&amp;quot;&amp;gt;[[文件:Uotan Wiki.png|120px]]&amp;lt;/span&amp;gt; · 刷机百科 =&lt;br /&gt;
&lt;br /&gt;
'''我们致力于打造一个更适合国人使用、更贴近刷机本身的玩机知识站点'''&lt;br /&gt;
&lt;br /&gt;
'''本站现有{{NUMBEROFUSERS}}名用户，{{NUMBEROFEDITS}}次编辑，{{NUMBEROFARTICLES}}篇条目，{{NUMBEROFACTIVEUSERS}}位活跃编辑者。'''&lt;br /&gt;
== 刷机入门 ==&lt;br /&gt;
# [[ADB与Fastboot|ADB 与 Fastboot]]&lt;br /&gt;
# [[解锁Bootloader|解锁 Bootloader]]&lt;br /&gt;
# [[刷入第三方Recovery|刷入第三方 Recovery]]&lt;br /&gt;
# [[获取Root权限|获取 Root 权限]]&lt;br /&gt;
# [[Miflash线刷|MiFlash 线刷]]&lt;br /&gt;
&lt;br /&gt;
== 进阶内容 ==&lt;br /&gt;
# [[使用柚坛工具箱进行线刷]]&lt;br /&gt;
# [[ADB SideLoad]]&lt;br /&gt;
# [[Fastboot Update]]&lt;br /&gt;
# [[Fastboot 命令]]&lt;br /&gt;
# [[刷入任意单独镜像]]&lt;br /&gt;
# [[9008深度刷机|9008 深度刷机]]&lt;br /&gt;
# [[MTK Flashtool深度刷机|MTK Flashtool 深度刷机]]&lt;br /&gt;
# [[提取分区]]&lt;br /&gt;
# [[修改分区]]&lt;br /&gt;
# [[QCN]]&lt;br /&gt;
# [[Super_Empty]]&lt;br /&gt;
&lt;br /&gt;
== 系统修改 ==&lt;br /&gt;
# [[ADB命令|ADB 命令]]&lt;br /&gt;
# [[Magisk模块|Magisk 模块]]&lt;br /&gt;
# [[LsPosed 模块|LSPosed 模块]]&lt;br /&gt;
# [[KSU 模块]]&lt;br /&gt;
# [[修改教程|修改方案]]&lt;br /&gt;
&lt;br /&gt;
== Mindows工具箱 ==&lt;br /&gt;
# [[为手机刷入Windows|为手机刷入 Windows]]&lt;br /&gt;
# [[更新驱动程序]]&lt;br /&gt;
# [[重新安装Windows|重新安装 Windows]]&lt;br /&gt;
# [[一些常见问题及其解决方案]]&lt;br /&gt;
&lt;br /&gt;
== 高级内容 ==&lt;br /&gt;
# [[Android 分区详解]]&lt;br /&gt;
# [[GKI 内核]]&lt;br /&gt;
# [[如何解包 Android ROM]]&lt;br /&gt;
# [[如何打包 Android ROM]]&lt;br /&gt;
# [[如何从源码构建 TWRP Recovery]]&lt;br /&gt;
# [[如何从源码构建 Android ROM]]&lt;br /&gt;
# [[使用edl.py|使用 edl.py]]&lt;br /&gt;
# [[为手机安装Linux|为手机安装 Linux]]&lt;br /&gt;
# [[Git使用教程]]&lt;br /&gt;
# [[为新设备编写类原生device tree]]&lt;br /&gt;
&lt;br /&gt;
== 知名玩机博主 ==&lt;br /&gt;
# [[极客湾Geekerwan]]&lt;br /&gt;
# [[小白测评]]&lt;br /&gt;
# [[微积分WekiHome]]&lt;br /&gt;
# [[晨钟酱Official]]&lt;br /&gt;
# [[江灵夏草]]&lt;br /&gt;
# [[柚坛UOTAN]]&lt;br /&gt;
# [[派大宝UI]]&lt;br /&gt;
# [[我可以等你十年]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[凡生TalkING]]&lt;br /&gt;
&lt;br /&gt;
== 知名良心开发者 ==&lt;br /&gt;
# [[暮间雾]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[Amktiao]]&lt;br /&gt;
# [[小太阳ACA]]&lt;br /&gt;
# [[hellobbn]]&lt;br /&gt;
&lt;br /&gt;
== 更多词条 ==&lt;br /&gt;
# [[设备代号收录集合]]&lt;br /&gt;
# [[通用系统镜像]]&lt;br /&gt;
# [[AOSP]]&lt;br /&gt;
# [[Linux mainlining]]&lt;br /&gt;
# [[Windows on arm|WOA (Windows on arm)]]&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E9%A1%B5%E5%86%85%E8%B7%B3%E8%BD%AC%E6%B5%8B%E8%AF%95&amp;diff=437</id>
		<title>页内跳转测试</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E9%A1%B5%E5%86%85%E8%B7%B3%E8%BD%AC%E6%B5%8B%E8%AF%95&amp;diff=437"/>
		<updated>2024-02-16T05:12:20Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;script&amp;gt;&lt;br /&gt;
    window.location.href = &amp;quot;https://www.example.com&amp;quot;;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E9%A1%B5%E5%86%85%E8%B7%B3%E8%BD%AC%E6%B5%8B%E8%AF%95&amp;diff=436</id>
		<title>页内跳转测试</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E9%A1%B5%E5%86%85%E8%B7%B3%E8%BD%AC%E6%B5%8B%E8%AF%95&amp;diff=436"/>
		<updated>2024-02-16T05:11:15Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​创建页面，内容为“&amp;lt;meta http-equiv=&amp;quot;refresh&amp;quot; content=&amp;quot;0;url=https://www.example.com&amp;quot;&amp;gt;”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;meta http-equiv=&amp;quot;refresh&amp;quot; content=&amp;quot;0;url=https://www.example.com&amp;quot;&amp;gt;&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=435</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=435"/>
		<updated>2024-02-16T05:11:02Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* 知名良心开发者 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 欢迎来到 &amp;lt;span style=&amp;quot;display: inline-block; vertical-align: middle; padding-bottom: 11px;&amp;quot;&amp;gt;[[文件:Uotan Wiki.png|120px]]&amp;lt;/span&amp;gt; · 刷机百科 =&lt;br /&gt;
&lt;br /&gt;
'''我们致力于打造一个更适合国人使用、更贴近刷机本身的玩机知识站点'''&lt;br /&gt;
&lt;br /&gt;
'''本站现有{{NUMBEROFUSERS}}名用户，{{NUMBEROFEDITS}}次编辑，{{NUMBEROFARTICLES}}篇条目，{{NUMBEROFACTIVEUSERS}}位活跃编辑者。'''&lt;br /&gt;
== 刷机入门 ==&lt;br /&gt;
# [[ADB与Fastboot|ADB 与 Fastboot]]&lt;br /&gt;
# [[解锁Bootloader|解锁 Bootloader]]&lt;br /&gt;
# [[刷入第三方Recovery|刷入第三方 Recovery]]&lt;br /&gt;
# [[获取Root权限|获取 Root 权限]]&lt;br /&gt;
# [[Miflash线刷|MiFlash 线刷]]&lt;br /&gt;
&lt;br /&gt;
== 进阶内容 ==&lt;br /&gt;
# [[使用柚坛工具箱进行线刷]]&lt;br /&gt;
# [[ADB SideLoad]]&lt;br /&gt;
# [[Fastboot Update]]&lt;br /&gt;
# [[Fastboot 命令]]&lt;br /&gt;
# [[刷入任意单独镜像]]&lt;br /&gt;
# [[9008深度刷机|9008 深度刷机]]&lt;br /&gt;
# [[MTK Flashtool深度刷机|MTK Flashtool 深度刷机]]&lt;br /&gt;
# [[提取分区]]&lt;br /&gt;
# [[修改分区]]&lt;br /&gt;
# [[QCN]]&lt;br /&gt;
# [[Super_Empty]]&lt;br /&gt;
&lt;br /&gt;
== 系统修改 ==&lt;br /&gt;
# [[ADB命令|ADB 命令]]&lt;br /&gt;
# [[Magisk模块|Magisk 模块]]&lt;br /&gt;
# [[LsPosed 模块|LSPosed 模块]]&lt;br /&gt;
# [[KSU 模块]]&lt;br /&gt;
# [[修改教程|修改方案]]&lt;br /&gt;
&lt;br /&gt;
== Mindows工具箱 ==&lt;br /&gt;
# [[为手机刷入Windows|为手机刷入 Windows]]&lt;br /&gt;
# [[更新驱动程序]]&lt;br /&gt;
# [[重新安装Windows|重新安装 Windows]]&lt;br /&gt;
# [[一些常见问题及其解决方案]]&lt;br /&gt;
&lt;br /&gt;
== 高级内容 ==&lt;br /&gt;
# [[Android 分区详解]]&lt;br /&gt;
# [[GKI 内核]]&lt;br /&gt;
# [[如何解包 Android ROM]]&lt;br /&gt;
# [[如何打包 Android ROM]]&lt;br /&gt;
# [[如何从源码构建 TWRP Recovery]]&lt;br /&gt;
# [[如何从源码构建 Android ROM]]&lt;br /&gt;
# [[使用edl.py|使用 edl.py]]&lt;br /&gt;
# [[为手机安装Linux|为手机安装 Linux]]&lt;br /&gt;
# [[Git使用教程]]&lt;br /&gt;
# [[为新设备编写类原生device tree]]&lt;br /&gt;
&lt;br /&gt;
== 知名玩机博主 ==&lt;br /&gt;
# [[极客湾Geekerwan]]&lt;br /&gt;
# [[小白测评]]&lt;br /&gt;
# [[微积分WekiHome]]&lt;br /&gt;
# [[晨钟酱Official]]&lt;br /&gt;
# [[江灵夏草]]&lt;br /&gt;
# [[柚坛UOTAN]]&lt;br /&gt;
# [[派大宝UI]]&lt;br /&gt;
# [[我可以等你十年]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[凡生TalkING]]&lt;br /&gt;
&lt;br /&gt;
== 知名良心开发者 ==&lt;br /&gt;
# [[暮间雾]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[Amktiao]]&lt;br /&gt;
# [[小太阳ACA]]&lt;br /&gt;
# [[hellobbn]]&lt;br /&gt;
# [[页内跳转测试]]&lt;br /&gt;
&lt;br /&gt;
== 更多词条 ==&lt;br /&gt;
# [[设备代号收录集合]]&lt;br /&gt;
# [[通用系统镜像]]&lt;br /&gt;
# [[AOSP]]&lt;br /&gt;
# [[Linux mainlining]]&lt;br /&gt;
# [[Windows on arm|WOA (Windows on arm)]]&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=414</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=414"/>
		<updated>2024-02-15T16:42:32Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 欢迎来到 &amp;lt;span style=&amp;quot;display: inline-block; vertical-align: middle; padding-bottom: 11px;&amp;quot;&amp;gt;[[文件:Uotan Wiki.png|120px]]&amp;lt;/span&amp;gt; · 刷机百科 =&lt;br /&gt;
&lt;br /&gt;
'''我们致力于打造一个更适合国人使用、更贴近刷机本身的玩机知识站点'''&lt;br /&gt;
&lt;br /&gt;
'''本站现有{{NUMBEROFUSERS}}名用户，{{NUMBEROFEDITS}}次编辑，{{NUMBEROFARTICLES}}篇条目，{{NUMBEROFACTIVEUSERS}}位活跃编辑者。'''&lt;br /&gt;
== 刷机入门 ==&lt;br /&gt;
# [[ADB与Fastboot驱动|ADB 与 Fastboot 驱动]]&lt;br /&gt;
# [[解锁Bootloader|解锁 Bootloader]]&lt;br /&gt;
# [[刷入第三方Recovery|刷入第三方 Recovery]]&lt;br /&gt;
# [[获取Root权限|获取 Root 权限]]&lt;br /&gt;
# [[Miflash线刷|MiFlash 线刷]]&lt;br /&gt;
&lt;br /&gt;
== 进阶内容 ==&lt;br /&gt;
# [[使用柚坛工具箱进行线刷]]&lt;br /&gt;
# [[ADB SideLoad]]&lt;br /&gt;
# [[Fastboot Update]]&lt;br /&gt;
# [[Fastboot 命令]]&lt;br /&gt;
# [[刷入任意单独镜像]]&lt;br /&gt;
# [[9008深度刷机|9008 深度刷机]]&lt;br /&gt;
# [[MTK Flashtool深度刷机|MTK Flashtool 深度刷机]]&lt;br /&gt;
# [[提取分区]]&lt;br /&gt;
# [[修改分区]]&lt;br /&gt;
# [[QCN]]&lt;br /&gt;
# [[Super_Empty]]&lt;br /&gt;
&lt;br /&gt;
== 系统修改 ==&lt;br /&gt;
# [[ADB命令|ADB 命令]]&lt;br /&gt;
# [[Magisk模块|Magisk 模块]]&lt;br /&gt;
# [[LsPosed 模块|LSPosed 模块]]&lt;br /&gt;
# [[KSU 模块]]&lt;br /&gt;
# [[修改教程|修改方案]]&lt;br /&gt;
&lt;br /&gt;
== Mindows工具箱 ==&lt;br /&gt;
# [[为手机刷入Windows|为手机刷入 Windows]]&lt;br /&gt;
# [[更新驱动程序]]&lt;br /&gt;
# [[重新安装Windows|重新安装 Windows]]&lt;br /&gt;
# [[一些常见问题及其解决方案]]&lt;br /&gt;
&lt;br /&gt;
== 高级内容 ==&lt;br /&gt;
# [[Android 分区详解]]&lt;br /&gt;
# [[GKI 内核]]&lt;br /&gt;
# [[如何解包 Android ROM]]&lt;br /&gt;
# [[如何打包 Android ROM]]&lt;br /&gt;
# [[如何从源码构建 TWRP Recovery]]&lt;br /&gt;
# [[如何从源码构建 Android ROM]]&lt;br /&gt;
# [[使用edl.py|使用 edl.py]]&lt;br /&gt;
# [[为手机安装Linux|为手机安装 Linux]]&lt;br /&gt;
# [[Git使用教程]]&lt;br /&gt;
# [[为新设备编写类原生device tree]]&lt;br /&gt;
&lt;br /&gt;
== 知名玩机博主 ==&lt;br /&gt;
# [[极客湾Geekerwan]]&lt;br /&gt;
# [[小白测评]]&lt;br /&gt;
# [[微积分WekiHome]]&lt;br /&gt;
# [[晨钟酱Official]]&lt;br /&gt;
# [[江灵夏草]]&lt;br /&gt;
# [[柚坛UOTAN]]&lt;br /&gt;
# [[派大宝UI]]&lt;br /&gt;
# [[我可以等你十年]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[凡生TalkING]]&lt;br /&gt;
&lt;br /&gt;
== 知名良心开发者 ==&lt;br /&gt;
# [[暮间雾]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[Amktiao]]&lt;br /&gt;
# [[小太阳ACA]]&lt;br /&gt;
# [[hellobbn]]&lt;br /&gt;
&lt;br /&gt;
== 更多词条 ==&lt;br /&gt;
# [[设备代号收录集合]]&lt;br /&gt;
# [[通用系统镜像]]&lt;br /&gt;
# [[AOSP]]&lt;br /&gt;
# [[Linux mainlining]]&lt;br /&gt;
# [[Windows on arm|WOA (Windows on arm)]]&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=ADB%E5%91%BD%E4%BB%A4&amp;diff=413</id>
		<title>ADB命令</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=ADB%E5%91%BD%E4%BB%A4&amp;diff=413"/>
		<updated>2024-02-15T16:34:42Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2&amp;gt;连接管理&amp;lt;/h2&amp;gt;&lt;br /&gt;
列出所有连接设备及其序列号：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb devices&amp;lt;/pre&amp;gt;&lt;br /&gt;
如果有多个连接设备，则需要使用序列号来区分：&lt;br /&gt;
&amp;lt;pre&amp;gt;export ANDROID_SERIAL=&amp;amp;lt;设备序列号&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb shell ls&amp;lt;/pre&amp;gt;&lt;br /&gt;
多设备下连接指定设备&lt;br /&gt;
&amp;lt;pre&amp;gt;adb -s 序列号 shell&amp;lt;/pre&amp;gt;&lt;br /&gt;
可以通过网络来连接 ADB：&lt;br /&gt;
让设备端的 adbd 重启，并在 TCP 端口 5555 处监听&lt;br /&gt;
&amp;lt;pre&amp;gt;adb tcpip 5555&amp;lt;/pre&amp;gt;&lt;br /&gt;
此时可以断开 USB 连接&lt;br /&gt;
远程连接设备，设备的 IP 地址是 192.168.1.100&lt;br /&gt;
&amp;lt;pre&amp;gt;adb connect 192.168.1.100:5555&amp;lt;/pre&amp;gt;&lt;br /&gt;
断开连接&lt;br /&gt;
&amp;lt;pre&amp;gt;adb disconnect 192.168.1.100:5555&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;注：在安卓11及以上版本中，可以直接在开发者选项中启用无线调试&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;调试&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;获取系统日志&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat&amp;lt;/pre&amp;gt;&lt;br /&gt;
用法&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat [选项] [应用标签]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;示例&amp;lt;/h5&amp;gt;&lt;br /&gt;
查看全部日志&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat&amp;lt;/pre&amp;gt;&lt;br /&gt;
仅查看部分日志&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat -s WifiStateMachine StateMachine&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb bugreport&amp;lt;/code&amp;gt;用于错误报告，里面包含大量详细运行信息。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;示例&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb bugreport&amp;lt;/pre&amp;gt;&lt;br /&gt;
保存到本地，方便用编辑器查看&lt;br /&gt;
&amp;lt;pre&amp;gt;adb bugreport &amp;gt;bugreport.txt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;root 权限&amp;lt;/h2&amp;gt;&lt;br /&gt;
如果&amp;lt;code&amp;gt;TARGET_BUILD_VARIANT&amp;lt;/code&amp;gt;使用的是 userdebug 模式，要获得 root 权限，需要先运行：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb root&amp;lt;/pre&amp;gt;&lt;br /&gt;
让 ADB 的设备端切换到 root 权限模式，这样 adb remount 等需要 root 权限的命令才会成功。&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;注：如果 TARGET_BUILD_VARIAN &amp;lt;/code&amp;gt;使用的是 eng 模式，则 adb 默认为 root 权限不需要切换&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;应用管理&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;安装应用&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;用法&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install [选项] 应用包.apk&amp;lt;/pre&amp;gt;&lt;br /&gt;
选项包括：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;-l&amp;lt;/strong&amp;gt; forward-lock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;-r&amp;lt;/strong&amp;gt; 重新安装应用，保留原先数据&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;-s&amp;lt;/strong&amp;gt; 安装到 SD 卡上，而不是内部存储&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;示例&amp;lt;/h5&amp;gt;&lt;br /&gt;
安装 facebook.apk&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install facebook.apk&amp;lt;/pre&amp;gt;&lt;br /&gt;
升级 twitter.apk&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install -r twitter.apk&amp;lt;/pre&amp;gt;&lt;br /&gt;
如果安装成功，工具会返回成功提示 &amp;lt;strong&amp;gt;Success&amp;lt;/strong&amp;gt;；失败的话，一般是以下几种情况:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;INSTALL_FAILED_ALREADY_EXISTS:&amp;lt;/strong&amp;gt; 此时需要用 -r 参数来重新安装。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;INSTALL_FAILED_SIGNATURE_ERROR:&amp;lt;/strong&amp;gt; 应用的签名不一致，可能是发布版和调试版签名不同所致。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;INSTALL_FAILED_INSUFFICIENT_STORAGE:&amp;lt;/strong&amp;gt; 存储空间不足，需要检查设备存储情况。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;卸载应用&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb uninstall&amp;lt;/pre&amp;gt;&lt;br /&gt;
用法：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb uninstall 应用包名称&amp;lt;/pre&amp;gt;&lt;br /&gt;
示例：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb uninstall com.android.chrome&amp;lt;/pre&amp;gt;&lt;br /&gt;
应用包名称可以用以下命令列出：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb shell pm list packages -f&amp;lt;/pre&amp;gt;&lt;br /&gt;
运行结果是：&lt;br /&gt;
&amp;lt;pre&amp;gt;package:/system/app/Bluetooth.apk=com.android.bluetooth&amp;lt;/pre&amp;gt;&lt;br /&gt;
前面是 apk 文件，后面则是对应的包名称。&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=ADB%E5%91%BD%E4%BB%A4&amp;diff=412</id>
		<title>ADB命令</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=ADB%E5%91%BD%E4%BB%A4&amp;diff=412"/>
		<updated>2024-02-15T16:30:18Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2&amp;gt;连接管理&amp;lt;/h2&amp;gt;&lt;br /&gt;
列出所有连接设备及其序列号：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb devices&amp;lt;/pre&amp;gt;&lt;br /&gt;
如果有多个连接设备，则需要使用序列号来区分：&lt;br /&gt;
&amp;lt;pre&amp;gt;export ANDROID_SERIAL=&amp;amp;lt;设备序列号&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb shell ls&amp;lt;/pre&amp;gt;&lt;br /&gt;
多设备下连接指定设备&lt;br /&gt;
&amp;lt;pre&amp;gt;adb -s 序列号 shell&amp;lt;/pre&amp;gt;&lt;br /&gt;
可以通过网络来连接 ADB：&lt;br /&gt;
让设备端的 adbd 重启，并在 TCP 端口 5555 处监听&lt;br /&gt;
&amp;lt;pre&amp;gt;adb tcpip 5555&amp;lt;/pre&amp;gt;&lt;br /&gt;
此时可以断开 USB 连接&lt;br /&gt;
远程连接设备，设备的 IP 地址是 192.168.1.100&lt;br /&gt;
&amp;lt;pre&amp;gt;adb connect 192.168.1.100:5555&amp;lt;/pre&amp;gt;&lt;br /&gt;
断开连接&lt;br /&gt;
&amp;lt;pre&amp;gt;adb disconnect 192.168.1.100:5555&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;注：在安卓11及以上版本中，可以直接在开发者选项中启用无线调试&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;调试&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;获取系统日志&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat&amp;lt;/pre&amp;gt;&lt;br /&gt;
用法&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat [选项] [应用标签]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;示例&amp;lt;/h5&amp;gt;&lt;br /&gt;
查看全部日志&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat&amp;lt;/pre&amp;gt;&lt;br /&gt;
仅查看部分日志&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat -s WifiStateMachine StateMachine&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb bugreport&amp;lt;/code&amp;gt;用于错误报告，里面包含大量详细运行信息。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;示例&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb bugreport&amp;lt;/pre&amp;gt;&lt;br /&gt;
保存到本地，方便用编辑器查看&lt;br /&gt;
&amp;lt;pre&amp;gt;adb bugreport &amp;gt;bugreport.txt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;root 权限&amp;lt;/h2&amp;gt;&lt;br /&gt;
如果&amp;lt;code&amp;gt;TARGET_BUILD_VARIANT&amp;lt;/code&amp;gt;使用的是 userdebug 模式，要获得 root 权限，需要先运行：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb root&amp;lt;/pre&amp;gt;&lt;br /&gt;
让 ADB 的设备端切换到 root 权限模式，这样 adb remount 等需要 root 权限的命令才会成功。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;应用管理&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;安装应用&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;用法&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install [选项] 应用包.apk&amp;lt;/pre&amp;gt;&lt;br /&gt;
选项包括：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;-l&amp;lt;/strong&amp;gt; forward-lock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;-r&amp;lt;/strong&amp;gt; 重新安装应用，保留原先数据&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;-s&amp;lt;/strong&amp;gt; 安装到 SD 卡上，而不是内部存储&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;示例&amp;lt;/h5&amp;gt;&lt;br /&gt;
安装 facebook.apk&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install facebook.apk&amp;lt;/pre&amp;gt;&lt;br /&gt;
升级 twitter.apk&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install -r twitter.apk&amp;lt;/pre&amp;gt;&lt;br /&gt;
如果安装成功，工具会返回成功提示 &amp;lt;strong&amp;gt;Success&amp;lt;/strong&amp;gt;；失败的话，一般是以下几种情况:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;INSTALL_FAILED_ALREADY_EXISTS:&amp;lt;/strong&amp;gt; 此时需要用 -r 参数来重新安装。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;INSTALL_FAILED_SIGNATURE_ERROR:&amp;lt;/strong&amp;gt; 应用的签名不一致，可能是发布版和调试版签名不同所致。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;INSTALL_FAILED_INSUFFICIENT_STORAGE:&amp;lt;/strong&amp;gt; 存储空间不足，需要检查设备存储情况。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;卸载应用&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb uninstall&amp;lt;/pre&amp;gt;&lt;br /&gt;
用法：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb uninstall 应用包名称&amp;lt;/pre&amp;gt;&lt;br /&gt;
示例：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb uninstall com.android.chrome&amp;lt;/pre&amp;gt;&lt;br /&gt;
应用包名称可以用以下命令列出：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb shell pm list packages -f&amp;lt;/pre&amp;gt;&lt;br /&gt;
运行结果是：&lt;br /&gt;
&amp;lt;pre&amp;gt;package:/system/app/Bluetooth.apk=com.android.bluetooth&amp;lt;/pre&amp;gt;&lt;br /&gt;
前面是 apk 文件，后面则是对应的包名称。&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=ADB%E5%91%BD%E4%BB%A4&amp;diff=411</id>
		<title>ADB命令</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=ADB%E5%91%BD%E4%BB%A4&amp;diff=411"/>
		<updated>2024-02-15T16:28:55Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2&amp;gt;连接管理&amp;lt;/h2&amp;gt;&lt;br /&gt;
列出所有连接设备及其序列号：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb devices&amp;lt;/pre&amp;gt;&lt;br /&gt;
如果有多个连接设备，则需要使用序列号来区分：&lt;br /&gt;
&amp;lt;pre&amp;gt;export ANDROID_SERIAL=&amp;amp;lt;设备序列号&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb shell ls&amp;lt;/pre&amp;gt;&lt;br /&gt;
多设备下连接指定设备&lt;br /&gt;
&amp;lt;pre&amp;gt;adb -s 序列号 shell&amp;lt;/pre&amp;gt;&lt;br /&gt;
可以通过网络来连接 ADB：&lt;br /&gt;
让设备端的 adbd 重启，并在 TCP 端口 5555 处监听&lt;br /&gt;
&amp;lt;pre&amp;gt;adb tcpip 5555&amp;lt;/pre&amp;gt;&lt;br /&gt;
此时可以断开 USB 连接&lt;br /&gt;
远程连接设备，设备的 IP 地址是 192.168.1.100&lt;br /&gt;
&amp;lt;pre&amp;gt;adb connect 192.168.1.100:5555&amp;lt;/pre&amp;gt;&lt;br /&gt;
断开连接&lt;br /&gt;
&amp;lt;pre&amp;gt;adb disconnect 192.168.1.100:5555&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;注：在安卓11及以上版本中，可以直接在开发者选项中启用无线调试&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;调试&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;获取系统日志&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat&amp;lt;/pre&amp;gt;&lt;br /&gt;
用法&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat [选项] [应用标签]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;示例&amp;lt;/h5&amp;gt;&lt;br /&gt;
查看全部日志&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat&amp;lt;/pre&amp;gt;&lt;br /&gt;
仅查看部分日志&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat -s WifiStateMachine StateMachine&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb bugreport&amp;lt;/code&amp;gt;用于错误报告，里面包含大量详细运行信息。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;示例&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb bugreport&amp;lt;/pre&amp;gt;&lt;br /&gt;
保存到本地，方便用编辑器查看&lt;br /&gt;
&amp;lt;pre&amp;gt;adb bugreport &amp;gt;bugreport.txt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;root 权限&amp;lt;/h2&amp;gt;&lt;br /&gt;
如果 TARGET_BUILD_VARIANT 使用的是 userdebug 模式，要获得 root 权限，需要先运行：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb root&amp;lt;/pre&amp;gt;&lt;br /&gt;
让 ADB 的设备端切换到 root 权限模式，这样 adb remount 等需要 root 权限的命令才会成功。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;应用管理&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;安装应用&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;用法&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install [选项] 应用包.apk&amp;lt;/pre&amp;gt;&lt;br /&gt;
选项包括：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;-l&amp;lt;/strong&amp;gt; forward-lock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;-r&amp;lt;/strong&amp;gt; 重新安装应用，保留原先数据&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;-s&amp;lt;/strong&amp;gt; 安装到 SD 卡上，而不是内部存储&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;示例&amp;lt;/h5&amp;gt;&lt;br /&gt;
安装 facebook.apk&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install facebook.apk&amp;lt;/pre&amp;gt;&lt;br /&gt;
升级 twitter.apk&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install -r twitter.apk&amp;lt;/pre&amp;gt;&lt;br /&gt;
如果安装成功，工具会返回成功提示 &amp;lt;strong&amp;gt;Success&amp;lt;/strong&amp;gt;；失败的话，一般是以下几种情况:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;INSTALL_FAILED_ALREADY_EXISTS:&amp;lt;/strong&amp;gt; 此时需要用 -r 参数来重新安装。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;INSTALL_FAILED_SIGNATURE_ERROR:&amp;lt;/strong&amp;gt; 应用的签名不一致，可能是发布版和调试版签名不同所致。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;INSTALL_FAILED_INSUFFICIENT_STORAGE:&amp;lt;/strong&amp;gt; 存储空间不足，需要检查设备存储情况。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;卸载应用&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb uninstall&amp;lt;/pre&amp;gt;&lt;br /&gt;
用法：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb uninstall 应用包名称&amp;lt;/pre&amp;gt;&lt;br /&gt;
示例：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb uninstall com.android.chrome&amp;lt;/pre&amp;gt;&lt;br /&gt;
应用包名称可以用以下命令列出：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb shell pm list packages -f&amp;lt;/pre&amp;gt;&lt;br /&gt;
运行结果是：&lt;br /&gt;
&amp;lt;pre&amp;gt;package:/system/app/Bluetooth.apk=com.android.bluetooth&amp;lt;/pre&amp;gt;&lt;br /&gt;
前面是 apk 文件，后面则是对应的包名称。&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=ADB%E5%91%BD%E4%BB%A4&amp;diff=410</id>
		<title>ADB命令</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=ADB%E5%91%BD%E4%BB%A4&amp;diff=410"/>
		<updated>2024-02-15T16:27:16Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2&amp;gt;连接管理&amp;lt;/h2&amp;gt;&lt;br /&gt;
列出所有连接设备及其序列号：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb devices&amp;lt;/pre&amp;gt;&lt;br /&gt;
如果有多个连接设备，则需要使用序列号来区分：&lt;br /&gt;
&amp;lt;pre&amp;gt;export ANDROID_SERIAL=&amp;amp;lt;设备序列号&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb shell ls&amp;lt;/pre&amp;gt;&lt;br /&gt;
多设备下连接指定设备&lt;br /&gt;
&amp;lt;pre&amp;gt;adb -s 序列号 shell&amp;lt;/pre&amp;gt;&lt;br /&gt;
可以通过网络来连接 ADB：&lt;br /&gt;
让设备端的 adbd 重启，并在 TCP 端口 5555 处监听&lt;br /&gt;
&amp;lt;pre&amp;gt;adb tcpip 5555&amp;lt;/pre&amp;gt;&lt;br /&gt;
此时可以断开 USB 连接&lt;br /&gt;
远程连接设备，设备的 IP 地址是 192.168.1.100&lt;br /&gt;
&amp;lt;pre&amp;gt;adb connect 192.168.1.100:5555&amp;lt;/pre&amp;gt;&lt;br /&gt;
断开连接&lt;br /&gt;
&amp;lt;pre&amp;gt;adb disconnect 192.168.1.100:5555&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: gray;&amp;quot;&amp;gt;注：在安卓11及以上版本中，可以直接在开发者选项中启用无线调试&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;调试&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;获取系统日志&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat&amp;lt;/pre&amp;gt;&lt;br /&gt;
用法&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat [选项] [应用标签]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;示例&amp;lt;/h5&amp;gt;&lt;br /&gt;
查看全部日志&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat&amp;lt;/pre&amp;gt;&lt;br /&gt;
仅查看部分日志&lt;br /&gt;
&amp;lt;pre&amp;gt;adb logcat -s WifiStateMachine StateMachine&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb bugreport&amp;lt;/code&amp;gt;用于错误报告，里面包含大量获取详细运行信息。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;示例&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb bugreport&amp;lt;/pre&amp;gt;&lt;br /&gt;
保存到本地，方便用编辑器查看&lt;br /&gt;
&amp;lt;pre&amp;gt;adb bugreport &amp;gt;bugreport.txt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;root 权限&amp;lt;/h2&amp;gt;&lt;br /&gt;
如果 TARGET_BUILD_VARIANT 使用的是 userdebug 模式，要获得 root 权限，需要先运行：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb root&amp;lt;/pre&amp;gt;&lt;br /&gt;
让 ADB 的设备端切换到 root 权限模式，这样 adb remount 等需要 root 权限的命令才会成功。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;应用管理&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;安装应用&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;用法&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install [选项] 应用包.apk&amp;lt;/pre&amp;gt;&lt;br /&gt;
选项包括：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;-l&amp;lt;/strong&amp;gt; forward-lock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;-r&amp;lt;/strong&amp;gt; 重新安装应用，保留原先数据&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;-s&amp;lt;/strong&amp;gt; 安装到 SD 卡上，而不是内部存储&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt;示例&amp;lt;/h5&amp;gt;&lt;br /&gt;
安装 facebook.apk&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install facebook.apk&amp;lt;/pre&amp;gt;&lt;br /&gt;
升级 twitter.apk&lt;br /&gt;
&amp;lt;pre&amp;gt;adb install -r twitter.apk&amp;lt;/pre&amp;gt;&lt;br /&gt;
如果安装成功，工具会返回成功提示 &amp;lt;strong&amp;gt;Success&amp;lt;/strong&amp;gt;；失败的话，一般是以下几种情况:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;INSTALL_FAILED_ALREADY_EXISTS:&amp;lt;/strong&amp;gt; 此时需要用 -r 参数来重新安装。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;INSTALL_FAILED_SIGNATURE_ERROR:&amp;lt;/strong&amp;gt; 应用的签名不一致，可能是发布版和调试版签名不同所致。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;INSTALL_FAILED_INSUFFICIENT_STORAGE:&amp;lt;/strong&amp;gt; 存储空间不足，需要检查设备存储情况。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;卸载应用&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;adb uninstall&amp;lt;/pre&amp;gt;&lt;br /&gt;
用法：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb uninstall 应用包名称&amp;lt;/pre&amp;gt;&lt;br /&gt;
示例：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb uninstall com.android.chrome&amp;lt;/pre&amp;gt;&lt;br /&gt;
应用包名称可以用以下命令列出：&lt;br /&gt;
&amp;lt;pre&amp;gt;adb shell pm list packages -f&amp;lt;/pre&amp;gt;&lt;br /&gt;
运行结果是：&lt;br /&gt;
&amp;lt;pre&amp;gt;package:/system/app/Bluetooth.apk=com.android.bluetooth&amp;lt;/pre&amp;gt;&lt;br /&gt;
前面是 apk 文件，后面则是对应的包名称。&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=405</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=405"/>
		<updated>2024-02-15T15:26:32Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[文件:Uotan Wiki.png|缩略图]]&lt;br /&gt;
= 欢迎来到 &amp;lt;span style=&amp;quot;display: inline-block; vertical-align: middle; padding-bottom: 11px;&amp;quot;&amp;gt;[[文件:Uotan Wiki.png|120px]]&amp;lt;/span&amp;gt; · 刷机百科 =&lt;br /&gt;
&lt;br /&gt;
'''我们致力于打造一个更适合国人使用、更贴近刷机本身的玩机知识站点'''&lt;br /&gt;
&lt;br /&gt;
'''本站现有{{NUMBEROFUSERS}}名用户，{{NUMBEROFEDITS}}次编辑，{{NUMBEROFARTICLES}}篇条目，{{NUMBEROFACTIVEUSERS}}位活跃编辑者。'''&lt;br /&gt;
== 刷机入门 ==&lt;br /&gt;
# [[ADB与Fastboot驱动|ADB 与 Fastboot 驱动]]&lt;br /&gt;
# [[解锁Bootloader|解锁 Bootloader]]&lt;br /&gt;
# [[刷入第三方Recovery|刷入第三方 Recovery]]&lt;br /&gt;
# [[获取Root权限|获取 Root 权限]]&lt;br /&gt;
# [[Miflash线刷|MiFlash 线刷]]&lt;br /&gt;
&lt;br /&gt;
== 进阶内容 ==&lt;br /&gt;
# [[使用柚坛工具箱进行线刷]]&lt;br /&gt;
# [[ADB SideLoad]]&lt;br /&gt;
# [[Fastboot Update]]&lt;br /&gt;
# [[Fastboot 命令]]&lt;br /&gt;
# [[刷入任意单独镜像]]&lt;br /&gt;
# [[9008深度刷机|9008 深度刷机]]&lt;br /&gt;
# [[MTK Flashtool深度刷机|MTK Flashtool 深度刷机]]&lt;br /&gt;
# [[提取分区]]&lt;br /&gt;
# [[修改分区]]&lt;br /&gt;
# [[QCN]]&lt;br /&gt;
# [[Super_Empty]]&lt;br /&gt;
&lt;br /&gt;
== 系统修改 ==&lt;br /&gt;
# [[ADB命令|ADB 命令]]&lt;br /&gt;
# [[Magisk模块|Magisk 模块]]&lt;br /&gt;
# [[LsPosed 模块|LSPosed 模块]]&lt;br /&gt;
# [[KSU 模块]]&lt;br /&gt;
# [[修改教程|修改方案]]&lt;br /&gt;
&lt;br /&gt;
== Mindows工具箱 ==&lt;br /&gt;
# [[为手机刷入Windows|为手机刷入 Windows]]&lt;br /&gt;
# [[更新驱动程序]]&lt;br /&gt;
# [[重新安装Windows|重新安装 Windows]]&lt;br /&gt;
# [[一些常见问题及其解决方案]]&lt;br /&gt;
&lt;br /&gt;
== 高级内容 ==&lt;br /&gt;
# [[Android 分区详解]]&lt;br /&gt;
# [[GKI 内核]]&lt;br /&gt;
# [[如何解包 Android ROM]]&lt;br /&gt;
# [[如何打包 Android ROM]]&lt;br /&gt;
# [[如何从源码构建 TWRP Recovery]]&lt;br /&gt;
# [[如何从源码构建 Android ROM]]&lt;br /&gt;
# [[使用edl.py|使用 edl.py]]&lt;br /&gt;
# [[为手机安装Linux|为手机安装 Linux]]&lt;br /&gt;
# [[Git使用教程]]&lt;br /&gt;
== 知名玩机博主 ==&lt;br /&gt;
# [[极客湾Geekerwan]]&lt;br /&gt;
# [[小白测评]]&lt;br /&gt;
# [[微积分WekiHome]]&lt;br /&gt;
# [[晨钟酱Official]]&lt;br /&gt;
# [[江灵夏草]]&lt;br /&gt;
# [[柚坛UOTAN]]&lt;br /&gt;
# [[派大宝UI]]&lt;br /&gt;
# [[我可以等你十年]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[凡生TalkING]]&lt;br /&gt;
&lt;br /&gt;
== 知名良心开发者 ==&lt;br /&gt;
# [[暮间雾]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[Amktiao]]&lt;br /&gt;
# [[小太阳ACA]]&lt;br /&gt;
# [[hellobbn]]&lt;br /&gt;
&lt;br /&gt;
== 更多词条 ==&lt;br /&gt;
# [[设备代号收录集合]]&lt;br /&gt;
# [[通用系统镜像]]&lt;br /&gt;
# [[AOSP]]&lt;br /&gt;
# [[Linux mainlining]]&lt;br /&gt;
# [[Windows on arm|WOA (Windows on arm)]]&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=404</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=404"/>
		<updated>2024-02-15T15:23:04Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[文件:Uotan Wiki.png|缩略图]]&lt;br /&gt;
= 欢迎来到 &amp;lt;span style=&amp;quot;display: inline-block; vertical-align: middle; padding-bottom: 12px;&amp;quot;&amp;gt;[[文件:Uotan Wiki.png|120px]]&amp;lt;/span&amp;gt; · 刷机百科 =&lt;br /&gt;
&lt;br /&gt;
'''我们致力于打造一个更适合国人使用、更贴近刷机本身的玩机知识站点'''&lt;br /&gt;
&lt;br /&gt;
'''本站现有{{NUMBEROFUSERS}}名用户，{{NUMBEROFEDITS}}次编辑，{{NUMBEROFARTICLES}}篇条目，{{NUMBEROFACTIVEUSERS}}位活跃编辑者。'''&lt;br /&gt;
== 刷机入门 ==&lt;br /&gt;
# [[ADB与Fastboot驱动|ADB 与 Fastboot 驱动]]&lt;br /&gt;
# [[解锁Bootloader|解锁 Bootloader]]&lt;br /&gt;
# [[刷入第三方Recovery|刷入第三方 Recovery]]&lt;br /&gt;
# [[获取Root权限|获取 Root 权限]]&lt;br /&gt;
# [[Miflash线刷|MiFlash 线刷]]&lt;br /&gt;
&lt;br /&gt;
== 进阶内容 ==&lt;br /&gt;
# [[使用柚坛工具箱进行线刷]]&lt;br /&gt;
# [[ADB SideLoad]]&lt;br /&gt;
# [[Fastboot Update]]&lt;br /&gt;
# [[Fastboot 命令]]&lt;br /&gt;
# [[刷入任意单独镜像]]&lt;br /&gt;
# [[9008深度刷机|9008 深度刷机]]&lt;br /&gt;
# [[MTK Flashtool深度刷机|MTK Flashtool 深度刷机]]&lt;br /&gt;
# [[提取分区]]&lt;br /&gt;
# [[修改分区]]&lt;br /&gt;
# [[QCN]]&lt;br /&gt;
# [[Super_Empty]]&lt;br /&gt;
&lt;br /&gt;
== 系统修改 ==&lt;br /&gt;
# [[ADB命令|ADB 命令]]&lt;br /&gt;
# [[Magisk模块|Magisk 模块]]&lt;br /&gt;
# [[LsPosed 模块|LSPosed 模块]]&lt;br /&gt;
# [[KSU 模块]]&lt;br /&gt;
# [[修改教程|修改方案]]&lt;br /&gt;
&lt;br /&gt;
== Mindows工具箱 ==&lt;br /&gt;
# [[为手机刷入Windows|为手机刷入 Windows]]&lt;br /&gt;
# [[更新驱动程序]]&lt;br /&gt;
# [[重新安装Windows|重新安装 Windows]]&lt;br /&gt;
# [[一些常见问题及其解决方案]]&lt;br /&gt;
&lt;br /&gt;
== 高级内容 ==&lt;br /&gt;
# [[Android 分区详解]]&lt;br /&gt;
# [[GKI 内核]]&lt;br /&gt;
# [[如何解包 Android ROM]]&lt;br /&gt;
# [[如何打包 Android ROM]]&lt;br /&gt;
# [[如何从源码构建 TWRP Recovery]]&lt;br /&gt;
# [[如何从源码构建 Android ROM]]&lt;br /&gt;
# [[使用edl.py|使用 edl.py]]&lt;br /&gt;
# [[为手机安装Linux|为手机安装 Linux]]&lt;br /&gt;
# [[Git使用教程]]&lt;br /&gt;
== 知名玩机博主 ==&lt;br /&gt;
# [[极客湾Geekerwan]]&lt;br /&gt;
# [[小白测评]]&lt;br /&gt;
# [[微积分WekiHome]]&lt;br /&gt;
# [[晨钟酱Official]]&lt;br /&gt;
# [[江灵夏草]]&lt;br /&gt;
# [[柚坛UOTAN]]&lt;br /&gt;
# [[派大宝UI]]&lt;br /&gt;
# [[我可以等你十年]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[凡生TalkING]]&lt;br /&gt;
&lt;br /&gt;
== 知名良心开发者 ==&lt;br /&gt;
# [[暮间雾]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[Amktiao]]&lt;br /&gt;
# [[小太阳ACA]]&lt;br /&gt;
# [[hellobbn]]&lt;br /&gt;
&lt;br /&gt;
== 更多词条 ==&lt;br /&gt;
# [[设备代号收录集合]]&lt;br /&gt;
# [[通用系统镜像]]&lt;br /&gt;
# [[AOSP]]&lt;br /&gt;
# [[Linux mainlining]]&lt;br /&gt;
# [[Windows on arm|WOA (Windows on arm)]]&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=403</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=403"/>
		<updated>2024-02-15T15:22:47Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* 欢迎来到 Uotan Wiki · 刷机百科 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[文件:Uotan Wiki.png|缩略图]]&lt;br /&gt;
= 欢迎来到 &amp;lt;span style=&amp;quot;display: inline-block; vertical-align: middle; padding-bottom: 12px;&amp;quot;&amp;gt;[[文件:Uotan Wiki.png|120px]]&amp;lt;/span&amp;gt; · 刷机百科 =&lt;br /&gt;
&lt;br /&gt;
'''我们致力于打造一个更适合国人使用、更贴近刷机本身的玩机知识站点'''&lt;br /&gt;
&lt;br /&gt;
'''本站现有{{NUMBEROFUSERS}}名用户，{{NUMBEROFEDITS}}次编辑，{{NUMBEROFARTICLES}}篇条目，{{NUMBEROFACTIVEUSERS}}位活跃编辑者。'''&lt;br /&gt;
== 刷机入门 ==&lt;br /&gt;
# [[ADB与Fastboot驱动|ADB 与 Fastboot 驱动]]&lt;br /&gt;
# [[解锁Bootloader|解锁 Bootloader]]&lt;br /&gt;
# [[刷入第三方Recovery|刷入第三方 Recovery]]&lt;br /&gt;
# [[获取Root权限|获取 Root 权限]]&lt;br /&gt;
# [[Miflash线刷|MiFlash 线刷]]&lt;br /&gt;
&lt;br /&gt;
== 进阶内容 ==&lt;br /&gt;
# [[使用柚坛工具箱进行线刷]]&lt;br /&gt;
# [[ADB SideLoad]]&lt;br /&gt;
# [[Fastboot Update]]&lt;br /&gt;
# [[Fastboot 命令]]&lt;br /&gt;
# [[刷入任意单独镜像]]&lt;br /&gt;
# [[9008深度刷机|9008 深度刷机]]&lt;br /&gt;
# [[MTK Flashtool深度刷机|MTK Flashtool 深度刷机]]&lt;br /&gt;
# [[提取分区]]&lt;br /&gt;
# [[修改分区]]&lt;br /&gt;
# [[QCN]]&lt;br /&gt;
# [[Super_Empty]]&lt;br /&gt;
&lt;br /&gt;
== 系统修改 ==&lt;br /&gt;
# [[ADB命令|ADB 命令]]&lt;br /&gt;
# [[Magisk模块|Magisk 模块]]&lt;br /&gt;
# [[LsPosed 模块|LSPosed 模块]]&lt;br /&gt;
# [[KSU 模块]]&lt;br /&gt;
# [[修改教程|修改方案]]&lt;br /&gt;
&lt;br /&gt;
== Mindows工具箱 ==&lt;br /&gt;
# [[为手机刷入Windows|为手机刷入 Windows]]&lt;br /&gt;
# [[更新驱动程序]]&lt;br /&gt;
# [[重新安装Windows|重新安装 Windows]]&lt;br /&gt;
# [[一些常见问题及其解决方案]]&lt;br /&gt;
&lt;br /&gt;
== 高级内容 ==&lt;br /&gt;
# [[Android 分区详解]]&lt;br /&gt;
# [[GKI 内核]]&lt;br /&gt;
# [[如何解包 Android ROM]]&lt;br /&gt;
# [[如何打包 Android ROM]]&lt;br /&gt;
# [[如何从源码构建 TWRP Recovery]]&lt;br /&gt;
# [[如何从源码构建 Android ROM]]&lt;br /&gt;
# [[使用edl.py|使用 edl.py]]&lt;br /&gt;
# [[为手机安装Linux|为手机安装 Linux]]&lt;br /&gt;
# [[Git使用教程]]&lt;br /&gt;
== 知名玩机博主 ==&lt;br /&gt;
# [[极客湾Geekerwan]]&lt;br /&gt;
# [[小白测评]]&lt;br /&gt;
# [[微积分WekiHome]]&lt;br /&gt;
# [[晨钟酱Official]]&lt;br /&gt;
# [[江灵夏草]]&lt;br /&gt;
# [[柚坛UOTAN]]&lt;br /&gt;
# [[派大宝UI]]&lt;br /&gt;
# [[我可以等你十年]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[凡生TalkING]]&lt;br /&gt;
&lt;br /&gt;
== 知名良心开发者 ==&lt;br /&gt;
# [[暮间雾]]&lt;br /&gt;
# [[某贼]]&lt;br /&gt;
# [[Amktiao]]&lt;br /&gt;
# [[小太阳ACA]]&lt;br /&gt;
# [[hellobbn]]&lt;br /&gt;
&lt;br /&gt;
== 更多词条 ==&lt;br /&gt;
# [[设备代号收录集合]]&lt;br /&gt;
# [[通用系统镜像]]&lt;br /&gt;
# [[AOSP]]&lt;br /&gt;
# [[Linux mainlining]]&lt;br /&gt;
# [[Windows on arm|WOA (Windows on arm)]]&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=GKI&amp;diff=396</id>
		<title>GKI</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=GKI&amp;diff=396"/>
		<updated>2024-02-15T15:06:43Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* GKI内核与KMI接口 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== '''&amp;lt;big&amp;gt;前言&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
随着Android系统的发展，碎片化问题对Android社区的生产影响越来越严重。&lt;br /&gt;
&lt;br /&gt;
此前Android通过Project Treble等项目，将供应商驱动和系统解耦、将系统组件进行拆分，衍生出了system、system_ext、product、odm、vendor等分区，而gki内核项目就是Android在内核方面的解耦，使得内核的碎片化减少。&lt;br /&gt;
&lt;br /&gt;
* 碎片化的危害：&lt;br /&gt;
* 安全更新需要耗费大量人力&lt;br /&gt;
* 很难合并长期支持的更新&lt;br /&gt;
* 妨碍 Android 平台进行版本升级&lt;br /&gt;
* 很难将内核更改贡献回上游 Linux&lt;br /&gt;
&lt;br /&gt;
'''''具体细节请参考：[https://source.android.google.cn/docs/core/architecture/kernel/generic-kernel-image?hl=zh-cn 通用内核映像]'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI 1.0内核和GKI 2.0内核的区别&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
gki1.0内核与gki2.0最大的区别就是使 OEM 无需供应商参与即可提供内核安全修复和问题修复 (LTS)，简单来说就是1.0只能算OEM内核的gki，还是属于aosp内核的下游，例如MTK平台的gki，&amp;lt;u&amp;gt;高通平台的gki，也就是dalao们常说的qgki（qcom-gki）&amp;lt;/u&amp;gt;,而2.0才能直接使用Google所维护aosp内核。&lt;br /&gt;
&lt;br /&gt;
'''''参考：[https://source.android.google.cn/docs/core/architecture/kernel/generic-kernel-image?hl=zh-cn#fragmentation-fix-gki 解决碎片化问题：通用内核映像]'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''小知识：不少手机厂商随着gki2.0内核的发展，纷纷都开始直接使用Google编译好的gki2.0内核，如内核的 suffix 以g开头，那就是Google所编译的gki内核。        例：5.10.101-android12-9-g30979850fc20，g30979850fc20就是 suffix 部分'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核与boot分区的改动&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
* 在 &amp;lt;code&amp;gt;ro.board.first_api_level=29&amp;lt;/code&amp;gt;及小于29的boot镜像中，boot镜像包含通用的 ramdisk 和内核。&lt;br /&gt;
&lt;br /&gt;
* 在 &amp;lt;code&amp;gt;ro.board.first_api_level=30&amp;lt;/code&amp;gt;的boot镜像中，boot镜像包含通用的 ramdisk 和OEM GKI内核。&lt;br /&gt;
&lt;br /&gt;
* 在 &amp;lt;code&amp;gt;ro.board.first_api_level=31&amp;lt;/code&amp;gt; 和&amp;lt;code&amp;gt;ro.board.first_api_level=32&amp;lt;/code&amp;gt;的boot镜像中，boot 镜像包含通用的 ramdisk 和 Google GKI 内核。&lt;br /&gt;
&lt;br /&gt;
* 对于发布时搭载 &amp;lt;code&amp;gt;ro.board.first_api_level=33&amp;lt;/code&amp;gt;及大于33 的设备，通用 ramdisk 将从 boot 镜像中移除，并放置在单独的 init_boot 镜像中。此更改会使 boot 镜像仅保留 Google GKI 内核。因为 magisk 需要修补RamDisk，来获取root权限，因此在 &amp;lt;code&amp;gt;ro.board.first_api_level=33&amp;lt;/code&amp;gt;及大于33 的设备需要提取 init_boot 镜像进行修补。&lt;br /&gt;
&lt;br /&gt;
==== '''如何查看 &amp;lt;code&amp;gt;ro.board.first_api_level=？&amp;lt;/code&amp;gt;'''（下列方法二选一） ====&lt;br /&gt;
&lt;br /&gt;
* 使用mt管理终端功能，输入&amp;lt;code&amp;gt;getprop ro.board.first_api_level&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 在开发者调试，开启手机USB调试，使用电脑终端，输入adb shell，授权adb调试权限，输入&amp;lt;code&amp;gt;getprop ro.board.first_api_level&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核与vendor_boot分区的诞生&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Android 11 引入了通用内核映像 (GKI) 的概念。为了能够使用 GKI 轻松启动任意设备，ro.board.first_api_level=30及30以上 设备可以使用启动映像头文件版本 3。在版本 3 中，所有供应商专用信息都已从 boot 分区分离出来并转移到新的 vendor_boot 分区中。&lt;br /&gt;
&lt;br /&gt;
因此，我们需要修改cmdlime来设置Android设备的SELinux为宽容时，应该修改vendor_boot分区中的cmdlime参数，而不是boot或init_boot。&lt;br /&gt;
&lt;br /&gt;
'''''具体参考：[https://source.android.google.cn/docs/core/architecture/kernel/generic-kernel-image?hl=zh-cn#gki-1_0-goals 供应商启动分区]'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''小知识：4.19版本的Android内核是具有gki特性的，只不过没有加入KMI功能，只在Google pixel机型上支持，属于内测版本。'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核与KMI接口&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
KMI 全称 Kernel Module Interface，相同 KMI 的内核版本是兼容的 这也是 GKI 中“通用”的含义所在；反之，如果 KMI 不同，那么这些内核之间无法互相兼容，刷入与你设备 KMI 不同的内核镜像可能会导致死机。&lt;br /&gt;
&lt;br /&gt;
具体来说，对 GKI 的设备，其内核版本格式应该如下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;KernelRelease :=&amp;lt;/strong&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Version&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;PatchLevel&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;SubLevel&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;AndroidRelease&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;KmiGeneration&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;suffix&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;w&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;.x&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;.y&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-zzz&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-k&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-something&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;.10&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;.101&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-android12&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-9&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td style=&amp;quot;border: none; white-space: nowrap;&amp;quot;&amp;gt;-g30979850fc20&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，w.x-zzz-k 为 KMI 版本。例如，一个设备内核版本为5.10.101-android12-9-g30979850fc20，那么它的 KMI 为 5.10-android12-9；理论上刷入其他这个 KMI 的内核也能正常开机。&lt;br /&gt;
&lt;br /&gt;
'''请注意：'''&lt;br /&gt;
&lt;br /&gt;
* '''内核版本中的 SubLevel 不属于 KMI 版本的一部分！'''&lt;br /&gt;
&lt;br /&gt;
* '''内核的 KMI 版本与 Android 版本并不一定相同！'''&lt;br /&gt;
&lt;br /&gt;
* '''新的 Android 设备上可能采取了防回滚机制，它不允许刷入一个安全补丁更旧的内核。比如，如果你的设备内核是 5.10.101-android12-9-g30979850fc20，它的安全补丁为 2023-11；即使你刷入与内核 KMI 一致的内核，如果安全补丁级别比 2023-11要老（例如2023-06），那么很可能会无法开机。因此，在保持 KMI 一致的情况下，优先采用安全补丁级别更新的内核！'''&lt;br /&gt;
&lt;br /&gt;
'''''具体参考：[https://source.android.google.cn/docs/core/architecture/kernel/stable-kmi?hl=zh-cn 保持稳定的内核模块接口 (KMI)]  [https://source.android.google.cn/docs/core/architecture/kernel/gki-versioning?hl=zh-cn GKI 版本控制]  [https://kernelsu.org/zh_CN/guide/installation.html#kmi KernelSU安装必备知识]'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核ABI监控&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
GKI和ABI的关系主要体现在通过ABI监控工具和符号列表来维护和管理KMI的稳定性，以确保内核的稳定和兼容性。&lt;br /&gt;
&lt;br /&gt;
KMI并非包含内核中的所有符号，甚至并非包含完整的3万多个导出符号。相反，可供模块使用的符号都明确列在一组符号列表文件中，这些文件在内核树的根目录中公开维护。所有符号列表文件中所有符号的并集定义了一组作为稳定版维护的KMI符号。&lt;br /&gt;
&lt;br /&gt;
为了减少需要作为稳定版维护的符号的数量和类型，GKI 内核具有将导出符号限制在模块所需符号范围内的功能。对于外部编译的模块，您需要有一个模块使用的符号列表，以便 GKI 内核可以导出这些符号。例如，模块用于小米机型的符号存储在内核源码的 android 目录下。&lt;br /&gt;
&lt;br /&gt;
'''''具体参考：[https://source.android.google.cn/docs/core/architecture/kernel/abi-monitor?hl=zh-cn Android 内核 ABI 监控]'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;[https://source.android.google.cn/docs/setup/build/building-kernels?hl=zh-cn GKI内核编译]&amp;lt;/big&amp;gt;''' ===&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=GKI&amp;diff=392</id>
		<title>GKI</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=GKI&amp;diff=392"/>
		<updated>2024-02-15T14:56:27Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* GKI内核与KMI接口 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== '''&amp;lt;big&amp;gt;前言&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
随着Android系统的发展，碎片化问题对Android社区的生产影响越来越严重。&lt;br /&gt;
&lt;br /&gt;
此前Android通过Project Treble等项目，将供应商驱动和系统解耦、将系统组件进行拆分，衍生出了system、system_ext、product、odm、vendor等分区，而gki内核项目就是Android在内核方面的解耦，使得内核的碎片化减少。&lt;br /&gt;
&lt;br /&gt;
* 碎片化的危害：&lt;br /&gt;
* 安全更新需要耗费大量人力&lt;br /&gt;
* 很难合并长期支持的更新&lt;br /&gt;
* 妨碍 Android 平台进行版本升级&lt;br /&gt;
* 很难将内核更改贡献回上游 Linux&lt;br /&gt;
&lt;br /&gt;
'''''具体细节请参考：[https://source.android.google.cn/docs/core/architecture/kernel/generic-kernel-image?hl=zh-cn 通用内核映像]'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI 1.0内核和GKI 2.0内核的区别&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
gki1.0内核与gki2.0最大的区别就是使 OEM 无需供应商参与即可提供内核安全修复和问题修复 (LTS)，简单来说就是1.0只能算OEM内核的gki，还是属于aosp内核的下游，例如MTK平台的gki，&amp;lt;u&amp;gt;高通平台的gki，也就是dalao们常说的qgki（qcom-gki）&amp;lt;/u&amp;gt;,而2.0才能直接使用Google所维护aosp内核。&lt;br /&gt;
&lt;br /&gt;
'''''参考：[https://source.android.google.cn/docs/core/architecture/kernel/generic-kernel-image?hl=zh-cn#fragmentation-fix-gki 解决碎片化问题：通用内核映像]'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''小知识：不少手机厂商随着gki2.0内核的发展，纷纷都开始直接使用Google编译好的gki2.0内核，如内核的 suffix 以g开头，那就是Google所编译的gki内核。        例：5.10.101-android12-9-g30979850fc20，g30979850fc20就是 suffix 部分'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核与boot分区的改动&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
* 在 &amp;lt;code&amp;gt;ro.board.first_api_level=29&amp;lt;/code&amp;gt;及小于29的boot镜像中，boot镜像包含通用的 ramdisk 和内核。&lt;br /&gt;
&lt;br /&gt;
* 在 &amp;lt;code&amp;gt;ro.board.first_api_level=30&amp;lt;/code&amp;gt;的boot镜像中，boot镜像包含通用的 ramdisk 和OEM GKI内核。&lt;br /&gt;
&lt;br /&gt;
* 在 &amp;lt;code&amp;gt;ro.board.first_api_level=31&amp;lt;/code&amp;gt; 和&amp;lt;code&amp;gt;ro.board.first_api_level=32&amp;lt;/code&amp;gt;的boot镜像中，boot 镜像包含通用的 ramdisk 和 Google GKI 内核。&lt;br /&gt;
&lt;br /&gt;
* 对于发布时搭载 &amp;lt;code&amp;gt;ro.board.first_api_level=33&amp;lt;/code&amp;gt;及大于33 的设备，通用 ramdisk 将从 boot 镜像中移除，并放置在单独的 init_boot 镜像中。此更改会使 boot 镜像仅保留 Google GKI 内核。因为 magisk 需要修补RamDisk，来获取root权限，因此在 &amp;lt;code&amp;gt;ro.board.first_api_level=33&amp;lt;/code&amp;gt;及大于33 的设备需要提取 init_boot 镜像进行修补。&lt;br /&gt;
&lt;br /&gt;
==== '''如何查看 &amp;lt;code&amp;gt;ro.board.first_api_level=？&amp;lt;/code&amp;gt;'''（下列方法二选一） ====&lt;br /&gt;
&lt;br /&gt;
* 使用mt管理终端功能，输入&amp;lt;code&amp;gt;getprop ro.board.first_api_level&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 在开发者调试，开启手机USB调试，使用电脑终端，输入adb shell，授权adb调试权限，输入&amp;lt;code&amp;gt;getprop ro.board.first_api_level&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核与vendor_boot分区的诞生&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Android 11 引入了通用内核映像 (GKI) 的概念。为了能够使用 GKI 轻松启动任意设备，ro.board.first_api_level=30及30以上 设备可以使用启动映像头文件版本 3。在版本 3 中，所有供应商专用信息都已从 boot 分区分离出来并转移到新的 vendor_boot 分区中。&lt;br /&gt;
&lt;br /&gt;
因此，我们需要修改cmdlime来设置Android设备的SELinux为宽容时，应该修改vendor_boot分区中的cmdlime参数，而不是boot或init_boot。&lt;br /&gt;
&lt;br /&gt;
'''''具体参考：[https://source.android.google.cn/docs/core/architecture/kernel/generic-kernel-image?hl=zh-cn#gki-1_0-goals 供应商启动分区]'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''小知识：4.19版本的Android内核是具有gki特性的，只不过没有加入KMI功能，只在Google pixel机型上支持，属于内测版本。'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核与KMI接口&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
KMI 全称 Kernel Module Interface，相同 KMI 的内核版本是兼容的 这也是 GKI 中“通用”的含义所在；反之，如果 KMI 不同，那么这些内核之间无法互相兼容，刷入与你设备 KMI 不同的内核镜像可能会导致死机。&lt;br /&gt;
&lt;br /&gt;
具体来说，对 GKI 的设备，其内核版本格式应该如下：&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;th&amp;gt;KernelRelease :=&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Version&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;PatchLevel&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;SubLevel&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;AndroidRelease&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;KmiGeneration&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;suffix&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;w&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;.x&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;.y&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-zzz&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-k&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-something            &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;.10&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;.101&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-android12&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-9&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-g30979850fc20&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，w.x-zzz-k 为 KMI 版本。例如，一个设备内核版本为5.10.101-android12-9-g30979850fc20，那么它的 KMI 为 5.10-android12-9；理论上刷入其他这个 KMI 的内核也能正常开机。&lt;br /&gt;
&lt;br /&gt;
'''请注意：'''&lt;br /&gt;
&lt;br /&gt;
* '''内核版本中的 SubLevel 不属于 KMI 版本的一部分！'''&lt;br /&gt;
&lt;br /&gt;
* '''内核的 KMI 版本与 Android 版本并不一定相同！'''&lt;br /&gt;
&lt;br /&gt;
* '''新的 Android 设备上可能采取了防回滚机制，它不允许刷入一个安全补丁更旧的内核。比如，如果你的设备内核是 5.10.101-android12-9-g30979850fc20，它的安全补丁为 2023-11；即使你刷入与内核 KMI 一致的内核，如果安全补丁级别比 2023-11要老（例如2023-06），那么很可能会无法开机。因此，在保持 KMI 一致的情况下，优先采用安全补丁级别更新的内核！'''&lt;br /&gt;
&lt;br /&gt;
'''''具体参考：[https://source.android.google.cn/docs/core/architecture/kernel/stable-kmi?hl=zh-cn 保持稳定的内核模块接口 (KMI)]  [https://source.android.google.cn/docs/core/architecture/kernel/gki-versioning?hl=zh-cn GKI 版本控制]  [https://kernelsu.org/zh_CN/guide/installation.html#kmi KernelSU安装必备知识]'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核ABI监控&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
GKI和ABI的关系主要体现在通过ABI监控工具和符号列表来维护和管理KMI的稳定性，以确保内核的稳定和兼容性。&lt;br /&gt;
&lt;br /&gt;
KMI并非包含内核中的所有符号，甚至并非包含完整的3万多个导出符号。相反，可供模块使用的符号都明确列在一组符号列表文件中，这些文件在内核树的根目录中公开维护。所有符号列表文件中所有符号的并集定义了一组作为稳定版维护的KMI符号。&lt;br /&gt;
&lt;br /&gt;
为了减少需要作为稳定版维护的符号的数量和类型，GKI 内核具有将导出符号限制在模块所需符号范围内的功能。对于外部编译的模块，您需要有一个模块使用的符号列表，以便 GKI 内核可以导出这些符号。例如，模块用于小米机型的符号存储在内核源码的 android 目录下。&lt;br /&gt;
&lt;br /&gt;
'''''具体参考：[https://source.android.google.cn/docs/core/architecture/kernel/abi-monitor?hl=zh-cn Android 内核 ABI 监控]'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;[https://source.android.google.cn/docs/setup/build/building-kernels?hl=zh-cn GKI内核编译]&amp;lt;/big&amp;gt;''' ===&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=GKI&amp;diff=391</id>
		<title>GKI</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=GKI&amp;diff=391"/>
		<updated>2024-02-15T14:55:49Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* GKI内核与KMI接口 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== '''&amp;lt;big&amp;gt;前言&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
随着Android系统的发展，碎片化问题对Android社区的生产影响越来越严重。&lt;br /&gt;
&lt;br /&gt;
此前Android通过Project Treble等项目，将供应商驱动和系统解耦、将系统组件进行拆分，衍生出了system、system_ext、product、odm、vendor等分区，而gki内核项目就是Android在内核方面的解耦，使得内核的碎片化减少。&lt;br /&gt;
&lt;br /&gt;
* 碎片化的危害：&lt;br /&gt;
* 安全更新需要耗费大量人力&lt;br /&gt;
* 很难合并长期支持的更新&lt;br /&gt;
* 妨碍 Android 平台进行版本升级&lt;br /&gt;
* 很难将内核更改贡献回上游 Linux&lt;br /&gt;
&lt;br /&gt;
'''''具体细节请参考：[https://source.android.google.cn/docs/core/architecture/kernel/generic-kernel-image?hl=zh-cn 通用内核映像]'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI 1.0内核和GKI 2.0内核的区别&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
gki1.0内核与gki2.0最大的区别就是使 OEM 无需供应商参与即可提供内核安全修复和问题修复 (LTS)，简单来说就是1.0只能算OEM内核的gki，还是属于aosp内核的下游，例如MTK平台的gki，&amp;lt;u&amp;gt;高通平台的gki，也就是dalao们常说的qgki（qcom-gki）&amp;lt;/u&amp;gt;,而2.0才能直接使用Google所维护aosp内核。&lt;br /&gt;
&lt;br /&gt;
'''''参考：[https://source.android.google.cn/docs/core/architecture/kernel/generic-kernel-image?hl=zh-cn#fragmentation-fix-gki 解决碎片化问题：通用内核映像]'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''小知识：不少手机厂商随着gki2.0内核的发展，纷纷都开始直接使用Google编译好的gki2.0内核，如内核的 suffix 以g开头，那就是Google所编译的gki内核。        例：5.10.101-android12-9-g30979850fc20，g30979850fc20就是 suffix 部分'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核与boot分区的改动&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
* 在 &amp;lt;code&amp;gt;ro.board.first_api_level=29&amp;lt;/code&amp;gt;及小于29的boot镜像中，boot镜像包含通用的 ramdisk 和内核。&lt;br /&gt;
&lt;br /&gt;
* 在 &amp;lt;code&amp;gt;ro.board.first_api_level=30&amp;lt;/code&amp;gt;的boot镜像中，boot镜像包含通用的 ramdisk 和OEM GKI内核。&lt;br /&gt;
&lt;br /&gt;
* 在 &amp;lt;code&amp;gt;ro.board.first_api_level=31&amp;lt;/code&amp;gt; 和&amp;lt;code&amp;gt;ro.board.first_api_level=32&amp;lt;/code&amp;gt;的boot镜像中，boot 镜像包含通用的 ramdisk 和 Google GKI 内核。&lt;br /&gt;
&lt;br /&gt;
* 对于发布时搭载 &amp;lt;code&amp;gt;ro.board.first_api_level=33&amp;lt;/code&amp;gt;及大于33 的设备，通用 ramdisk 将从 boot 镜像中移除，并放置在单独的 init_boot 镜像中。此更改会使 boot 镜像仅保留 Google GKI 内核。因为 magisk 需要修补RamDisk，来获取root权限，因此在 &amp;lt;code&amp;gt;ro.board.first_api_level=33&amp;lt;/code&amp;gt;及大于33 的设备需要提取 init_boot 镜像进行修补。&lt;br /&gt;
&lt;br /&gt;
==== '''如何查看 &amp;lt;code&amp;gt;ro.board.first_api_level=？&amp;lt;/code&amp;gt;'''（下列方法二选一） ====&lt;br /&gt;
&lt;br /&gt;
* 使用mt管理终端功能，输入&amp;lt;code&amp;gt;getprop ro.board.first_api_level&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 在开发者调试，开启手机USB调试，使用电脑终端，输入adb shell，授权adb调试权限，输入&amp;lt;code&amp;gt;getprop ro.board.first_api_level&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核与vendor_boot分区的诞生&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Android 11 引入了通用内核映像 (GKI) 的概念。为了能够使用 GKI 轻松启动任意设备，ro.board.first_api_level=30及30以上 设备可以使用启动映像头文件版本 3。在版本 3 中，所有供应商专用信息都已从 boot 分区分离出来并转移到新的 vendor_boot 分区中。&lt;br /&gt;
&lt;br /&gt;
因此，我们需要修改cmdlime来设置Android设备的SELinux为宽容时，应该修改vendor_boot分区中的cmdlime参数，而不是boot或init_boot。&lt;br /&gt;
&lt;br /&gt;
'''''具体参考：[https://source.android.google.cn/docs/core/architecture/kernel/generic-kernel-image?hl=zh-cn#gki-1_0-goals 供应商启动分区]'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''小知识：4.19版本的Android内核是具有gki特性的，只不过没有加入KMI功能，只在Google pixel机型上支持，属于内测版本。'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核与KMI接口&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
KMI 全称 Kernel Module Interface，相同 KMI 的内核版本是兼容的 这也是 GKI 中“通用”的含义所在；反之，如果 KMI 不同，那么这些内核之间无法互相兼容，刷入与你设备 KMI 不同的内核镜像可能会导致死机。&lt;br /&gt;
&lt;br /&gt;
具体来说，对 GKI 的设备，其内核版本格式应该如下：&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;th&amp;gt;KernelRelease :=&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Version&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;PatchLevel&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;SubLevel&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;AndroidRelease&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;KmiGeneration&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;suffix&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;w&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;.x&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;.y&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-zzz&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-k&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-something&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;.10&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;.101&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-android12&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-9&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;-g30979850fc20&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，w.x-zzz-k 为 KMI 版本。例如，一个设备内核版本为5.10.101-android12-9-g30979850fc20，那么它的 KMI 为 5.10-android12-9；理论上刷入其他这个 KMI 的内核也能正常开机。&lt;br /&gt;
&lt;br /&gt;
'''请注意：'''&lt;br /&gt;
&lt;br /&gt;
* '''内核版本中的 SubLevel 不属于 KMI 版本的一部分！'''&lt;br /&gt;
&lt;br /&gt;
* '''内核的 KMI 版本与 Android 版本并不一定相同！'''&lt;br /&gt;
&lt;br /&gt;
* '''新的 Android 设备上可能采取了防回滚机制，它不允许刷入一个安全补丁更旧的内核。比如，如果你的设备内核是 5.10.101-android12-9-g30979850fc20，它的安全补丁为 2023-11；即使你刷入与内核 KMI 一致的内核，如果安全补丁级别比 2023-11要老（例如2023-06），那么很可能会无法开机。因此，在保持 KMI 一致的情况下，优先采用安全补丁级别更新的内核！'''&lt;br /&gt;
&lt;br /&gt;
'''''具体参考：[https://source.android.google.cn/docs/core/architecture/kernel/stable-kmi?hl=zh-cn 保持稳定的内核模块接口 (KMI)]  [https://source.android.google.cn/docs/core/architecture/kernel/gki-versioning?hl=zh-cn GKI 版本控制]  [https://kernelsu.org/zh_CN/guide/installation.html#kmi KernelSU安装必备知识]'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核ABI监控&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
GKI和ABI的关系主要体现在通过ABI监控工具和符号列表来维护和管理KMI的稳定性，以确保内核的稳定和兼容性。&lt;br /&gt;
&lt;br /&gt;
KMI并非包含内核中的所有符号，甚至并非包含完整的3万多个导出符号。相反，可供模块使用的符号都明确列在一组符号列表文件中，这些文件在内核树的根目录中公开维护。所有符号列表文件中所有符号的并集定义了一组作为稳定版维护的KMI符号。&lt;br /&gt;
&lt;br /&gt;
为了减少需要作为稳定版维护的符号的数量和类型，GKI 内核具有将导出符号限制在模块所需符号范围内的功能。对于外部编译的模块，您需要有一个模块使用的符号列表，以便 GKI 内核可以导出这些符号。例如，模块用于小米机型的符号存储在内核源码的 android 目录下。&lt;br /&gt;
&lt;br /&gt;
'''''具体参考：[https://source.android.google.cn/docs/core/architecture/kernel/abi-monitor?hl=zh-cn Android 内核 ABI 监控]'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;[https://source.android.google.cn/docs/setup/build/building-kernels?hl=zh-cn GKI内核编译]&amp;lt;/big&amp;gt;''' ===&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Git%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B&amp;diff=381</id>
		<title>Git使用教程</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Git%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B&amp;diff=381"/>
		<updated>2024-02-15T14:29:04Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* git status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git的由来： ===&lt;br /&gt;
Git是一个开源的分布式版本控制系统，可以有效、高速地处理从很小到非常大的项目版本管理，也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper。&lt;br /&gt;
&lt;br /&gt;
=== 常见的代码托管平台： ===&lt;br /&gt;
[https://github.com Github]&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.com Gitlab]&lt;br /&gt;
&lt;br /&gt;
[https://gitee.com Gitee]&lt;br /&gt;
&lt;br /&gt;
=== Git 常见命令: ===&lt;br /&gt;
&lt;br /&gt;
==== git init ====&lt;br /&gt;
在本地目录中初始化一个新的Git仓库&lt;br /&gt;
&lt;br /&gt;
==== git config ====&lt;br /&gt;
用于配置用户的信息以及其他设置,在使用git之前您必须完成以下步骤。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global user.name &amp;quot;your username&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;git config --global user.email &amp;quot;your email&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== git clone ====&lt;br /&gt;
用于将远程仓库的代码克隆到本地&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;url&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
克隆某个地址(url)的仓库，远程仓库的地址可以是本地的目录，也可以是例如github,giteee,gitlab一类的代码托管平台&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;--depth=&amp;lt;number&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
克隆仓库并且保留number条提交历史，number在此处即表达我们克隆的深度。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;-b &amp;lt;branch&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
克隆指定分支下的仓库内容&lt;br /&gt;
&lt;br /&gt;
==== git add ====&lt;br /&gt;
添加某个文件，或者目录到暂存区，用于告诉git你需要将哪些文件的更改包含在下一次的提交(commit)之中&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
添加一个或者多个文件到暂存区之中&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add [file1] [file2]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
添加指定目录(文件)到暂存区，包括子目录：&lt;br /&gt;
&lt;br /&gt;
添加当前目录下的所有文件到暂存区,包括子目录：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add [dir]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
添加当前目录下的所有文件到暂存区：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git status ====&lt;br /&gt;
查看当前仓库的状态，此时git会在你的终端输出以下内容&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;em style=&amp;quot;color: gray;&amp;quot;&amp;gt;此处演示为英文，如果您的git终端输出为中文也是同理的&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
On branch master&lt;br /&gt;
No commits yet&lt;br /&gt;
Changes to be committed:  &lt;br /&gt;
&lt;br /&gt;
(use “git rm --cached &amp;lt;file&amp;gt;...” to unstage)       &lt;br /&gt;
new file:   makefile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
输出内容分别为&lt;br /&gt;
&lt;br /&gt;
* 您目前所在的分支&lt;br /&gt;
* 目前的提交&lt;br /&gt;
* 需要更改的内容&lt;br /&gt;
* 新增文件&lt;br /&gt;
* 修改文件&lt;br /&gt;
* 删除文件&lt;br /&gt;
&lt;br /&gt;
==== git commit ====&lt;br /&gt;
用于将暂存区我们保存的更改文件添加到本地仓库，并且会生成一条提交（commit）&lt;br /&gt;
&lt;br /&gt;
提交暂存区的更改到本地仓库&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -m &amp;quot;message&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[注] message 可以是你的备注信息&lt;br /&gt;
&lt;br /&gt;
提交暂存区中的指定文件到本地仓库&lt;br /&gt;
&lt;br /&gt;
如果你没有使用上述&amp;lt;code&amp;gt;git add&amp;lt;/code&amp;gt;命令暂存你的修改文件，可以使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
进行直接提交&lt;br /&gt;
&lt;br /&gt;
==== git checkout ====&lt;br /&gt;
&lt;br /&gt;
* 用于分支切换&lt;br /&gt;
&lt;br /&gt;
切换分支：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout &amp;lt;branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout &amp;lt;branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
例如在您的仓库中有这几个分支：&amp;lt;code&amp;gt;-&amp;gt; master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
您当前处于 master 分支，如果想要切换到test分支，我们可以使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout test&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 用于检出文件&lt;br /&gt;
将指定的文件恢复到最新的提交状态，撤销你对其的更改&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout -- &amp;lt;file&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
==== git push ====&lt;br /&gt;
用于将本地的分支版本上传到远程仓库并进行合并&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push &amp;lt;remote-host-name&amp;gt; &amp;lt;local-branch-name&amp;gt;:&amp;lt;remote-branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
remote-host-name:远程主机名&lt;br /&gt;
&lt;br /&gt;
local-branch-name:本地分支名&lt;br /&gt;
&lt;br /&gt;
例如，当你的远程主机名为origin ，本地分支名为master，远程分支名为master时：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push origin master:master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
例如，当你的rhost名为origin 本地分支名为master远程分支名为master时：&lt;br /&gt;
&lt;br /&gt;
本地和远程分支名相同，上述命令可以简写为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
当你的远程版本与本地版本有差异，无法直接push时，你可以使用--force 参数来进行强制推送&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push --force origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--force 此处可以直接简单化为 -f &lt;br /&gt;
&lt;br /&gt;
如果你想要删除主机内的某个分支，你可以使用--delete参数&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push origin --delete &amp;lt;branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git diff ====&lt;br /&gt;
用于比较当前工作区与上一个版本之间的差异&lt;br /&gt;
&lt;br /&gt;
==== git log ====&lt;br /&gt;
用于查看提交的历史&lt;br /&gt;
&lt;br /&gt;
例如当你进行一次提交之后，执行 &amp;lt;code&amp;gt;git log&amp;lt;/code&amp;gt;终端会输出&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 3a5b0d12f471418b13f2baf5e9e4c112a5e804a8 (HEAD -&amp;gt; master)&lt;br /&gt;
&lt;br /&gt;
Author: luluzzy &amp;lt;1054438588@qq.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date:   Thu Feb 15 21:28:47 2024 +0800&lt;br /&gt;
&lt;br /&gt;
    initial commit: add makefile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这些输出分别为&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;commit sha1 hash&amp;lt;/strong&amp;gt;: 针对你这个提交的commit id&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Author&amp;lt;/strong&amp;gt;: commit 作者名称 &amp;lt;you@example.com&amp;gt;&lt;br /&gt;
* &amp;lt;strong&amp;gt;Date&amp;lt;/strong&amp;gt;: commit 日期&lt;br /&gt;
* &amp;lt;strong&amp;gt;commit&amp;lt;/strong&amp;gt;: 名称&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
关于sha1_hash的介绍请看这里&amp;lt;ref&amp;gt;生成这个hash值，它是对那个commit是Git仓库中内容和头信息Header的一个校验和checksum。Linux kernel开创者和Git的开发者——Linus说，Git使用了sha1并非是为了安全性，而是为了数据的完整性；它可以保证，在很多年后，你重新checkout某个commit时，一定是它多年前的当时的状态，完全一摸一样，完全值得信任。在Git中，根据commit的sha1值40个十六进制数字进行了简单的划分目录，以前2位数字作为目录名，其下面是剩余38位数字组成的一个文件名&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
当有多次提交之后，如果我们想要翻之前的提交历史，难免会因为终端输出的内容过多而难以查看翻阅&lt;br /&gt;
&lt;br /&gt;
此时我们可以使用&amp;lt;code&amp;gt;--online&amp;lt;/code&amp;gt;参数来简化输出，此时仅会输出: sha1哈希值 + commit的名称&lt;br /&gt;
&lt;br /&gt;
例如&lt;br /&gt;
&lt;br /&gt;
347595d (HEAD -&amp;gt; master) modify makefile&lt;br /&gt;
&lt;br /&gt;
3a5b0d1 initial commit: add makefile&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==== 参考资料： ====&lt;br /&gt;
[1] 百度百科-- Git：&amp;lt;nowiki&amp;gt;https://baike.baidu.com/item/GIT/12647237?fr=ge_ala&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2] 菜鸟教程-- Git基本操作：&amp;lt;nowiki&amp;gt;https://www.runoob.com/git/git-basic-operations.html&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Git%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B&amp;diff=380</id>
		<title>Git使用教程</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Git%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B&amp;diff=380"/>
		<updated>2024-02-15T14:26:46Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* git status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git的由来： ===&lt;br /&gt;
Git是一个开源的分布式版本控制系统，可以有效、高速地处理从很小到非常大的项目版本管理，也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper。&lt;br /&gt;
&lt;br /&gt;
=== 常见的代码托管平台： ===&lt;br /&gt;
[https://github.com Github]&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.com Gitlab]&lt;br /&gt;
&lt;br /&gt;
[https://gitee.com Gitee]&lt;br /&gt;
&lt;br /&gt;
=== Git 常见命令: ===&lt;br /&gt;
&lt;br /&gt;
==== git init ====&lt;br /&gt;
在本地目录中初始化一个新的Git仓库&lt;br /&gt;
&lt;br /&gt;
==== git config ====&lt;br /&gt;
用于配置用户的信息以及其他设置,在使用git之前您必须完成以下步骤。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global user.name &amp;quot;your username&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;git config --global user.email &amp;quot;your email&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== git clone ====&lt;br /&gt;
用于将远程仓库的代码克隆到本地&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;url&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
克隆某个地址(url)的仓库，远程仓库的地址可以是本地的目录，也可以是例如github,giteee,gitlab一类的代码托管平台&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;--depth=&amp;lt;number&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
克隆仓库并且保留number条提交历史，number在此处即表达我们克隆的深度。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;-b &amp;lt;branch&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
克隆指定分支下的仓库内容&lt;br /&gt;
&lt;br /&gt;
==== git add ====&lt;br /&gt;
添加某个文件，或者目录到暂存区，用于告诉git你需要将哪些文件的更改包含在下一次的提交(commit)之中&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
添加一个或者多个文件到暂存区之中&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add [file1] [file2]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
添加指定目录(文件)到暂存区，包括子目录：&lt;br /&gt;
&lt;br /&gt;
添加当前目录下的所有文件到暂存区,包括子目录：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add [dir]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
添加当前目录下的所有文件到暂存区：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git status ====&lt;br /&gt;
查看当前仓库的状态，此时git会在你的终端输出以下内容&lt;br /&gt;
&lt;br /&gt;
(此处演示为英文，如果您的git终端输出为中文也是同理的)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
On branch master&lt;br /&gt;
No commits yet&lt;br /&gt;
Changes to be committed:  &lt;br /&gt;
&lt;br /&gt;
(use “git rm --cached &amp;lt;file&amp;gt;...” to unstage)       &lt;br /&gt;
new file:   makefile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
输出内容分别为&lt;br /&gt;
&lt;br /&gt;
* 您目前所在的分支&lt;br /&gt;
* 目前的提交&lt;br /&gt;
* 需要更改的内容&lt;br /&gt;
* 新增文件&lt;br /&gt;
* 修改文件&lt;br /&gt;
* 删除文件&lt;br /&gt;
&lt;br /&gt;
==== git commit ====&lt;br /&gt;
用于将暂存区我们保存的更改文件添加到本地仓库，并且会生成一条提交（commit）&lt;br /&gt;
&lt;br /&gt;
提交暂存区的更改到本地仓库&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -m &amp;quot;message&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[注] message 可以是你的备注信息&lt;br /&gt;
&lt;br /&gt;
提交暂存区中的指定文件到本地仓库&lt;br /&gt;
&lt;br /&gt;
如果你没有使用上述&amp;lt;code&amp;gt;git add&amp;lt;/code&amp;gt;命令暂存你的修改文件，可以使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
进行直接提交&lt;br /&gt;
&lt;br /&gt;
==== git checkout ====&lt;br /&gt;
&lt;br /&gt;
* 用于分支切换&lt;br /&gt;
&lt;br /&gt;
切换分支：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout &amp;lt;branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout &amp;lt;branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
例如在您的仓库中有这几个分支：&amp;lt;code&amp;gt;-&amp;gt; master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
您当前处于 master 分支，如果想要切换到test分支，我们可以使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout test&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 用于检出文件&lt;br /&gt;
将指定的文件恢复到最新的提交状态，撤销你对其的更改&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout -- &amp;lt;file&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
==== git push ====&lt;br /&gt;
用于将本地的分支版本上传到远程仓库并进行合并&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push &amp;lt;remote-host-name&amp;gt; &amp;lt;local-branch-name&amp;gt;:&amp;lt;remote-branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
remote-host-name:远程主机名&lt;br /&gt;
&lt;br /&gt;
local-branch-name:本地分支名&lt;br /&gt;
&lt;br /&gt;
例如，当你的远程主机名为origin ，本地分支名为master，远程分支名为master时：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push origin master:master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
例如，当你的rhost名为origin 本地分支名为master远程分支名为master时：&lt;br /&gt;
&lt;br /&gt;
本地和远程分支名相同，上述命令可以简写为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
当你的远程版本与本地版本有差异，无法直接push时，你可以使用--force 参数来进行强制推送&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push --force origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--force 此处可以直接简单化为 -f &lt;br /&gt;
&lt;br /&gt;
如果你想要删除主机内的某个分支，你可以使用--delete参数&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push origin --delete &amp;lt;branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git diff ====&lt;br /&gt;
用于比较当前工作区与上一个版本之间的差异&lt;br /&gt;
&lt;br /&gt;
==== git log ====&lt;br /&gt;
用于查看提交的历史&lt;br /&gt;
&lt;br /&gt;
例如当你进行一次提交之后，执行 &amp;lt;code&amp;gt;git log&amp;lt;/code&amp;gt;终端会输出&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 3a5b0d12f471418b13f2baf5e9e4c112a5e804a8 (HEAD -&amp;gt; master)&lt;br /&gt;
&lt;br /&gt;
Author: luluzzy &amp;lt;1054438588@qq.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date:   Thu Feb 15 21:28:47 2024 +0800&lt;br /&gt;
&lt;br /&gt;
    initial commit: add makefile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这些输出分别为&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;commit sha1 hash&amp;lt;/strong&amp;gt;: 针对你这个提交的commit id&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Author&amp;lt;/strong&amp;gt;: commit 作者名称 &amp;lt;you@example.com&amp;gt;&lt;br /&gt;
* &amp;lt;strong&amp;gt;Date&amp;lt;/strong&amp;gt;: commit 日期&lt;br /&gt;
* &amp;lt;strong&amp;gt;commit&amp;lt;/strong&amp;gt;: 名称&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
关于sha1_hash的介绍请看这里&amp;lt;ref&amp;gt;生成这个hash值，它是对那个commit是Git仓库中内容和头信息Header的一个校验和checksum。Linux kernel开创者和Git的开发者——Linus说，Git使用了sha1并非是为了安全性，而是为了数据的完整性；它可以保证，在很多年后，你重新checkout某个commit时，一定是它多年前的当时的状态，完全一摸一样，完全值得信任。在Git中，根据commit的sha1值40个十六进制数字进行了简单的划分目录，以前2位数字作为目录名，其下面是剩余38位数字组成的一个文件名&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
当有多次提交之后，如果我们想要翻之前的提交历史，难免会因为终端输出的内容过多而难以查看翻阅&lt;br /&gt;
&lt;br /&gt;
此时我们可以使用&amp;lt;code&amp;gt;--online&amp;lt;/code&amp;gt;参数来简化输出，此时仅会输出: sha1哈希值 + commit的名称&lt;br /&gt;
&lt;br /&gt;
例如&lt;br /&gt;
&lt;br /&gt;
347595d (HEAD -&amp;gt; master) modify makefile&lt;br /&gt;
&lt;br /&gt;
3a5b0d1 initial commit: add makefile&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==== 参考资料： ====&lt;br /&gt;
[1] 百度百科-- Git：&amp;lt;nowiki&amp;gt;https://baike.baidu.com/item/GIT/12647237?fr=ge_ala&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2] 菜鸟教程-- Git基本操作：&amp;lt;nowiki&amp;gt;https://www.runoob.com/git/git-basic-operations.html&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Git%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B&amp;diff=379</id>
		<title>Git使用教程</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Git%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B&amp;diff=379"/>
		<updated>2024-02-15T14:22:30Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* git log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git的由来： ===&lt;br /&gt;
Git是一个开源的分布式版本控制系统，可以有效、高速地处理从很小到非常大的项目版本管理，也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper。&lt;br /&gt;
&lt;br /&gt;
=== 常见的代码托管平台： ===&lt;br /&gt;
[https://github.com Github]&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.com Gitlab]&lt;br /&gt;
&lt;br /&gt;
[https://gitee.com Gitee]&lt;br /&gt;
&lt;br /&gt;
=== Git 常见命令: ===&lt;br /&gt;
&lt;br /&gt;
==== git init ====&lt;br /&gt;
在本地目录中初始化一个新的Git仓库&lt;br /&gt;
&lt;br /&gt;
==== git config ====&lt;br /&gt;
用于配置用户的信息以及其他设置,在使用git之前您必须完成以下步骤。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global user.name &amp;quot;your username&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;git config --global user.email &amp;quot;your email&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== git clone ====&lt;br /&gt;
用于将远程仓库的代码克隆到本地&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;url&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
克隆某个地址(url)的仓库，远程仓库的地址可以是本地的目录，也可以是例如github,giteee,gitlab一类的代码托管平台&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;--depth=&amp;lt;number&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
克隆仓库并且保留number条提交历史，number在此处即表达我们克隆的深度。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;-b &amp;lt;branch&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
克隆指定分支下的仓库内容&lt;br /&gt;
&lt;br /&gt;
==== git add ====&lt;br /&gt;
添加某个文件，或者目录到暂存区，用于告诉git你需要将哪些文件的更改包含在下一次的提交(commit)之中&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
添加一个或者多个文件到暂存区之中&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add [file1] [file2]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
添加指定目录(文件)到暂存区，包括子目录：&lt;br /&gt;
&lt;br /&gt;
添加当前目录下的所有文件到暂存区,包括子目录：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add [dir]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
添加当前目录下的所有文件到暂存区：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git status ====&lt;br /&gt;
查看当前仓库的状态，此时git会在你的终端输出以下内容&lt;br /&gt;
&lt;br /&gt;
(此处演示为英文，如果您的git终端输出为中文也是同理的)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;On branch master&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;No commits yet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Changes to be committed:  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(use “git rm --cached &amp;lt;file&amp;gt;...” to unstage)       &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;new file:   makefile&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
输出内容分别为&lt;br /&gt;
&lt;br /&gt;
* 您目前所在的分支&lt;br /&gt;
* 目前的提交&lt;br /&gt;
* 需要更改的内容&lt;br /&gt;
* 新增文件&lt;br /&gt;
* 修改文件&lt;br /&gt;
* 删除文件&lt;br /&gt;
&lt;br /&gt;
==== git commit ====&lt;br /&gt;
用于将暂存区我们保存的更改文件添加到本地仓库，并且会生成一条提交（commit）&lt;br /&gt;
&lt;br /&gt;
提交暂存区的更改到本地仓库&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -m &amp;quot;message&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[注] message 可以是你的备注信息&lt;br /&gt;
&lt;br /&gt;
提交暂存区中的指定文件到本地仓库&lt;br /&gt;
&lt;br /&gt;
如果你没有使用上述&amp;lt;code&amp;gt;git add&amp;lt;/code&amp;gt;命令暂存你的修改文件，可以使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
进行直接提交&lt;br /&gt;
&lt;br /&gt;
==== git checkout ====&lt;br /&gt;
&lt;br /&gt;
* 用于分支切换&lt;br /&gt;
&lt;br /&gt;
切换分支：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout &amp;lt;branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout &amp;lt;branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
例如在您的仓库中有这几个分支：&amp;lt;code&amp;gt;-&amp;gt; master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
您当前处于 master 分支，如果想要切换到test分支，我们可以使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout test&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 用于检出文件&lt;br /&gt;
将指定的文件恢复到最新的提交状态，撤销你对其的更改&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout -- &amp;lt;file&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
==== git push ====&lt;br /&gt;
用于将本地的分支版本上传到远程仓库并进行合并&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push &amp;lt;remote-host-name&amp;gt; &amp;lt;local-branch-name&amp;gt;:&amp;lt;remote-branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
remote-host-name:远程主机名&lt;br /&gt;
&lt;br /&gt;
local-branch-name:本地分支名&lt;br /&gt;
&lt;br /&gt;
例如，当你的远程主机名为origin ，本地分支名为master，远程分支名为master时：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push origin master:master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
例如，当你的rhost名为origin 本地分支名为master远程分支名为master时：&lt;br /&gt;
&lt;br /&gt;
本地和远程分支名相同，上述命令可以简写为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
当你的远程版本与本地版本有差异，无法直接push时，你可以使用--force 参数来进行强制推送&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push --force origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--force 此处可以直接简单化为 -f &lt;br /&gt;
&lt;br /&gt;
如果你想要删除主机内的某个分支，你可以使用--delete参数&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push origin --delete &amp;lt;branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git diff ====&lt;br /&gt;
用于比较当前工作区与上一个版本之间的差异&lt;br /&gt;
&lt;br /&gt;
==== git log ====&lt;br /&gt;
用于查看提交的历史&lt;br /&gt;
&lt;br /&gt;
例如当你进行一次提交之后，执行 &amp;lt;code&amp;gt;git log&amp;lt;/code&amp;gt;终端会输出&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 3a5b0d12f471418b13f2baf5e9e4c112a5e804a8 (HEAD -&amp;gt; master)&lt;br /&gt;
&lt;br /&gt;
Author: luluzzy &amp;lt;1054438588@qq.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date:   Thu Feb 15 21:28:47 2024 +0800&lt;br /&gt;
&lt;br /&gt;
    initial commit: add makefile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这些输出分别为&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;commit sha1 hash&amp;lt;/strong&amp;gt;: 针对你这个提交的commit id&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Author&amp;lt;/strong&amp;gt;: commit 作者名称 &amp;lt;you@example.com&amp;gt;&lt;br /&gt;
* &amp;lt;strong&amp;gt;Date&amp;lt;/strong&amp;gt;: commit 日期&lt;br /&gt;
* &amp;lt;strong&amp;gt;commit&amp;lt;/strong&amp;gt;: 名称&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
关于sha1_hash的介绍请看这里&amp;lt;ref&amp;gt;生成这个hash值，它是对那个commit是Git仓库中内容和头信息Header的一个校验和checksum。Linux kernel开创者和Git的开发者——Linus说，Git使用了sha1并非是为了安全性，而是为了数据的完整性；它可以保证，在很多年后，你重新checkout某个commit时，一定是它多年前的当时的状态，完全一摸一样，完全值得信任。在Git中，根据commit的sha1值40个十六进制数字进行了简单的划分目录，以前2位数字作为目录名，其下面是剩余38位数字组成的一个文件名&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
当有多次提交之后，如果我们想要翻之前的提交历史，难免会因为终端输出的内容过多而难以查看翻阅&lt;br /&gt;
&lt;br /&gt;
此时我们可以使用&amp;lt;code&amp;gt;--online&amp;lt;/code&amp;gt;参数来简化输出，此时仅会输出: sha1哈希值 + commit的名称&lt;br /&gt;
&lt;br /&gt;
例如&lt;br /&gt;
&lt;br /&gt;
347595d (HEAD -&amp;gt; master) modify makefile&lt;br /&gt;
&lt;br /&gt;
3a5b0d1 initial commit: add makefile&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==== 参考资料： ====&lt;br /&gt;
[1] 百度百科-- Git：&amp;lt;nowiki&amp;gt;https://baike.baidu.com/item/GIT/12647237?fr=ge_ala&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2] 菜鸟教程-- Git基本操作：&amp;lt;nowiki&amp;gt;https://www.runoob.com/git/git-basic-operations.html&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=GKI&amp;diff=377</id>
		<title>GKI</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=GKI&amp;diff=377"/>
		<updated>2024-02-15T14:16:59Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​/* GKI内核与KMI接口 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== '''&amp;lt;big&amp;gt;前言&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
随着Android系统的发展，碎片化问题对Android社区的生产影响越来越严重。&lt;br /&gt;
&lt;br /&gt;
此前Android通过Project Treble等项目，将供应商驱动和系统解耦、将系统组件进行拆分，衍生出了system、system_ext、product、odm、vendor等分区，而gki内核项目就是Android在内核方面的解耦，使得内核的碎片化减少。&lt;br /&gt;
&lt;br /&gt;
* 碎片化的危害：&lt;br /&gt;
* 安全更新需要耗费大量人力&lt;br /&gt;
* 很难合并长期支持的更新&lt;br /&gt;
* 妨碍 Android 平台进行版本升级&lt;br /&gt;
* 很难将内核更改贡献回上游 Linux&lt;br /&gt;
&lt;br /&gt;
'''''具体细节请参考：[https://source.android.google.cn/docs/core/architecture/kernel/generic-kernel-image?hl=zh-cn 通用内核映像]'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI 1.0内核和GKI 2.0内核的区别&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
gki1.0内核与gki2.0最大的区别就是使 OEM 无需供应商参与即可提供内核安全修复和问题修复 (LTS)，简单来说就是1.0只能算OEM内核的gki，还是属于aosp内核的下游，例如MTK平台的gki，&amp;lt;u&amp;gt;高通平台的gki，也就是dalao们常说的qgki（qcom-gki）&amp;lt;/u&amp;gt;,而2.0才能直接使用Google所维护aosp内核。&lt;br /&gt;
&lt;br /&gt;
'''''参考：[https://source.android.google.cn/docs/core/architecture/kernel/generic-kernel-image?hl=zh-cn#fragmentation-fix-gki 解决碎片化问题：通用内核映像]'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''小知识：不少手机厂商随着gki2.0内核的发展，纷纷都开始直接使用Google编译好的gki2.0内核，如内核的 suffix 以g开头，那就是Google所编译的gki内核。        例：5.10.101-android12-9-g30979850fc20，g30979850fc20就是 suffix 部分'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核与boot分区的改动&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
* 在 &amp;lt;code&amp;gt;ro.board.first_api_level=29&amp;lt;/code&amp;gt;及小于29的boot镜像中，boot镜像包含通用的 ramdisk 和内核。&lt;br /&gt;
&lt;br /&gt;
* 在 &amp;lt;code&amp;gt;ro.board.first_api_level=30&amp;lt;/code&amp;gt;的boot镜像中，boot镜像包含通用的 ramdisk 和OEM GKI内核。&lt;br /&gt;
&lt;br /&gt;
* 在 &amp;lt;code&amp;gt;ro.board.first_api_level=31&amp;lt;/code&amp;gt; 和&amp;lt;code&amp;gt;ro.board.first_api_level=32&amp;lt;/code&amp;gt;的boot镜像中，boot 镜像包含通用的 ramdisk 和 Google GKI 内核。&lt;br /&gt;
&lt;br /&gt;
* 对于发布时搭载 &amp;lt;code&amp;gt;ro.board.first_api_level=33&amp;lt;/code&amp;gt;及大于33 的设备，通用 ramdisk 将从 boot 镜像中移除，并放置在单独的 init_boot 镜像中。此更改会使 boot 镜像仅保留 Google GKI 内核。因为 magisk 需要修补RamDisk，来获取root权限，因此在 &amp;lt;code&amp;gt;ro.board.first_api_level=33&amp;lt;/code&amp;gt;及大于33 的设备需要提取 init_boot 镜像进行修补。&lt;br /&gt;
&lt;br /&gt;
==== '''如何查看 &amp;lt;code&amp;gt;ro.board.first_api_level=？&amp;lt;/code&amp;gt;'''（下列方法二选一） ====&lt;br /&gt;
&lt;br /&gt;
* 使用mt管理终端功能，输入&amp;lt;code&amp;gt;getprop ro.board.first_api_level&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 在开发者调试，开启手机USB调试，使用电脑终端，输入adb shell，授权adb调试权限，输入&amp;lt;code&amp;gt;getprop ro.board.first_api_level&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核与vendor_boot分区的诞生&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Android 11 引入了通用内核映像 (GKI) 的概念。为了能够使用 GKI 轻松启动任意设备，ro.board.first_api_level=30及30以上 设备可以使用启动映像头文件版本 3。在版本 3 中，所有供应商专用信息都已从 boot 分区分离出来并转移到新的 vendor_boot 分区中。&lt;br /&gt;
&lt;br /&gt;
因此，我们需要修改cmdlime来设置Android设备的SELinux为宽容时，应该修改vendor_boot分区中的cmdlime参数，而不是boot或init_boot。&lt;br /&gt;
&lt;br /&gt;
'''''具体参考：[https://source.android.google.cn/docs/core/architecture/kernel/generic-kernel-image?hl=zh-cn#gki-1_0-goals 供应商启动分区]'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''小知识：4.19版本的Android内核是具有gki特性的，只不过没有加入KMI功能，只在Google pixel机型上支持，属于内测版本。'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核与KMI接口&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
KMI 全称 Kernel Module Interface，相同 KMI 的内核版本是兼容的 这也是 GKI 中“通用”的含义所在；反之，如果 KMI 不同，那么这些内核之间无法互相兼容，刷入与你设备 KMI 不同的内核镜像可能会导致死机。&lt;br /&gt;
&lt;br /&gt;
具体来说，对 GKI 的设备，其内核版本格式应该如下：&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;th&amp;gt;KernelRelease :=&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Version&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;PatchLevel&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;SubLevel&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;AndroidRelease&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;KmiGeneration&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;suffix&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;w&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;x&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;y&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;zzz&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;k&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;something&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;101&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;android12&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;9&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;g30979850fc20&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，w.x-zzz-k 为 KMI 版本。例如，一个设备内核版本为5.10.101-android12-9-g30979850fc20，那么它的 KMI 为 5.10-android12-9；理论上刷入其他这个 KMI 的内核也能正常开机。&lt;br /&gt;
&lt;br /&gt;
'''请注意：'''&lt;br /&gt;
&lt;br /&gt;
* '''内核版本中的 SubLevel 不属于 KMI 版本的一部分！'''&lt;br /&gt;
&lt;br /&gt;
* '''内核的 KMI 版本与 Android 版本并不一定相同！'''&lt;br /&gt;
&lt;br /&gt;
* '''新的 Android 设备上可能采取了防回滚机制，它不允许刷入一个安全补丁更旧的内核。比如，如果你的设备内核是 5.10.101-android12-9-g30979850fc20，它的安全补丁为 2023-11；即使你刷入与内核 KMI 一致的内核，如果安全补丁级别比 2023-11要老（例如2023-06），那么很可能会无法开机。因此，在保持 KMI 一致的情况下，优先采用安全补丁级别更新的内核！'''&lt;br /&gt;
&lt;br /&gt;
'''''具体参考：[https://source.android.google.cn/docs/core/architecture/kernel/stable-kmi?hl=zh-cn 保持稳定的内核模块接口 (KMI)]  [https://source.android.google.cn/docs/core/architecture/kernel/gki-versioning?hl=zh-cn GKI 版本控制]  [https://kernelsu.org/zh_CN/guide/installation.html#kmi KernelSU安装必备知识]'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核ABI监控&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
GKI和ABI的关系主要体现在通过ABI监控工具和符号列表来维护和管理KMI的稳定性，以确保内核的稳定和兼容性。&lt;br /&gt;
&lt;br /&gt;
KMI并非包含内核中的所有符号，甚至并非包含完整的3万多个导出符号。相反，可供模块使用的符号都明确列在一组符号列表文件中，这些文件在内核树的根目录中公开维护。所有符号列表文件中所有符号的并集定义了一组作为稳定版维护的KMI符号。&lt;br /&gt;
&lt;br /&gt;
为了减少需要作为稳定版维护的符号的数量和类型，GKI 内核具有将导出符号限制在模块所需符号范围内的功能。对于外部编译的模块，您需要有一个模块使用的符号列表，以便 GKI 内核可以导出这些符号。例如，模块用于小米机型的符号存储在内核源码的 android 目录下。&lt;br /&gt;
&lt;br /&gt;
'''''具体参考：[https://source.android.google.cn/docs/core/architecture/kernel/abi-monitor?hl=zh-cn Android 内核 ABI 监控]'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;[https://source.android.google.cn/docs/setup/build/building-kernels?hl=zh-cn GKI内核编译]&amp;lt;/big&amp;gt;''' ===&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=GKI&amp;diff=376</id>
		<title>GKI</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=GKI&amp;diff=376"/>
		<updated>2024-02-15T14:15:05Z</updated>

		<summary type="html">&lt;p&gt;Iibchara-dev：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== '''&amp;lt;big&amp;gt;前言&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
随着Android系统的发展，碎片化问题对Android社区的生产影响越来越严重。&lt;br /&gt;
&lt;br /&gt;
此前Android通过Project Treble等项目，将供应商驱动和系统解耦、将系统组件进行拆分，衍生出了system、system_ext、product、odm、vendor等分区，而gki内核项目就是Android在内核方面的解耦，使得内核的碎片化减少。&lt;br /&gt;
&lt;br /&gt;
* 碎片化的危害：&lt;br /&gt;
* 安全更新需要耗费大量人力&lt;br /&gt;
* 很难合并长期支持的更新&lt;br /&gt;
* 妨碍 Android 平台进行版本升级&lt;br /&gt;
* 很难将内核更改贡献回上游 Linux&lt;br /&gt;
&lt;br /&gt;
'''''具体细节请参考：[https://source.android.google.cn/docs/core/architecture/kernel/generic-kernel-image?hl=zh-cn 通用内核映像]'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI 1.0内核和GKI 2.0内核的区别&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
gki1.0内核与gki2.0最大的区别就是使 OEM 无需供应商参与即可提供内核安全修复和问题修复 (LTS)，简单来说就是1.0只能算OEM内核的gki，还是属于aosp内核的下游，例如MTK平台的gki，&amp;lt;u&amp;gt;高通平台的gki，也就是dalao们常说的qgki（qcom-gki）&amp;lt;/u&amp;gt;,而2.0才能直接使用Google所维护aosp内核。&lt;br /&gt;
&lt;br /&gt;
'''''参考：[https://source.android.google.cn/docs/core/architecture/kernel/generic-kernel-image?hl=zh-cn#fragmentation-fix-gki 解决碎片化问题：通用内核映像]'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''小知识：不少手机厂商随着gki2.0内核的发展，纷纷都开始直接使用Google编译好的gki2.0内核，如内核的 suffix 以g开头，那就是Google所编译的gki内核。        例：5.10.101-android12-9-g30979850fc20，g30979850fc20就是 suffix 部分'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核与boot分区的改动&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
* 在 &amp;lt;code&amp;gt;ro.board.first_api_level=29&amp;lt;/code&amp;gt;及小于29的boot镜像中，boot镜像包含通用的 ramdisk 和内核。&lt;br /&gt;
&lt;br /&gt;
* 在 &amp;lt;code&amp;gt;ro.board.first_api_level=30&amp;lt;/code&amp;gt;的boot镜像中，boot镜像包含通用的 ramdisk 和OEM GKI内核。&lt;br /&gt;
&lt;br /&gt;
* 在 &amp;lt;code&amp;gt;ro.board.first_api_level=31&amp;lt;/code&amp;gt; 和&amp;lt;code&amp;gt;ro.board.first_api_level=32&amp;lt;/code&amp;gt;的boot镜像中，boot 镜像包含通用的 ramdisk 和 Google GKI 内核。&lt;br /&gt;
&lt;br /&gt;
* 对于发布时搭载 &amp;lt;code&amp;gt;ro.board.first_api_level=33&amp;lt;/code&amp;gt;及大于33 的设备，通用 ramdisk 将从 boot 镜像中移除，并放置在单独的 init_boot 镜像中。此更改会使 boot 镜像仅保留 Google GKI 内核。因为 magisk 需要修补RamDisk，来获取root权限，因此在 &amp;lt;code&amp;gt;ro.board.first_api_level=33&amp;lt;/code&amp;gt;及大于33 的设备需要提取 init_boot 镜像进行修补。&lt;br /&gt;
&lt;br /&gt;
==== '''如何查看 &amp;lt;code&amp;gt;ro.board.first_api_level=？&amp;lt;/code&amp;gt;'''（下列方法二选一） ====&lt;br /&gt;
&lt;br /&gt;
* 使用mt管理终端功能，输入&amp;lt;code&amp;gt;getprop ro.board.first_api_level&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 在开发者调试，开启手机USB调试，使用电脑终端，输入adb shell，授权adb调试权限，输入&amp;lt;code&amp;gt;getprop ro.board.first_api_level&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核与vendor_boot分区的诞生&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Android 11 引入了通用内核映像 (GKI) 的概念。为了能够使用 GKI 轻松启动任意设备，ro.board.first_api_level=30及30以上 设备可以使用启动映像头文件版本 3。在版本 3 中，所有供应商专用信息都已从 boot 分区分离出来并转移到新的 vendor_boot 分区中。&lt;br /&gt;
&lt;br /&gt;
因此，我们需要修改cmdlime来设置Android设备的SELinux为宽容时，应该修改vendor_boot分区中的cmdlime参数，而不是boot或init_boot。&lt;br /&gt;
&lt;br /&gt;
'''''具体参考：[https://source.android.google.cn/docs/core/architecture/kernel/generic-kernel-image?hl=zh-cn#gki-1_0-goals 供应商启动分区]'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''小知识：4.19版本的Android内核是具有gki特性的，只不过没有加入KMI功能，只在Google pixel机型上支持，属于内测版本。'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核与KMI接口&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
KMI 全称 Kernel Module Interface，相同 KMI 的内核版本是兼容的 这也是 GKI 中“通用”的含义所在；反之，如果 KMI 不同，那么这些内核之间无法互相兼容，刷入与你设备 KMI 不同的内核镜像可能会导致死机。&lt;br /&gt;
&lt;br /&gt;
具体来说，对 GKI 的设备，其内核版本格式应该如下：&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;th&amp;gt;KernelRelease :=&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Version&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;PatchLevel&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;SubLevel&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;AndroidRelease&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;KmiGeneration&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;suffix&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;w&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;x&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;y&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;zzz&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;k&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;something&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;例：5&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;101&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;android12&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;9&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;g30979850fc20&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，w.x-zzz-k 为 KMI 版本。例如，一个设备内核版本为5.10.101-android12-9-g30979850fc20，那么它的 KMI 为 5.10-android12-9；理论上刷入其他这个 KMI 的内核也能正常开机。&lt;br /&gt;
&lt;br /&gt;
'''请注意：'''&lt;br /&gt;
&lt;br /&gt;
* '''内核版本中的 SubLevel 不属于 KMI 版本的一部分！'''&lt;br /&gt;
&lt;br /&gt;
* '''内核的 KMI 版本与 Android 版本并不一定相同！'''&lt;br /&gt;
&lt;br /&gt;
* '''新的 Android 设备上可能采取了防回滚机制，它不允许刷入一个安全补丁更旧的内核。比如，如果你的设备内核是 5.10.101-android12-9-g30979850fc20，它的安全补丁为 2023-11；即使你刷入与内核 KMI 一致的内核，如果安全补丁级别比 2023-11要老（例如2023-06），那么很可能会无法开机。因此，在保持 KMI 一致的情况下，优先采用安全补丁级别更新的内核！'''&lt;br /&gt;
&lt;br /&gt;
'''''具体参考：[https://source.android.google.cn/docs/core/architecture/kernel/stable-kmi?hl=zh-cn 保持稳定的内核模块接口 (KMI)]  [https://source.android.google.cn/docs/core/architecture/kernel/gki-versioning?hl=zh-cn GKI 版本控制]  [https://kernelsu.org/zh_CN/guide/installation.html#kmi KernelSU安装必备知识]'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GKI内核ABI监控&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
GKI和ABI的关系主要体现在通过ABI监控工具和符号列表来维护和管理KMI的稳定性，以确保内核的稳定和兼容性。&lt;br /&gt;
&lt;br /&gt;
KMI并非包含内核中的所有符号，甚至并非包含完整的3万多个导出符号。相反，可供模块使用的符号都明确列在一组符号列表文件中，这些文件在内核树的根目录中公开维护。所有符号列表文件中所有符号的并集定义了一组作为稳定版维护的KMI符号。&lt;br /&gt;
&lt;br /&gt;
为了减少需要作为稳定版维护的符号的数量和类型，GKI 内核具有将导出符号限制在模块所需符号范围内的功能。对于外部编译的模块，您需要有一个模块使用的符号列表，以便 GKI 内核可以导出这些符号。例如，模块用于小米机型的符号存储在内核源码的 android 目录下。&lt;br /&gt;
&lt;br /&gt;
'''''具体参考：[https://source.android.google.cn/docs/core/architecture/kernel/abi-monitor?hl=zh-cn Android 内核 ABI 监控]'''''&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;[https://source.android.google.cn/docs/setup/build/building-kernels?hl=zh-cn GKI内核编译]&amp;lt;/big&amp;gt;''' ===&lt;/div&gt;</summary>
		<author><name>Iibchara-dev</name></author>
	</entry>
</feed>