<?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=SakuraKyuo</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=SakuraKyuo"/>
	<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/SakuraKyuo"/>
	<updated>2026-06-13T20:55:17Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Android_%E7%89%88%E6%9C%AC%E5%90%88%E9%9B%86&amp;diff=907</id>
		<title>Android 版本合集</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Android_%E7%89%88%E6%9C%AC%E5%90%88%E9%9B%86&amp;diff=907"/>
		<updated>2024-12-02T14:02:06Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​更新安卓15正式发布时间以及安卓16版本号&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;说明：Android 10开始，Google不再使用甜品代号来公开命名Android版本。本wiki如有记录则为其内部代号。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!版本&lt;br /&gt;
!API版本&lt;br /&gt;
!代号&lt;br /&gt;
!发布时间&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.0&lt;br /&gt;
|1&lt;br /&gt;
|无&lt;br /&gt;
|2008/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.1&lt;br /&gt;
|2&lt;br /&gt;
|Base&lt;br /&gt;
|2009/02&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.5&lt;br /&gt;
|3, NDK 1&lt;br /&gt;
|Cupcake&lt;br /&gt;
|2009/04&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.6&lt;br /&gt;
|4, NDK 2&lt;br /&gt;
|Donut&lt;br /&gt;
|2009/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.0&lt;br /&gt;
|5&lt;br /&gt;
|Eclair&lt;br /&gt;
|2009/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.0.1&lt;br /&gt;
|6&lt;br /&gt;
|Eclair&lt;br /&gt;
|2009/12&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.1&lt;br /&gt;
|7, NDK 3&lt;br /&gt;
|Eclair&lt;br /&gt;
|2010/01&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.2.x&lt;br /&gt;
|8, NDK 4&lt;br /&gt;
|Froyo&lt;br /&gt;
|2010/05&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.3-2.3.2&lt;br /&gt;
|9, NDK 5&lt;br /&gt;
|Gingerbread&lt;br /&gt;
|2011/01&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.3.3-2.3.7&lt;br /&gt;
|10&lt;br /&gt;
|Gingerbread&lt;br /&gt;
|2011/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 3.0&lt;br /&gt;
|11&lt;br /&gt;
|Honeycomb&lt;br /&gt;
|2011/02&lt;br /&gt;
|-&lt;br /&gt;
|Android 3.1&lt;br /&gt;
|12, NDK 6&lt;br /&gt;
|Honeycomb&lt;br /&gt;
|2011/05&lt;br /&gt;
|-&lt;br /&gt;
|Android 3.2.x&lt;br /&gt;
|13&lt;br /&gt;
|Honeycomb&lt;br /&gt;
|2011/07&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.0.1-4.0.2&lt;br /&gt;
|14, NDK 7&lt;br /&gt;
|IceCreamSandwich&lt;br /&gt;
|2011/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.0.3-4.0.4&lt;br /&gt;
|15, NDK 8&lt;br /&gt;
|IceCreamSandwich&lt;br /&gt;
|2012/02&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.1(.1)&lt;br /&gt;
|16&lt;br /&gt;
|JellyBean&lt;br /&gt;
|2012/06&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.2-4.2.2&lt;br /&gt;
|17&lt;br /&gt;
|JellyBean&lt;br /&gt;
|2012/11&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.3&lt;br /&gt;
|18&lt;br /&gt;
|JellyBean&lt;br /&gt;
|2013/07&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.4&lt;br /&gt;
|19-20&lt;br /&gt;
|KitKat&lt;br /&gt;
|2013/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 5.0-5.1&lt;br /&gt;
|21-22&lt;br /&gt;
|Lollipop&lt;br /&gt;
|2014/11&lt;br /&gt;
|-&lt;br /&gt;
|Android 6.0&lt;br /&gt;
|23&lt;br /&gt;
|Marshmallow&lt;br /&gt;
|2015/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 7.0-7.1&lt;br /&gt;
|24-25&lt;br /&gt;
|Nougat&lt;br /&gt;
|2016/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 8.0-8.1&lt;br /&gt;
|26-27&lt;br /&gt;
|Oreo&lt;br /&gt;
|2017/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 9.0&lt;br /&gt;
|28&lt;br /&gt;
|Pie&lt;br /&gt;
|2018/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 10&lt;br /&gt;
|29&lt;br /&gt;
|QuinceTart&lt;br /&gt;
|2019/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 11&lt;br /&gt;
|30&lt;br /&gt;
|RedVelvetCake&lt;br /&gt;
|2020/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 12(L)&lt;br /&gt;
|31-32&lt;br /&gt;
|SnowCone&lt;br /&gt;
|2021/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 13&lt;br /&gt;
|33&lt;br /&gt;
|Tiramisu&lt;br /&gt;
|2022/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 14&lt;br /&gt;
|34&lt;br /&gt;
|UpsideDownCake&lt;br /&gt;
|2023/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 15&lt;br /&gt;
|35&lt;br /&gt;
|VanillaIceCream&lt;br /&gt;
|2024/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 16&lt;br /&gt;
|36&lt;br /&gt;
|Baklava&lt;br /&gt;
|暂未发布正式版&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>SakuraKyuo</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=YAAP&amp;diff=897</id>
		<title>YAAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=YAAP&amp;diff=897"/>
		<updated>2024-08-28T11:15:21Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​YAAP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[文件:Yaap-logo.jpg|缩略图]]&lt;br /&gt;
Yet Another AOSP Project是基于AOSP的Android类原生项目，旨在与 AOSP 保持密切联系。&lt;br /&gt;
&lt;br /&gt;
官网: [https://robotwombat.github.io/YAAP-website/ YAAP]&lt;br /&gt;
&lt;br /&gt;
Github组织: [https://github.com/yaap YAAP]&lt;/div&gt;</summary>
		<author><name>SakuraKyuo</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E6%96%87%E4%BB%B6:Yaap-logo.jpg&amp;diff=896</id>
		<title>文件:Yaap-logo.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E6%96%87%E4%BB%B6:Yaap-logo.jpg&amp;diff=896"/>
		<updated>2024-08-28T11:15:05Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;yaap logo&lt;/div&gt;</summary>
		<author><name>SakuraKyuo</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=895</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=895"/>
		<updated>2024-08-28T11:12:04Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​Add YAAP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 欢迎来到 &amp;lt;span style=&amp;quot;display: inline-block; vertical-align: middle; padding-bottom: 11px;&amp;quot;&amp;gt;[[文件:UotanWiki.png|120px]]&amp;lt;/span&amp;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;
# [[Recovery 刷机基本操作]]&lt;br /&gt;
# [[获取Root权限|获取 Root 权限]]&lt;br /&gt;
# [[Miflash线刷|MiFlash 线刷]]&lt;br /&gt;
# [[使用柚坛工具箱进行线刷]]&lt;br /&gt;
# [[ADB SideLoad]]&lt;br /&gt;
# [[Fastboot Update]]&lt;br /&gt;
&lt;br /&gt;
== 进阶内容 ==&lt;br /&gt;
# [[Fastboot 命令]]&lt;br /&gt;
# [[刷入任意单独镜像]]&lt;br /&gt;
# [[Fastbootd|用户空间Fastboot]]&lt;br /&gt;
# [[Project Treble|Project Treble（PT）]]&lt;br /&gt;
# [[通用系统镜像|通用系统镜像（GSI）]]&lt;br /&gt;
# [[GKI|GKI（通用内核映像）]]&lt;br /&gt;
# [[Dynamic System Updates|DSU（Dynamic System Updates）]]&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;
# [[修改分区]]&lt;br /&gt;
# [[QCN]]&lt;br /&gt;
# [[Magiskboot]]&lt;br /&gt;
&lt;br /&gt;
== 系统修改 ==&lt;br /&gt;
# [[ADB命令|ADB 命令]]&lt;br /&gt;
# [[HDC命令|HDC 命令]]&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;
# [[AOSP]]&lt;br /&gt;
# [[Android 分区详解]]&lt;br /&gt;
# [[SELinux]]&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;
# [[高通端口合集]]&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;
== 知名类原生ROM ==&lt;br /&gt;
# [[AfterLife]]&lt;br /&gt;
# [[AlphaDroid]]&lt;br /&gt;
# [[AOSPA]]&lt;br /&gt;
# [[ArrowOS]]&lt;br /&gt;
# [[crDroid]]&lt;br /&gt;
# [[dotOS]]&lt;br /&gt;
# [[DroidX]]&lt;br /&gt;
# [[DerpFest]]&lt;br /&gt;
# [[EvolutionX]]&lt;br /&gt;
# [[exTHmUI]]&lt;br /&gt;
# [[GrapheneOS]]&lt;br /&gt;
# [[KaleidoscopeOS]]&lt;br /&gt;
# [[LineageOS]]&lt;br /&gt;
# [[Miku|Miku UI]]&lt;br /&gt;
# [[Mokee]]&lt;br /&gt;
# [[PixelExperience]]&lt;br /&gt;
# [[RisingOS]]&lt;br /&gt;
# [[YAAP]]&lt;br /&gt;
注：以上排序不分先后&lt;br /&gt;
&lt;br /&gt;
== 知名玩机博主 ==&lt;br /&gt;
# [[极客湾Geekerwan]]&lt;br /&gt;
# [[晨钟酱Official]]&lt;br /&gt;
# [[江灵夏草]]&lt;br /&gt;
# [[柚坛UOTAN]]&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;
# [[Android 版本合集]]&lt;br /&gt;
# [[Linux mainlining]]&lt;br /&gt;
# [[Windows on arm|WOA (Windows on arm)]]&lt;/div&gt;</summary>
		<author><name>SakuraKyuo</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Project_Treble&amp;diff=624</id>
		<title>Project Treble</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Project_Treble&amp;diff=624"/>
		<updated>2024-08-06T06:09:23Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​首次创建&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Project Treble 是谷歌在Android Oreo（8.0）版本中引入的重要改进项目。它旨在改善Android设备的软件更新流程，使得设备制造商更快速、更容易地发布新的Android版本和安全补丁。&lt;br /&gt;
&lt;br /&gt;
=== Project Treble 的工作原理 ===&lt;br /&gt;
在引入Project Treble之前，Android系统的架构使得设备制造商在发布新的Android版本时需要进行大量的系统集成和调试工作，这使得更新过程通常缓慢且耗费资源。Project Treble通过引入新的体系结构层次，将操作系统框架（Android OS framework）与设备特定的硬件抽象层（HAL）分离开来。这种分层设计使得设备制造商可以更独立地更新Android框架部分，而无需修改底层硬件驱动程序。&lt;br /&gt;
&lt;br /&gt;
=== Project Treble 的确认支持方法 ===&lt;br /&gt;
要确认设备是否支持Project Treble，可以通过以下方式进行：&lt;br /&gt;
&lt;br /&gt;
* '''1. 检查设备发布时的Android版本：''' 设备必须运行Android Oreo（8.0）或更高版本，因为Project Treble从Android Oreo开始实施。&lt;br /&gt;
* '''2. 使用ADB命令行确认：''' 可以通过Android调试桥（ADB）命令行检查设备的Treble支持情况。运行以下命令：&lt;br /&gt;
  adb shell getprop ro.treble.enabled&lt;br /&gt;
&lt;br /&gt;
如果返回值为 &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;，则表示设备支持Project Treble。&lt;br /&gt;
* '''3. 使用Treble Check确认：'''从 [https://github.com/kevintresuelo/treble GitHub]下载 Treble Check 并打开查看 Project Treble 一栏是否为 '''支持'''&lt;br /&gt;
&lt;br /&gt;
=== Project Treble 的优势 ===&lt;br /&gt;
&lt;br /&gt;
* '''加快软件更新速度：''' 设备制造商可以更快地适配和发布新的Android版本和安全补丁，改善用户体验并增强设备的安全性。&lt;br /&gt;
* '''降低开发成本和复杂度：''' Treble的引入使得设备制造商能够更容易地进行系统更新，减少了为适配新版本Android而进行的繁琐工作和开发成本。&lt;br /&gt;
* '''增强设备的生命周期：''' 更新更快速和有效的Android系统使得老旧设备仍能享受到新功能和改进，延长了设备的使用寿命和市场竞争力。&lt;br /&gt;
&lt;br /&gt;
Project Treble作为Android生态系统的重要改进，显著提升了Android设备的软件更新和维护效率，为用户带来更好的使用体验。&lt;/div&gt;</summary>
		<author><name>SakuraKyuo</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=AOSP&amp;diff=623</id>
		<title>AOSP</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=AOSP&amp;diff=623"/>
		<updated>2024-08-06T05:56:27Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​AOSP补全&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Android Open Source Project（AOSP）是由Google主导开发的开放源代码项目，旨在提供一个开放和可定制的移动操作系统平台。AOSP为开发者提供了Android操作系统的完整源代码，使他们可以基于这些代码构建、定制和优化适合各种设备的Android系统。&lt;br /&gt;
&lt;br /&gt;
=== AOSP的特点和功能： ===&lt;br /&gt;
&lt;br /&gt;
* '''开放源代码：''' AOSP的核心特性是其开放的源代码许可证，使开发者可以自由地查看、修改和分发Android操作系统的代码。&lt;br /&gt;
* '''定制性和灵活性：''' 开发者可以根据需要自定义和优化AOSP代码，以创建定制化的Android系统，适配不同的硬件和应用场景。&lt;br /&gt;
* '''社区驱动：''' AOSP的开发不仅限于Google，全球的开发者和贡献者通过社区合作和反馈不断改进和完善系统。&lt;br /&gt;
&lt;br /&gt;
=== 基于AOSP发布的系统： ===&lt;br /&gt;
&lt;br /&gt;
# '''LineageOS：''' 基于AOSP的LineageOS是一个流行的开源Android分支，提供广泛的设备支持和定制选项，同时注重安全和性能。&lt;br /&gt;
# '''Pixel Experience：''' Pixel Experience旨在为非Google设备提供类似Google Pixel手机的纯净Android体验，包含Google服务和应用。&lt;/div&gt;</summary>
		<author><name>SakuraKyuo</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Dynamic_System_Updates&amp;diff=622</id>
		<title>Dynamic System Updates</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Dynamic_System_Updates&amp;diff=622"/>
		<updated>2024-08-06T05:51:47Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dynamic System Updates（DSU）是谷歌在Android 10中引入的一项创新功能。它允许用户在设备上加载和运行新的Android系统映像，作为当前操作系统的替代，而无需擦除现有系统。这意味着用户可以轻松地尝试下一个Android版本或测试不同的Android体验，而不会破坏他们现有系统。&lt;br /&gt;
&lt;br /&gt;
=== DSU的功能和优势： ===&lt;br /&gt;
&lt;br /&gt;
* '''无需擦除现有系统：''' DSU允许用户加载新的Android系统映像，而不会擦除当前的操作系统和数据。这种无缝切换的能力使得用户可以灵活地管理和测试不同版本的Android系统。&lt;br /&gt;
* '''灵活性和便捷性：''' 用户可以根据需要随时启用或禁用DSU功能。这为开发者、测试人员和普通用户提供了便利，他们可以在不影响现有配置的情况下，尝试和评估新的Android版本或功能。&lt;br /&gt;
* '''安全性保障：''' DSU依赖于device-mapper-verity（dm-verity）内核功能来验证新加载的Android系统映像。这种安全性措施确保系统映像的完整性和安全性，防止恶意软件或损坏的系统映像被加载和运行。&lt;br /&gt;
&lt;br /&gt;
=== DSU的实现要求： ===&lt;br /&gt;
&lt;br /&gt;
* 为了启用DSU功能，系统必须配置以下内核选项：&lt;br /&gt;
&lt;br /&gt;
  CONFIG_DM_VERITY=y&lt;br /&gt;
  CONFIG_DM_VERITY_FEC=y&lt;br /&gt;
&lt;br /&gt;
* Google为了存储与已安装DSU镜像相关的数据需要使用 &amp;lt;code&amp;gt;metadata&amp;lt;/code&amp;gt; 分区，这要求机器必须为动态分区(Dynamic Partition)&lt;br /&gt;
&lt;br /&gt;
=== DSU 流程 ===&lt;br /&gt;
本部分介绍如何执行多个 DSU 配置流程。&lt;br /&gt;
&lt;br /&gt;
==== 生成新的密钥对 ====&lt;br /&gt;
使用 &amp;lt;code&amp;gt;openssl&amp;lt;/code&amp;gt; 命令生成 &amp;lt;code&amp;gt;.pem&amp;lt;/code&amp;gt; 格式的 RSA 私钥/公钥对（例如，大小为 2048 位）：&lt;br /&gt;
  openssl genrsa -out oem_cert_pri.pem 2048&lt;br /&gt;
  openssl rsa -in oem_cert_pri.pem -pubout -out oem_cert_pub.pem&lt;br /&gt;
私钥可能无法访问，并且只保存在[[wikipedia:Hardware_security_module|硬件安全模块 (HSM)]] 中。在这种情况下，密钥生成后可能会提供 x509 公钥证书。如需了解如何通过 x509 证书生成 AVB 公钥，请参阅将[[Dynamic System Updates#将配对公钥添加到 ramdisk|配对公钥添加到 ramdisk]] 部分。&lt;br /&gt;
&lt;br /&gt;
如需将 x509 证书转换为 PEM 格式，请运行以下命令：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -pubkey -noout -in oem_cert_pub.x509.pem &amp;gt; oem_cert_pub.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 将配对公钥添加到 ramdisk ====&lt;br /&gt;
&amp;lt;code&amp;gt;oem_cert.avbpubkey&amp;lt;/code&amp;gt; 必须放在 &amp;lt;code&amp;gt;/avb/*.avbpubkey&amp;lt;/code&amp;gt; 下，以验证已签名的 DSU 软件包。首先，将 PEM 格式的公钥转换为 AVB 公钥格式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;avbtool extract_public_key --key oem_cert_pub.pem --output oem_cert.avbpubkey&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
然后，按照以下步骤在第一阶段 ramdisk 中添加公钥。&lt;br /&gt;
&lt;br /&gt;
* 1. 添加一个预构建模块以复制 &amp;lt;code&amp;gt;avbpubkey&amp;lt;/code&amp;gt;。例如，使用如下内容可添加 &amp;lt;code&amp;gt;device/&amp;lt;company&amp;gt;/&amp;lt;board&amp;gt;/oem_cert.avbpubkey&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;device/&amp;lt;company&amp;gt;/&amp;lt;board&amp;gt;/avb/Android.mk&amp;lt;/code&amp;gt;：&lt;br /&gt;
&lt;br /&gt;
  include $(CLEAR_VARS)&lt;br /&gt;
  &lt;br /&gt;
  LOCAL_MODULE := oem_cert.avbpubkey&lt;br /&gt;
  LOCAL_MODULE_CLASS := ETC&lt;br /&gt;
  LOCAL_SRC_FILES := $(LOCAL_MODULE)&lt;br /&gt;
  ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true)&lt;br /&gt;
  LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/first_stage_ramdisk/avb&lt;br /&gt;
  else&lt;br /&gt;
  LOCAL_MODULE_PATH := $(TARGET_RAMDISK_OUT)/avb&lt;br /&gt;
  endif&lt;br /&gt;
  &lt;br /&gt;
  include $(BUILD_PREBUILT)&lt;br /&gt;
&lt;br /&gt;
* 2. 让 droidcore 目标依赖于添加的 &amp;lt;code&amp;gt;oem_cert.avbpubkey&amp;lt;/code&amp;gt;：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;droidcore: oem_cert.avbpubkey&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 在 JSON 描述符中生成 AVB 公钥属性 ====&lt;br /&gt;
&amp;lt;code&amp;gt;oem_cert.avbpubkey&amp;lt;/code&amp;gt; 采用 AVB 公钥二进制格式。在将它放入 JSON 描述符之前，使用 SHA-1 使其可读。&lt;br /&gt;
  sha1sum oem_cert.avbpubkey | cut -f1 -d ' '&lt;br /&gt;
  3e62f2be9d9d813ef5........866ac72a51fd20&lt;br /&gt;
以下将是 JSON 描述符的 &amp;lt;code&amp;gt;pubkey&amp;lt;/code&amp;gt; 属性的内容。&lt;br /&gt;
     &amp;quot;images&amp;quot;:[&lt;br /&gt;
       {&lt;br /&gt;
          ...&lt;br /&gt;
          &amp;quot;pubkey&amp;quot;:&amp;quot;3e62f2be9d9d813ef5........866ac72a51fd20&amp;quot;,&lt;br /&gt;
          ...&lt;br /&gt;
       },&lt;br /&gt;
&lt;br /&gt;
==== 对 DSU 软件包进行签名 ====&lt;br /&gt;
使用下列方法之一对 DSU 软件包进行签名：&lt;br /&gt;
&lt;br /&gt;
* '''方法 1：重复使用通过原始 AVB 签名流程创建的工件创建 DSU 软件包。一种替代方式是从发布软件包中提取已签名的映像，并使用提取的映像直接创建 ZIP 文件。'''&lt;br /&gt;
* '''方法 2：在私钥可用时使用以下命令对 DSU 分区进行签名。DSU 软件包（ZIP 文件）中的每个 &amp;lt;code&amp;gt;img&amp;lt;/code&amp;gt; 均会单独签名：'''&lt;br /&gt;
  key_len=$(openssl rsa -in oem_cert_pri.pem -text | grep Private-Key | sed -e 's/.*(\(.*\) bit.*/\1/')&lt;br /&gt;
  for partition in system product; do&lt;br /&gt;
    avbtool add_hashtree_footer \&lt;br /&gt;
        --image ${OUT}/${partition}.img \&lt;br /&gt;
        --partition_name ${partition} \&lt;br /&gt;
        --algorithm SHA256_RSA${key_len} \&lt;br /&gt;
        --key oem_cert_pri.pem&lt;br /&gt;
  done&lt;br /&gt;
如需详细了解如何使用 &amp;lt;code&amp;gt;avbtool&amp;lt;/code&amp;gt; 添加 &amp;lt;code&amp;gt;add_hashtree_footer&amp;lt;/code&amp;gt;，请参阅使用 [https://android.googlesource.com/platform/external/avb/#using-avbtool avbtool]。&lt;br /&gt;
&lt;br /&gt;
==== 在本地验证 DSU 软件包 ====&lt;br /&gt;
建议您使用以下命令对照配对公钥验证所有本地映像：&lt;br /&gt;
  for partition in system product; do&lt;br /&gt;
      avbtool verify_image --image ${OUT}/${partition}.img  --key oem_cert_pub.pem&lt;br /&gt;
  done&lt;br /&gt;
预期的输出如下所示：&lt;br /&gt;
 Verifying image dsu/system.img using key at oem_cert_pub.pem&lt;br /&gt;
 vbmeta: Successfully verified footer and SHA256_RSA2048 vbmeta struct in dsu/system.img&lt;br /&gt;
 : Successfully verified sha1 hashtree of dsu/system.img for image of 898494464 bytes&lt;br /&gt;
 &lt;br /&gt;
 Verifying image dsu/product.img using key at oem_cert_pub.pem&lt;br /&gt;
 vbmeta: Successfully verified footer and SHA256_RSA2048 vbmeta struct in dsu/product.img&lt;br /&gt;
 : Successfully verified sha1 hashtree of dsu/product.img for image of 905830400 bytes&lt;br /&gt;
&lt;br /&gt;
==== 创建 DSU 软件包 ====&lt;br /&gt;
以下示例将展示如何创建一个包含 &amp;lt;code&amp;gt;system.img&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;product.img&amp;lt;/code&amp;gt; 的 DSU 软件包：&lt;br /&gt;
 dsu.zip {&lt;br /&gt;
     - system.img&lt;br /&gt;
     - product.img&lt;br /&gt;
 }&lt;br /&gt;
在两个映像均已签名后，使用以下命令创建 ZIP 文件：&lt;br /&gt;
  mkdir -p dsu&lt;br /&gt;
  cp ${OUT}/system.img dsu&lt;br /&gt;
  cp ${OUT}/product.img dsu&lt;br /&gt;
  cd dsu &amp;amp;&amp;amp; zip ../dsu.zip *.img &amp;amp;&amp;amp; cd -&lt;br /&gt;
&lt;br /&gt;
==== 自定义一键式 DSU ====&lt;br /&gt;
默认情况下，DSU 加载器指向 GSI 映像的元数据，即 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://...google.com/.../gsi-src.json&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
OEM 可以通过定义指向其 JSON 描述符的 &amp;lt;code&amp;gt;persist.sys.fflag.override.settings_dynamic_system.list&amp;lt;/code&amp;gt; 属性来覆盖该列表。例如，OEM 可能会提供包含 GSI 和 OEM 专有映像的 JSON 元数据，如下所示：&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;include&amp;quot;: [&amp;quot;&amp;lt;nowiki&amp;gt;https://dl.google.com/.../gsi-src.JSON&amp;lt;/nowiki&amp;gt;&amp;quot;]&lt;br /&gt;
     &amp;quot;images&amp;quot;:[&lt;br /&gt;
       {&lt;br /&gt;
          &amp;quot;name&amp;quot;:&amp;quot;OEM image&amp;quot;,&lt;br /&gt;
          &amp;quot;os_version&amp;quot;:&amp;quot;10&amp;quot;,&lt;br /&gt;
          &amp;quot;cpu_abi&amp;quot;: &amp;quot;arm64-v8a&amp;quot;,&lt;br /&gt;
          &amp;quot;details&amp;quot;:&amp;quot;...&amp;quot;,&lt;br /&gt;
          &amp;quot;vndk&amp;quot;:[&lt;br /&gt;
             27,&lt;br /&gt;
             28,&lt;br /&gt;
             29&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;spl&amp;quot;:&amp;quot;...&amp;quot;,&lt;br /&gt;
          &amp;quot;pubkey&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
          &amp;quot;uri&amp;quot;:&amp;quot;&amp;lt;nowiki&amp;gt;https://.../....zip&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
       },&lt;br /&gt;
 }&lt;br /&gt;
OEM 可以链接已发布的 DSU 元数据，如图所示。&lt;br /&gt;
[[文件:Dsu-metadata-chaining.png|缩略图]]&lt;/div&gt;</summary>
		<author><name>SakuraKyuo</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Dynamic_System_Updates&amp;diff=621</id>
		<title>Dynamic System Updates</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Dynamic_System_Updates&amp;diff=621"/>
		<updated>2024-08-06T05:51:16Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​首次创建&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dynamic System Updates（DSU）是谷歌在Android 10中引入的一项创新功能。它允许用户在设备上加载和运行新的Android系统映像，作为当前操作系统的替代，而无需擦除现有系统。这意味着用户可以轻松地尝试下一个Android版本或测试不同的Android体验，而不会破坏他们现有系统。&lt;br /&gt;
&lt;br /&gt;
=== DSU的功能和优势： ===&lt;br /&gt;
&lt;br /&gt;
* '''无需擦除现有系统：''' DSU允许用户加载新的Android系统映像，而不会擦除当前的操作系统和数据。这种无缝切换的能力使得用户可以灵活地管理和测试不同版本的Android系统。&lt;br /&gt;
* '''灵活性和便捷性：''' 用户可以根据需要随时启用或禁用DSU功能。这为开发者、测试人员和普通用户提供了便利，他们可以在不影响现有配置的情况下，尝试和评估新的Android版本或功能。&lt;br /&gt;
* '''安全性保障：''' DSU依赖于device-mapper-verity（dm-verity）内核功能来验证新加载的Android系统映像。这种安全性措施确保系统映像的完整性和安全性，防止恶意软件或损坏的系统映像被加载和运行。&lt;br /&gt;
&lt;br /&gt;
=== DSU的实现要求： ===&lt;br /&gt;
&lt;br /&gt;
* 为了启用DSU功能，系统必须配置以下内核选项：&lt;br /&gt;
&lt;br /&gt;
  CONFIG_DM_VERITY=y&lt;br /&gt;
  CONFIG_DM_VERITY_FEC=y&lt;br /&gt;
&lt;br /&gt;
* Google为了存储与已安装DSU镜像相关的数据需要使用 &amp;lt;code&amp;gt;metadata&amp;lt;/code&amp;gt; 分区，这要求机器必须为动态分区(Dynamic Partition)&lt;br /&gt;
&lt;br /&gt;
=== DSU 流程 ===&lt;br /&gt;
本部分介绍如何执行多个 DSU 配置流程。&lt;br /&gt;
&lt;br /&gt;
==== 生成新的密钥对 ====&lt;br /&gt;
使用 &amp;lt;code&amp;gt;openssl&amp;lt;/code&amp;gt; 命令生成 &amp;lt;code&amp;gt;.pem&amp;lt;/code&amp;gt; 格式的 RSA 私钥/公钥对（例如，大小为 2048 位）：&lt;br /&gt;
  openssl genrsa -out oem_cert_pri.pem 2048&lt;br /&gt;
  openssl rsa -in oem_cert_pri.pem -pubout -out oem_cert_pub.pem&lt;br /&gt;
私钥可能无法访问，并且只保存在[[wikipedia:Hardware_security_module|硬件安全模块 (HSM)]] 中。在这种情况下，密钥生成后可能会提供 x509 公钥证书。如需了解如何通过 x509 证书生成 AVB 公钥，请参阅将配对公钥添加到 ramdisk 部分。&lt;br /&gt;
&lt;br /&gt;
如需将 x509 证书转换为 PEM 格式，请运行以下命令：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -pubkey -noout -in oem_cert_pub.x509.pem &amp;gt; oem_cert_pub.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 将配对公钥添加到 ramdisk ====&lt;br /&gt;
&amp;lt;code&amp;gt;oem_cert.avbpubkey&amp;lt;/code&amp;gt; 必须放在 &amp;lt;code&amp;gt;/avb/*.avbpubkey&amp;lt;/code&amp;gt; 下，以验证已签名的 DSU 软件包。首先，将 PEM 格式的公钥转换为 AVB 公钥格式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;avbtool extract_public_key --key oem_cert_pub.pem --output oem_cert.avbpubkey&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
然后，按照以下步骤在第一阶段 ramdisk 中添加公钥。&lt;br /&gt;
&lt;br /&gt;
* 1. 添加一个预构建模块以复制 &amp;lt;code&amp;gt;avbpubkey&amp;lt;/code&amp;gt;。例如，使用如下内容可添加 &amp;lt;code&amp;gt;device/&amp;lt;company&amp;gt;/&amp;lt;board&amp;gt;/oem_cert.avbpubkey&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;device/&amp;lt;company&amp;gt;/&amp;lt;board&amp;gt;/avb/Android.mk&amp;lt;/code&amp;gt;：&lt;br /&gt;
&lt;br /&gt;
  include $(CLEAR_VARS)&lt;br /&gt;
  &lt;br /&gt;
  LOCAL_MODULE := oem_cert.avbpubkey&lt;br /&gt;
  LOCAL_MODULE_CLASS := ETC&lt;br /&gt;
  LOCAL_SRC_FILES := $(LOCAL_MODULE)&lt;br /&gt;
  ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true)&lt;br /&gt;
  LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/first_stage_ramdisk/avb&lt;br /&gt;
  else&lt;br /&gt;
  LOCAL_MODULE_PATH := $(TARGET_RAMDISK_OUT)/avb&lt;br /&gt;
  endif&lt;br /&gt;
  &lt;br /&gt;
  include $(BUILD_PREBUILT)&lt;br /&gt;
&lt;br /&gt;
* 2. 让 droidcore 目标依赖于添加的 &amp;lt;code&amp;gt;oem_cert.avbpubkey&amp;lt;/code&amp;gt;：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;droidcore: oem_cert.avbpubkey&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 在 JSON 描述符中生成 AVB 公钥属性 ====&lt;br /&gt;
&amp;lt;code&amp;gt;oem_cert.avbpubkey&amp;lt;/code&amp;gt; 采用 AVB 公钥二进制格式。在将它放入 JSON 描述符之前，使用 SHA-1 使其可读。&lt;br /&gt;
  sha1sum oem_cert.avbpubkey | cut -f1 -d ' '&lt;br /&gt;
  3e62f2be9d9d813ef5........866ac72a51fd20&lt;br /&gt;
以下将是 JSON 描述符的 &amp;lt;code&amp;gt;pubkey&amp;lt;/code&amp;gt; 属性的内容。&lt;br /&gt;
     &amp;quot;images&amp;quot;:[&lt;br /&gt;
       {&lt;br /&gt;
          ...&lt;br /&gt;
          &amp;quot;pubkey&amp;quot;:&amp;quot;3e62f2be9d9d813ef5........866ac72a51fd20&amp;quot;,&lt;br /&gt;
          ...&lt;br /&gt;
       },&lt;br /&gt;
&lt;br /&gt;
==== 对 DSU 软件包进行签名 ====&lt;br /&gt;
使用下列方法之一对 DSU 软件包进行签名：&lt;br /&gt;
&lt;br /&gt;
* '''方法 1：重复使用通过原始 AVB 签名流程创建的工件创建 DSU 软件包。一种替代方式是从发布软件包中提取已签名的映像，并使用提取的映像直接创建 ZIP 文件。'''&lt;br /&gt;
* '''方法 2：在私钥可用时使用以下命令对 DSU 分区进行签名。DSU 软件包（ZIP 文件）中的每个 &amp;lt;code&amp;gt;img&amp;lt;/code&amp;gt; 均会单独签名：'''&lt;br /&gt;
  key_len=$(openssl rsa -in oem_cert_pri.pem -text | grep Private-Key | sed -e 's/.*(\(.*\) bit.*/\1/')&lt;br /&gt;
  for partition in system product; do&lt;br /&gt;
    avbtool add_hashtree_footer \&lt;br /&gt;
        --image ${OUT}/${partition}.img \&lt;br /&gt;
        --partition_name ${partition} \&lt;br /&gt;
        --algorithm SHA256_RSA${key_len} \&lt;br /&gt;
        --key oem_cert_pri.pem&lt;br /&gt;
  done&lt;br /&gt;
如需详细了解如何使用 &amp;lt;code&amp;gt;avbtool&amp;lt;/code&amp;gt; 添加 &amp;lt;code&amp;gt;add_hashtree_footer&amp;lt;/code&amp;gt;，请参阅使用 [https://android.googlesource.com/platform/external/avb/#using-avbtool avbtool]。&lt;br /&gt;
&lt;br /&gt;
==== 在本地验证 DSU 软件包 ====&lt;br /&gt;
建议您使用以下命令对照配对公钥验证所有本地映像：&lt;br /&gt;
  for partition in system product; do&lt;br /&gt;
      avbtool verify_image --image ${OUT}/${partition}.img  --key oem_cert_pub.pem&lt;br /&gt;
  done&lt;br /&gt;
预期的输出如下所示：&lt;br /&gt;
 Verifying image dsu/system.img using key at oem_cert_pub.pem&lt;br /&gt;
 vbmeta: Successfully verified footer and SHA256_RSA2048 vbmeta struct in dsu/system.img&lt;br /&gt;
 : Successfully verified sha1 hashtree of dsu/system.img for image of 898494464 bytes&lt;br /&gt;
 &lt;br /&gt;
 Verifying image dsu/product.img using key at oem_cert_pub.pem&lt;br /&gt;
 vbmeta: Successfully verified footer and SHA256_RSA2048 vbmeta struct in dsu/product.img&lt;br /&gt;
 : Successfully verified sha1 hashtree of dsu/product.img for image of 905830400 bytes&lt;br /&gt;
&lt;br /&gt;
==== 创建 DSU 软件包 ====&lt;br /&gt;
以下示例将展示如何创建一个包含 &amp;lt;code&amp;gt;system.img&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;product.img&amp;lt;/code&amp;gt; 的 DSU 软件包：&lt;br /&gt;
 dsu.zip {&lt;br /&gt;
     - system.img&lt;br /&gt;
     - product.img&lt;br /&gt;
 }&lt;br /&gt;
在两个映像均已签名后，使用以下命令创建 ZIP 文件：&lt;br /&gt;
  mkdir -p dsu&lt;br /&gt;
  cp ${OUT}/system.img dsu&lt;br /&gt;
  cp ${OUT}/product.img dsu&lt;br /&gt;
  cd dsu &amp;amp;&amp;amp; zip ../dsu.zip *.img &amp;amp;&amp;amp; cd -&lt;br /&gt;
&lt;br /&gt;
==== 自定义一键式 DSU ====&lt;br /&gt;
默认情况下，DSU 加载器指向 GSI 映像的元数据，即 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://...google.com/.../gsi-src.json&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
OEM 可以通过定义指向其 JSON 描述符的 &amp;lt;code&amp;gt;persist.sys.fflag.override.settings_dynamic_system.list&amp;lt;/code&amp;gt; 属性来覆盖该列表。例如，OEM 可能会提供包含 GSI 和 OEM 专有映像的 JSON 元数据，如下所示：&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;include&amp;quot;: [&amp;quot;&amp;lt;nowiki&amp;gt;https://dl.google.com/.../gsi-src.JSON&amp;lt;/nowiki&amp;gt;&amp;quot;]&lt;br /&gt;
     &amp;quot;images&amp;quot;:[&lt;br /&gt;
       {&lt;br /&gt;
          &amp;quot;name&amp;quot;:&amp;quot;OEM image&amp;quot;,&lt;br /&gt;
          &amp;quot;os_version&amp;quot;:&amp;quot;10&amp;quot;,&lt;br /&gt;
          &amp;quot;cpu_abi&amp;quot;: &amp;quot;arm64-v8a&amp;quot;,&lt;br /&gt;
          &amp;quot;details&amp;quot;:&amp;quot;...&amp;quot;,&lt;br /&gt;
          &amp;quot;vndk&amp;quot;:[&lt;br /&gt;
             27,&lt;br /&gt;
             28,&lt;br /&gt;
             29&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;spl&amp;quot;:&amp;quot;...&amp;quot;,&lt;br /&gt;
          &amp;quot;pubkey&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
          &amp;quot;uri&amp;quot;:&amp;quot;&amp;lt;nowiki&amp;gt;https://.../....zip&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
       },&lt;br /&gt;
 }&lt;br /&gt;
OEM 可以链接已发布的 DSU 元数据，如图所示。&lt;br /&gt;
[[文件:Dsu-metadata-chaining.png|缩略图]]&lt;/div&gt;</summary>
		<author><name>SakuraKyuo</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E6%96%87%E4%BB%B6:Dsu-metadata-chaining.png&amp;diff=620</id>
		<title>文件:Dsu-metadata-chaining.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E6%96%87%E4%BB%B6:Dsu-metadata-chaining.png&amp;diff=620"/>
		<updated>2024-08-06T05:50:30Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OEM 链接已发布的 DSU 元数据&lt;/div&gt;</summary>
		<author><name>SakuraKyuo</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Android_Verified_Boot&amp;diff=619</id>
		<title>Android Verified Boot</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Android_Verified_Boot&amp;diff=619"/>
		<updated>2024-08-06T05:19:14Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​微调&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Android Verified Boot（AVB）是一种安全功能，旨在保护Android设备免受恶意软件和未经授权的系统修改。它通过使用数字签名和完整性检查来确保设备启动过程中的安全性。&lt;br /&gt;
&lt;br /&gt;
== AVB 工作原理 ==&lt;br /&gt;
&lt;br /&gt;
# 验证引导加载程序（Bootloader）：当设备的引导加载程序（即Bootloader）加载操作系统时。AVB通过验证引导加载程序其本身的完整性和数字签名来确保其未被篡改。&lt;br /&gt;
# 验证操作系统：在引导加载程序验证通过后，AVB会继续验证操作系统分区。这包括Android系统映像以及关键的系统文件，如系统分区和供应商分区。&lt;br /&gt;
# 完整性检查：AVB使用哈希函数（通常为SHA-256）来计算每个启动时加载的镜像文件的哈希值。这些哈希值与预先存储在设备上的哈希值进行比较，从而检查文件是否被篡改。&lt;br /&gt;
# 安全启动状态：如果设备检测到启动过程中任何验证失败或完整性检查不匹配的情况，它将进入“安全启动状态”。在这种状态下，设备通常会限制某些功能，如不允许访问加密数据、不允许加载启动系统（通常可见为卡在Logo并重启），以保护用户免安全威胁。&lt;br /&gt;
&lt;br /&gt;
== AVB 通常会在哪些分区加入 ==&lt;br /&gt;
AVB通常会在以下几个重要分区加入验证和完整性检查：&lt;br /&gt;
&lt;br /&gt;
* System 分区（System Partition）：包含Android操作系统的核心映像和关键系统文件，AVB会验证这些文件是否被篡改。&lt;br /&gt;
&lt;br /&gt;
* Vendor 分区（Vendor Partition）：包含供应商提供的固件和驱动程序，AVB会对其进行验证以确保其安全性。&lt;br /&gt;
&lt;br /&gt;
当涉及到动态分区（Dynamic Partition）时，Android Verified Boot（AVB）通常也会在以下几个关键分区加入验证和完整性检查：&lt;br /&gt;
&lt;br /&gt;
* Product 分区（Product Partition）：该分区通常包含供应商特定的应用程序和配置文件。AVB会对Product分区进行验证，以确保其中的内容没有被篡改。&lt;br /&gt;
&lt;br /&gt;
* System_ext 分区（System Extension Partition）：这个分区通常用于存放同上文件。AVB会验证System_ext分区的内容，以确保这些扩展的完整性和安全性。&lt;br /&gt;
&lt;br /&gt;
* Odm 分区（Odm Partition）：该分区分区通常包含设备制造商的特定驱动程序和配置文件。AVB也会对Odm分区进行验证，以确保其中的信息没有被篡改。&lt;br /&gt;
&lt;br /&gt;
通过在这些关键分区实施AVB，Android设备可以提高对未经授权修改和恶意软件的防护能力，从而增强用户数据和设备的安全性。&lt;br /&gt;
&lt;br /&gt;
== 去除 AVB 验证 ==&lt;br /&gt;
&lt;br /&gt;
=== '''1. 进入 Bootloader 模式'''： ===&lt;br /&gt;
* 首先，确保你的设备进入 Bootloader 模式。&lt;br /&gt;
&lt;br /&gt;
=== '''2.禁用 AVB 验证'''： ===&lt;br /&gt;
* 在 Bootloader 模式下，使用 &amp;lt;code&amp;gt;fastboot&amp;lt;/code&amp;gt; 命令来禁用 AVB 验证。以下是需要执行的命令：&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot --disable-verity flash vbmeta vbmeta.img&amp;lt;/code&amp;gt;&lt;br /&gt;
* 这条命令会将 &amp;lt;code&amp;gt;vbmeta.img&amp;lt;/code&amp;gt; 文件刷入设备中，以禁用验证。请将 &amp;lt;code&amp;gt;vbmeta.img&amp;lt;/code&amp;gt; 替换为本地存储的对应文件路径。&lt;br /&gt;
* 对于使用动态分区（Dynamic Partition）的设备，还需要以下命令：&lt;br /&gt;
  fastboot --disable-verity flash vbmeta_system vbmeta_system.img&lt;br /&gt;
  fastboot --disable-verity flash vbmeta_vendor vbmeta_vendor.img&lt;br /&gt;
* 同样，替换 &amp;lt;code&amp;gt;vbmeta_system.img&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;vbmeta_vendor.img&amp;lt;/code&amp;gt; 为本地存储的相应文件路径。&lt;br /&gt;
（注意：vbmeta_vendor可能有部分动态分区并不存在，请以实际为准）&lt;br /&gt;
&lt;br /&gt;
=== '''3. 重启设备'''： ===&lt;br /&gt;
&lt;br /&gt;
* 完成上述操作后，重新启动设备。设备将会跳过 Android Verified Boot 的验证过程&lt;br /&gt;
&lt;br /&gt;
请注意，这样做会降低设备对未经授权修改的防护能力，从而增加安全风险。在执行这些操作之前，请确保了解潜在的风险和后果，并仅在有必要的情况下进行。&lt;/div&gt;</summary>
		<author><name>SakuraKyuo</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Android_Verified_Boot&amp;diff=618</id>
		<title>Android Verified Boot</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Android_Verified_Boot&amp;diff=618"/>
		<updated>2024-08-06T05:10:59Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​为刷入vbmeta_vendor部分添加换行&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Android Verified Boot（AVB）是一种安全功能，旨在保护Android设备免受恶意软件和未经授权的系统修改。它通过使用数字签名和完整性检查来确保设备启动过程中的安全性。&lt;br /&gt;
&lt;br /&gt;
== AVB 工作原理 ==&lt;br /&gt;
&lt;br /&gt;
# 验证引导加载程序（Bootloader）：当设备的引导加载程序（即Bootloader）加载操作系统时。AVB通过验证引导加载程序其本身的完整性和数字签名来确保其未被篡改。&lt;br /&gt;
# 验证操作系统：在引导加载程序验证通过后，AVB会继续验证操作系统分区。这包括Android系统映像以及关键的系统文件，如系统分区和供应商分区。&lt;br /&gt;
# 完整性检查：AVB使用哈希函数（通常为SHA-256）来计算每个启动时加载的镜像文件的哈希值。这些哈希值与预先存储在设备上的哈希值进行比较，从而检查文件是否被篡改。&lt;br /&gt;
# 安全启动状态：如果设备检测到启动过程中任何验证失败或完整性检查不匹配的情况，它将进入“安全启动状态”。在这种状态下，设备通常会限制某些功能，如不允许访问加密数据、不允许加载启动系统（通常可见为卡在Logo并重启），以保护用户免安全威胁。&lt;br /&gt;
&lt;br /&gt;
== AVB 通常会在哪些分区加入 ==&lt;br /&gt;
AVB通常会在以下几个重要分区加入验证和完整性检查：&lt;br /&gt;
&lt;br /&gt;
* System 分区（System Partition）：包含Android操作系统的核心映像和关键系统文件，AVB会验证这些文件是否被篡改。&lt;br /&gt;
&lt;br /&gt;
* Vendor 分区（Vendor Partition）：包含供应商提供的固件和驱动程序，AVB会对其进行验证以确保其安全性。&lt;br /&gt;
&lt;br /&gt;
当涉及到动态分区（Dynamic Partition）时，Android Verified Boot（AVB）通常也会在以下几个关键分区加入验证和完整性检查：&lt;br /&gt;
&lt;br /&gt;
* Product 分区（Product Partition）：该分区通常包含供应商特定的应用程序和配置文件。AVB会对Product分区进行验证，以确保其中的内容没有被篡改。&lt;br /&gt;
&lt;br /&gt;
* System_ext 分区（System Extension Partition）：这个分区通常用于存放同上文件。AVB会验证System_ext分区的内容，以确保这些扩展的完整性和安全性。&lt;br /&gt;
&lt;br /&gt;
* Odm 分区（Odm Partition）：该分区分区通常包含设备制造商的特定驱动程序和配置文件。AVB也会对Odm分区进行验证，以确保其中的信息没有被篡改。&lt;br /&gt;
&lt;br /&gt;
通过在这些关键分区实施AVB，Android设备可以提高对未经授权修改和恶意软件的防护能力，从而增强用户数据和设备的安全性。&lt;br /&gt;
&lt;br /&gt;
== 去除 AVB 验证 ==&lt;br /&gt;
&lt;br /&gt;
# '''进入 Bootloader 模式'''：&lt;br /&gt;
#* 首先，确保你的设备进入 Bootloader 模式。&lt;br /&gt;
# '''禁用 AVB 验证'''：&lt;br /&gt;
#* 在 Bootloader 模式下，使用 &amp;lt;code&amp;gt;fastboot&amp;lt;/code&amp;gt; 命令来禁用 AVB 验证。以下是需要执行的命令：&lt;br /&gt;
#* &amp;lt;code&amp;gt;fastboot --disable-verity flash vbmeta vbmeta.img&amp;lt;/code&amp;gt;&lt;br /&gt;
#* 这条命令会将 &amp;lt;code&amp;gt;vbmeta.img&amp;lt;/code&amp;gt; 文件刷入设备中，以禁用验证。请将 &amp;lt;code&amp;gt;vbmeta.img&amp;lt;/code&amp;gt; 替换为本地存储的对应文件路径。&lt;br /&gt;
#* 对于使用动态分区（Dynamic Partition）的设备，还需要以下命令：&lt;br /&gt;
#* &amp;lt;code&amp;gt;fastboot --disable-verity flash vbmeta_system vbmeta_system.img&amp;lt;/code&amp;gt;  &lt;br /&gt;
#* &amp;lt;code&amp;gt;fastboot --disable-verity flash vbmeta_vendor vbmeta_vendor.img&amp;lt;/code&amp;gt;（注意：vbmeta_vendor可能有部分动态分区并不存在，请以实际为准）&lt;br /&gt;
#* 同样，替换 &amp;lt;code&amp;gt;vbmeta_system.img&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;vbmeta_vendor.img&amp;lt;/code&amp;gt; 为本地存储的相应文件路径。&lt;br /&gt;
# '''重启设备'''：&lt;br /&gt;
#* 完成上述操作后，重新启动设备。设备将会跳过 Android Verified Boot 的验证过程&lt;br /&gt;
&lt;br /&gt;
请注意，这样做会降低设备对未经授权修改的防护能力，从而增加安全风险。在执行这些操作之前，请确保了解潜在的风险和后果，并仅在有必要的情况下进行。&lt;/div&gt;</summary>
		<author><name>SakuraKyuo</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Android_Verified_Boot&amp;diff=617</id>
		<title>Android Verified Boot</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Android_Verified_Boot&amp;diff=617"/>
		<updated>2024-08-06T05:10:21Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​首次添加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Android Verified Boot（AVB）是一种安全功能，旨在保护Android设备免受恶意软件和未经授权的系统修改。它通过使用数字签名和完整性检查来确保设备启动过程中的安全性。&lt;br /&gt;
&lt;br /&gt;
== AVB 工作原理 ==&lt;br /&gt;
&lt;br /&gt;
# 验证引导加载程序（Bootloader）：当设备的引导加载程序（即Bootloader）加载操作系统时。AVB通过验证引导加载程序其本身的完整性和数字签名来确保其未被篡改。&lt;br /&gt;
# 验证操作系统：在引导加载程序验证通过后，AVB会继续验证操作系统分区。这包括Android系统映像以及关键的系统文件，如系统分区和供应商分区。&lt;br /&gt;
# 完整性检查：AVB使用哈希函数（通常为SHA-256）来计算每个启动时加载的镜像文件的哈希值。这些哈希值与预先存储在设备上的哈希值进行比较，从而检查文件是否被篡改。&lt;br /&gt;
# 安全启动状态：如果设备检测到启动过程中任何验证失败或完整性检查不匹配的情况，它将进入“安全启动状态”。在这种状态下，设备通常会限制某些功能，如不允许访问加密数据、不允许加载启动系统（通常可见为卡在Logo并重启），以保护用户免安全威胁。&lt;br /&gt;
&lt;br /&gt;
== AVB 通常会在哪些分区加入 ==&lt;br /&gt;
AVB通常会在以下几个重要分区加入验证和完整性检查：&lt;br /&gt;
&lt;br /&gt;
* System 分区（System Partition）：包含Android操作系统的核心映像和关键系统文件，AVB会验证这些文件是否被篡改。&lt;br /&gt;
&lt;br /&gt;
* Vendor 分区（Vendor Partition）：包含供应商提供的固件和驱动程序，AVB会对其进行验证以确保其安全性。&lt;br /&gt;
&lt;br /&gt;
当涉及到动态分区（Dynamic Partition）时，Android Verified Boot（AVB）通常也会在以下几个关键分区加入验证和完整性检查：&lt;br /&gt;
&lt;br /&gt;
* Product 分区（Product Partition）：该分区通常包含供应商特定的应用程序和配置文件。AVB会对Product分区进行验证，以确保其中的内容没有被篡改。&lt;br /&gt;
&lt;br /&gt;
* System_ext 分区（System Extension Partition）：这个分区通常用于存放同上文件。AVB会验证System_ext分区的内容，以确保这些扩展的完整性和安全性。&lt;br /&gt;
&lt;br /&gt;
* Odm 分区（Odm Partition）：该分区分区通常包含设备制造商的特定驱动程序和配置文件。AVB也会对Odm分区进行验证，以确保其中的信息没有被篡改。&lt;br /&gt;
&lt;br /&gt;
通过在这些关键分区实施AVB，Android设备可以提高对未经授权修改和恶意软件的防护能力，从而增强用户数据和设备的安全性。&lt;br /&gt;
&lt;br /&gt;
== 去除 AVB 验证 ==&lt;br /&gt;
&lt;br /&gt;
# '''进入 Bootloader 模式'''：&lt;br /&gt;
#* 首先，确保你的设备进入 Bootloader 模式。&lt;br /&gt;
# '''禁用 AVB 验证'''：&lt;br /&gt;
#* 在 Bootloader 模式下，使用 &amp;lt;code&amp;gt;fastboot&amp;lt;/code&amp;gt; 命令来禁用 AVB 验证。以下是需要执行的命令：&lt;br /&gt;
#* &amp;lt;code&amp;gt;fastboot --disable-verity flash vbmeta vbmeta.img&amp;lt;/code&amp;gt;&lt;br /&gt;
#* 这条命令会将 &amp;lt;code&amp;gt;vbmeta.img&amp;lt;/code&amp;gt; 文件刷入设备中，以禁用验证。请将 &amp;lt;code&amp;gt;vbmeta.img&amp;lt;/code&amp;gt; 替换为本地存储的对应文件路径。&lt;br /&gt;
#* 对于使用动态分区（Dynamic Partition）的设备，还需要以下命令：&lt;br /&gt;
#* &amp;lt;code&amp;gt;fastboot --disable-verity flash vbmeta_system vbmeta_system.img&amp;lt;/code&amp;gt;  &amp;lt;code&amp;gt;fastboot --disable-verity flash vbmeta_vendor vbmeta_vendor.img&amp;lt;/code&amp;gt;（注意：vbmeta_vendor可能有部分动态分区并不存在，请以实际为准）&lt;br /&gt;
#* 同样，替换 &amp;lt;code&amp;gt;vbmeta_system.img&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;vbmeta_vendor.img&amp;lt;/code&amp;gt; 为本地存储的相应文件路径。&lt;br /&gt;
# '''重启设备'''：&lt;br /&gt;
#* 完成上述操作后，重新启动设备。设备将会跳过 Android Verified Boot 的验证过程&lt;br /&gt;
&lt;br /&gt;
请注意，这样做会降低设备对未经授权修改的防护能力，从而增加安全风险。在执行这些操作之前，请确保了解潜在的风险和后果，并仅在有必要的情况下进行。&lt;/div&gt;</summary>
		<author><name>SakuraKyuo</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=497</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=497"/>
		<updated>2024-02-16T14:01:45Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​添加提醒事项&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&lt;br /&gt;
# super.img&lt;br /&gt;
# ozip格式&lt;br /&gt;
# br格式&lt;br /&gt;
# dat格式(以及vivo分段dat)&lt;br /&gt;
# 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>SakuraKyuo</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=495</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=495"/>
		<updated>2024-02-16T13:34:32Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​突出注意事项&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格式&lt;br /&gt;
# dat格式&lt;br /&gt;
# 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;
访问工具链接 并点击 下载图标 下载文件&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;code&amp;gt;make_ext4fs.exe -J -T 1167580800 -S config\分区名_file_contexts -l 上一步记录的数值 -C config\分区名_fs_config -L 分区名 -a 分区名 打包文件名 分区文件夹名&amp;lt;/code&amp;gt;   (示例: &amp;lt;code&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;/code&amp;gt;)&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
打包要求您的文件需要严格按照解包后的结构(即 所需打包文件夹 + config文件夹)存放，避免造成找不到文件的情况。如果您的机器是动态分区，请参考第二种打包方式&lt;br /&gt;
&lt;br /&gt;
正确存放示例：vendor config make_ext4fs.exe&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;
# 将工具及运行库放置到 所需打包分区 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 记录 config\分区名_size.txt 内数值，并除以  4096 后的数值(示例: 11451419 除以 4096)。如果有小数点(如 114514.19)，请去除小数点并加1(即 114515)&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;mke2fs -O ^has_journal -L 分区名 -I 256 -M /分区名 -m 0 -t ext4 -b 4096 打包文件名 上一步记录的数值&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;mke2fs -O ^has_journal -L vendor -I 256 -M /vendor -m 0 -t ext4 -b 4096 vendor_new.img 114515&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;e2fsdroid -e -T 1167580800 -S 分区名_fs_config的绝对路径 -C 分区名_fs_config的绝对路径 -a /分区名 -f 分区文件夹名 上一步输入的打包文件名&amp;lt;/code&amp;gt; (示例: &amp;lt;code&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;/code&amp;gt;)&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
# 打包要求您的文件需要严格按照解包后的结构(即 所需打包文件夹 + config文件夹)存放，避免造成找不到文件的情况。&lt;br /&gt;
# 正确存放示例：vendor config mke2fs.exe e2fsdroid.exe cygwin1.dll fspatch.py&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;
# 将工具内所有文件放置到 所需打包分区 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;mkfs.erofs -zlz4hc,8 -T 1167580800 --mount-point=/分区名 --fs-config-file=分区名_fs_config的绝对路径 --file-contexts=分区名_file_contexts的绝对路径 打包文件名 分区文件夹名&amp;lt;/code&amp;gt;  (示例: &amp;lt;code&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;/code&amp;gt;)&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
===== 注意 =====&lt;br /&gt;
&lt;br /&gt;
# 打包要求您的文件需要严格按照解包后的结构(即 所需打包文件夹 + config文件夹)存放，避免造成找不到文件的情况。&lt;br /&gt;
# 正确存放示例：vendor config mkfs.erofs.exe winfsp-x64.dll cygwin1.dll fspatch.py&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>SakuraKyuo</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=493</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=493"/>
		<updated>2024-02-16T13:31:34Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​修正目录错误&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格式&lt;br /&gt;
# dat格式&lt;br /&gt;
# 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;
访问工具链接 并点击 下载图标 下载文件&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;code&amp;gt;make_ext4fs.exe -J -T 1167580800 -S config\分区名_file_contexts -l 上一步记录的数值 -C config\分区名_fs_config -L 分区名 -a 分区名 打包文件名 分区文件夹名&amp;lt;/code&amp;gt;   (示例: &amp;lt;code&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;/code&amp;gt;)&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
注意：打包要求您的文件需要严格按照解包后的结构(即 所需打包文件夹 + config文件夹)存放，避免造成找不到文件的情况。如果您的机器是动态分区，请参考第二种打包方式&lt;br /&gt;
&lt;br /&gt;
正确存放示例：vendor config make_ext4fs.exe&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;
# 将工具及运行库放置到 所需打包分区 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 记录 config\分区名_size.txt 内数值，并除以  4096 后的数值(示例: 11451419 除以 4096)。如果有小数点(如 114514.19)，请去除小数点并加1(即 114515)&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;mke2fs -O ^has_journal -L 分区名 -I 256 -M /分区名 -m 0 -t ext4 -b 4096 打包文件名 上一步记录的数值&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;mke2fs -O ^has_journal -L vendor -I 256 -M /vendor -m 0 -t ext4 -b 4096 vendor_new.img 114515&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;e2fsdroid -e -T 1167580800 -S 分区名_fs_config的绝对路径 -C 分区名_fs_config的绝对路径 -a /分区名 -f 分区文件夹名 上一步输入的打包文件名&amp;lt;/code&amp;gt; (示例: &amp;lt;code&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;/code&amp;gt;)&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
注意：打包要求您的文件需要严格按照解包后的结构(即 所需打包文件夹 + config文件夹)存放，避免造成找不到文件的情况。&lt;br /&gt;
&lt;br /&gt;
正确存放示例：vendor config mke2fs.exe e2fsdroid.exe cygwin1.dll fspatch.py&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;
# 将工具内所有文件放置到 所需打包分区 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;mkfs.erofs -zlz4hc,8 -T 1167580800 --mount-point=/分区名 --fs-config-file=分区名_fs_config的绝对路径 --file-contexts=分区名_file_contexts的绝对路径 打包文件名 分区文件夹名&amp;lt;/code&amp;gt;  (示例: &amp;lt;code&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;/code&amp;gt;)&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
注意：打包要求您的文件需要严格按照解包后的结构(即 所需打包文件夹 + config文件夹)存放，避免造成找不到文件的情况。&lt;br /&gt;
&lt;br /&gt;
正确存放示例：vendor config mkfs.erofs.exe winfsp-x64.dll cygwin1.dll fspatch.py&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;
== 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;
注意：&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;
注意：-q 后的数字为压缩等级，可选1 - 9，数字越大 压缩率越高 耗时越长&lt;/div&gt;</summary>
		<author><name>SakuraKyuo</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=491</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=491"/>
		<updated>2024-02-16T13:28:28Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​首次编写&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格式&lt;br /&gt;
# dat格式&lt;br /&gt;
# 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;
访问工具链接 并点击 下载图标 下载文件&lt;br /&gt;
&lt;br /&gt;
==== 2. 打包 ====&lt;br /&gt;
&lt;br /&gt;
# 将工具放置到 所需打包分区 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 记录 config\分区名_size.txt 内数值&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;make_ext4fs.exe -J -T 1167580800 -S config\分区名_file_contexts -l 上一步记录的数值 -C config\分区名_fs_config -L 分区名 -a 分区名 打包文件名 分区文件夹名&amp;lt;/code&amp;gt;   (示例: &amp;lt;code&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;/code&amp;gt;)&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
注意：打包要求您的文件需要严格按照解包后的结构(即 所需打包文件夹 + config文件夹)存放，避免造成找不到文件的情况。如果您的机器是动态分区，请参考第二种打包方式&lt;br /&gt;
&lt;br /&gt;
正确存放示例：vendor config make_ext4fs.exe&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;
# 将工具及运行库放置到 所需打包分区 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 记录 config\分区名_size.txt 内数值，并除以  4096 后的数值(示例: 11451419 除以 4096)。如果有小数点(如 114514.19)，请去除小数点并加1(即 114515)&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;mke2fs -O ^has_journal -L 分区名 -I 256 -M /分区名 -m 0 -t ext4 -b 4096 打包文件名 上一步记录的数值&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;mke2fs -O ^has_journal -L vendor -I 256 -M /vendor -m 0 -t ext4 -b 4096 vendor_new.img 114515&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;e2fsdroid -e -T 1167580800 -S 分区名_fs_config的绝对路径 -C 分区名_fs_config的绝对路径 -a /分区名 -f 分区文件夹名 上一步输入的打包文件名&amp;lt;/code&amp;gt; (示例: &amp;lt;code&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;/code&amp;gt;)&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
注意：打包要求您的文件需要严格按照解包后的结构(即 所需打包文件夹 + config文件夹)存放，避免造成找不到文件的情况。&lt;br /&gt;
&lt;br /&gt;
正确存放示例：vendor config mke2fs.exe e2fsdroid.exe cygwin1.dll fspatch.py&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;
# 将工具内所有文件放置到 所需打包分区 所在目录&lt;br /&gt;
# 在该目录下打开 cmd 命令行&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;python fspatch.py 分区文件夹名 config\分区名_fs_config&amp;lt;/code&amp;gt; (示例: &amp;lt;code&amp;gt;python fspatch.py vendor config\vendor_fs_config&amp;lt;/code&amp;gt;)&lt;br /&gt;
# 输入 &amp;lt;code&amp;gt;mkfs.erofs -zlz4hc,8 -T 1167580800 --mount-point=/分区名 --fs-config-file=分区名_fs_config的绝对路径 --file-contexts=分区名_file_contexts的绝对路径 打包文件名 分区文件夹名&amp;lt;/code&amp;gt;  (示例: &amp;lt;code&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;/code&amp;gt;)&lt;br /&gt;
# 小等一会将会打包完成&lt;br /&gt;
&lt;br /&gt;
注意：打包要求您的文件需要严格按照解包后的结构(即 所需打包文件夹 + config文件夹)存放，避免造成找不到文件的情况。&lt;br /&gt;
&lt;br /&gt;
正确存放示例：vendor config mkfs.erofs.exe winfsp-x64.dll cygwin1.dll fspatch.py&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;
== 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;
注意：&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;
注意：-q 后的数字为压缩等级，可选1 - 9，数字越大 压缩率越高 耗时越长&lt;/div&gt;</summary>
		<author><name>SakuraKyuo</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=482</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=482"/>
		<updated>2024-02-16T11:37:32Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​新增 vivo dat文件解包&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;
# payload.bin&lt;br /&gt;
# super.img&lt;br /&gt;
# ozip格式&lt;br /&gt;
# br格式&lt;br /&gt;
# dat格式(以及vivo分段dat)&lt;br /&gt;
# 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>SakuraKyuo</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=481</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=481"/>
		<updated>2024-02-16T11:29:38Z</updated>

		<summary type="html">&lt;p&gt;SakuraKyuo：​首次编写&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;
# payload.bin&lt;br /&gt;
# super.img&lt;br /&gt;
# ozip格式&lt;br /&gt;
# br格式&lt;br /&gt;
# dat格式(以及vivo分段dat)&lt;br /&gt;
# 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;
&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>SakuraKyuo</name></author>
	</entry>
</feed>