<?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=MoeGLuwu</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=MoeGLuwu"/>
	<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/MoeGLuwu"/>
	<updated>2026-06-13T20:55:34Z</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=997</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=997"/>
		<updated>2025-06-08T06:11:03Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​Androidversion: A16 will release in 2025/06&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;
|2025/06&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=AOSPA&amp;diff=996</id>
		<title>AOSPA</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=AOSPA&amp;diff=996"/>
		<updated>2025-06-08T06:07:31Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;gallery&amp;gt;&lt;br /&gt;
文件:AOSPA.png|Logo&lt;br /&gt;
&amp;lt;/gallery&amp;gt;AOSPA(Paranoid Android)是一个基于Qualcomm codelinaro的Android类原生项目，比较接近高通的系统，自定义选项并不多&lt;br /&gt;
&lt;br /&gt;
目前有Android13和Android14两个Android版本，持续更新&lt;br /&gt;
&lt;br /&gt;
官网: [https://paranoidandroid.co/ AOSPA]&lt;br /&gt;
&lt;br /&gt;
Github: [https://github.com/AOSPA Github]&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=RisingOS&amp;diff=918</id>
		<title>RisingOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=RisingOS&amp;diff=918"/>
		<updated>2025-02-01T03:38:51Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​Custom rom: Bye RisingOS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[文件:Rising os banner1.png|缩略图]]&lt;br /&gt;
risingOS 是一款开源的类原生 Android 操作系统，旨在带来独特而新鲜的用户体验。&lt;br /&gt;
&lt;br /&gt;
risingOS有Android 13-15的构建。&lt;br /&gt;
于2025年2月1日宣布EOL，并删除了GitHub仓库，仅保留了设备树。&lt;br /&gt;
&lt;br /&gt;
risingOS提供了极其丰富的自定义功能（多到容易产生bug），具有Vanilla和GMS build两种选择。&lt;br /&gt;
&lt;br /&gt;
GitHub：https://github.com/RisingTechOSS/&lt;br /&gt;
&lt;br /&gt;
官网：https://risingos-staging.github.io/&lt;br /&gt;
&lt;br /&gt;
附一些界面截图。&lt;br /&gt;
[[文件:Screenshot Image3.png|左|来自官方的截图]]&lt;br /&gt;
[[文件:Screenshot1.png|缩略图|来自官方的截图之一]]&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</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=894</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=894"/>
		<updated>2024-08-25T03:09:48Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​/* git push */&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;&lt;br /&gt;
&lt;br /&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;
&lt;br /&gt;
更改默认编辑器&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global core.editor nano&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;
例如我们要克隆&amp;lt;code&amp;gt;LineageOS&amp;lt;/code&amp;gt;的内核源码，指定&amp;lt;code&amp;gt;lineage-21&amp;lt;/code&amp;gt;分支，且仅保留最近一个提交，则需要输入:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b lineage-21 &amp;lt;nowiki&amp;gt;https://github.com/LineageOS/android_kernel_xiaomi_sdm845&amp;lt;/nowiki&amp;gt; --depth=1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git add ====&lt;br /&gt;
添加某个文件，或者目录到暂存区，用于告诉git你需要将哪些文件的更改包含在下一次的提交(commit)之中添加一个或者多个文件到暂存区之中&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;
&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;
&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;
&amp;lt;/pre&amp;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;
 git commit&lt;br /&gt;
&lt;br /&gt;
这一操作将会打开 git 的默认的文本编辑器，你应该在这里写明 commit message. 第一行是标题，下面的都是解释说明，前面带有#的行不会被列入文本中.&lt;br /&gt;
&lt;br /&gt;
好的 commit message 是方便所有人的举措. 对初学者来说，不要求做的多么规范，但是建议做到以下几点：&lt;br /&gt;
&lt;br /&gt;
- 简短说明本次 commit 做了什么，至少你自己看一眼能知道自己在干什么&lt;br /&gt;
&lt;br /&gt;
- 尽力做到一个 commit 一个修改，尽量不要大杂烩或者一个修改拖好几个 commit&lt;br /&gt;
&lt;br /&gt;
- 如果是比较大的项目（例如 Android Kernel），尽量写明你所修改的模块，令人一目了然. 例如:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ARM64: configs: enchilada: Disable virtual terminal&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;--author=&amp;quot;ExampleName &amp;lt;example@example.com&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;参数说明这是哪位作者的提交. 这是对他人思考和试验成果的尊重.&lt;br /&gt;
&lt;br /&gt;
- Commit message 里不得谩骂他人，不要带有其他人或者你自己的无关私人信息.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
如果想要直接提交而不添加暂存区（偷懒），可以指定&amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;参数.&lt;br /&gt;
&lt;br /&gt;
您也可以使用&amp;lt;code&amp;gt;-m &amp;quot;example commit message&amp;quot;&amp;lt;/code&amp;gt;来直接 commit.&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;
例如在您的仓库中有这几个分支：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-&amp;gt; master (Default)&lt;br /&gt;
   backup&lt;br /&gt;
   test&lt;br /&gt;
&amp;lt;/pre&amp;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;
&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 . 强烈建议使用 --force-with-lease参数，更为安全.&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;
用于比较当前工作区与上一个版本之间的差异&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/example b/example&lt;br /&gt;
&lt;br /&gt;
index fbb8c85..d65c7eb 100644&lt;br /&gt;
&lt;br /&gt;
--- a/example&lt;br /&gt;
&lt;br /&gt;
+++ b/example&lt;br /&gt;
&lt;br /&gt;
@@ -1 +1,2 @@&lt;br /&gt;
&lt;br /&gt;
114514&lt;br /&gt;
&lt;br /&gt;
+1919180&lt;br /&gt;
&amp;lt;/pre&amp;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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit sha1 hash:   针对你这个提交的 commit id&lt;br /&gt;
Author: commit      作者名称   &amp;lt;you@example.com&amp;gt;&lt;br /&gt;
Date: commit        日期&lt;br /&gt;
commit:             名称&lt;br /&gt;
&amp;lt;/pre&amp;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;
&amp;lt;pre&amp;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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git cherry-pick ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cherry-pick (遴选) 和它的名称一样，挑选一个我们需要的 commit 进行操作。它可以用于将在其他分支上的 commit 修改，移植到当前的分支。&lt;br /&gt;
&lt;br /&gt;
如果我们想在我们正在开发的版本上，添加一个其他版本中的功能代码。就可以使用 cherry-pick ，将这个功能相关的 commit 提取出来，合入该版本。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git cherry-pick &amp;lt;commit-id&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
当我们执行完 &amp;lt;code&amp;gt;cherry-pick&amp;lt;/code&amp;gt;操作之后，会自动生成一个&amp;lt;code&amp;gt;commit&amp;lt;/code&amp;gt;以及对应新的&amp;lt;code&amp;gt;commit-id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在顺利的情况下我们可以直接通过，但如果遇到代码等因为变量名，写法等不同的情况，&amp;lt;code&amp;gt;cherry-pick&amp;lt;/code&amp;gt;大概率会报错，此时我们需要进行报错处理。&lt;br /&gt;
&lt;br /&gt;
第一种方案是手动修改&lt;br /&gt;
&lt;br /&gt;
我们可以先使用&amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt;检查当前遴选时冲突的文件&lt;br /&gt;
&lt;br /&gt;
然后 &amp;lt;code&amp;gt;git checkout --ours filename&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;
再使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git cherry-pick --continue&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
命令让 cherrypick 操作继续执行。&lt;br /&gt;
&lt;br /&gt;
第二种方案是直接退出&amp;lt;code&amp;gt;cherry-pick&amp;lt;/code&amp;gt;进程，一般适用于冲突文件实在太多了难以按照方案一处理的情况。&lt;br /&gt;
&lt;br /&gt;
需要注意的是，如果您当前正在遴选的提交在该分支已经存在也会冲突，在这种情况下，您需要解决冲突并手动解决问题。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git cherry-pick --abort&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git fetch ====&lt;br /&gt;
git fetch 命令用于从远程获取仓库。&lt;br /&gt;
&lt;br /&gt;
==== git merge ====&lt;br /&gt;
&amp;lt;code&amp;gt;git merge&amp;lt;/code&amp;gt;是用来把分叉的提交历史放回到一起(合并)的方式。&lt;br /&gt;
&lt;br /&gt;
git merge命令用来将你之前使用git branch命令创建的分支以及在此分支上独立开发的内容整合为一个分支。&lt;br /&gt;
&lt;br /&gt;
本&lt;br /&gt;
&lt;br /&gt;
==== git pull ====&lt;br /&gt;
用于从远程获取代码并合并本地的版本。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt;其实就是&amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;git merge FETCH_HEAD&amp;lt;/code&amp;gt; 的简写。&lt;br /&gt;
&lt;br /&gt;
格式如下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git pull &amp;lt;remote-host-name&amp;gt; &amp;lt;remote-branch-name&amp;gt;:&amp;lt;local-branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git rebase ====&lt;br /&gt;
用于需要修改历史上某一项commit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git rebase -i HEAD~&amp;lt;commit number&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
commit number就是从头部往前数的commit数量。执行后会弹出你在git config内配置的编辑器，若未配置则是默认，vim居多。然后就可以看见一堆commit前面有pick字样。可以将pick替换为你想要的操作。&lt;br /&gt;
有以下操作：&lt;br /&gt;
&lt;br /&gt;
1.edit，顾名思义编辑此commit，替换完保存后请修改内容，使用&amp;lt;code&amp;gt;git add&amp;lt;/code&amp;gt;或vscode，github desktop将修改文件添加到暂存区，之后命令行执行&amp;lt;code&amp;gt;git commit --amend&amp;lt;/code&amp;gt;这样commit就修改成了&lt;br /&gt;
&lt;br /&gt;
2.squash，合并几个提交，确认一个父提交，将要合并的commit，从下向上替换字符串，会从下向上合并(方位指的是&amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;后弹出的编辑器)&lt;br /&gt;
&lt;br /&gt;
3.drop，需要移除的commit&lt;br /&gt;
&lt;br /&gt;
4.reword，修改commit信息&lt;br /&gt;
&lt;br /&gt;
另外，还可以使用首字母来说明命令。&lt;br /&gt;
&lt;br /&gt;
==== git subtree ====&lt;br /&gt;
子树，在Android开发中多用于Kernel侧更改，如跟踪audio模块等&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git subtree add --prefix=&amp;lt;目录&amp;gt; &amp;lt;仓库地址&amp;gt; &amp;lt;远程分支&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果需要更新远程库时&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git subtree pull --prefix=&amp;lt;目录&amp;gt; &amp;lt;仓库地址&amp;gt; &amp;lt;远程分支&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git submodule ====&lt;br /&gt;
&lt;br /&gt;
===== 子模块功能的概述 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule&amp;lt;/code&amp;gt;允许在自己的Github仓库里加入别人的github仓库，作为自己仓库的子仓库(即submodule)。&lt;br /&gt;
&lt;br /&gt;
为什么我们会需要使用子模块？当我们维护一个项目时有可能遇到以下情况，例如维护某款机型的KernelSU内核，我们需要将KernelSU导入至我们的内核源码中，如果我们直接clone进去容易带来一个问题，如果KernelSU更新了怎么办？此时我们便可以使用子模块来解决这个问题&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule&amp;lt;/code&amp;gt;允许在git仓库里存放别人仓库的url，作为自己的子模块，其核心内容是在Git仓库里面加入一个&amp;lt;code&amp;gt;.gitmodules&amp;lt;/code&amp;gt;文件，里面会记录各个submodule的名字，路径，以及对应链接。&lt;br /&gt;
&lt;br /&gt;
===== 加入子模块 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule add &amp;lt;url&amp;gt; &amp;lt;path&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
此时 &amp;lt;code&amp;gt;.gitmodules&amp;lt;/code&amp;gt;内会自动生成以下内容&lt;br /&gt;
&lt;br /&gt;
[submodule &amp;quot;xxx&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
path = xxx&lt;br /&gt;
&lt;br /&gt;
url = xxx&lt;br /&gt;
&lt;br /&gt;
===== 初始化子模块 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule init&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== 更新子模块 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Git进阶 ===&lt;br /&gt;
&lt;br /&gt;
==== GPG key ====&lt;br /&gt;
&lt;br /&gt;
===== 简介 =====&lt;br /&gt;
平时在Github上摸鱼的时候，是不是经常能看见如下图所示，有一个绿色的&amp;quot;Verified&amp;quot;字样，看着很酷，实际上这是为了确保commit为开发者本人所写的进行的GPG签名。&lt;br /&gt;
[[文件:Github GPG sign.png|居中]]&lt;br /&gt;
因为Git的默认机制，任何人都可以通过你的邮箱和用户名创建虚假的commit，甚至你名气很大的话可以“栽赃陷害”你。如果你是某高校计算机专业的同学亦或是对计算机抱有很大的兴趣，乐意为开源社区提供“资源”，那么我建议你设置GPG sign。未来是不可预知的，人人都可能成为巨佬。&lt;br /&gt;
&lt;br /&gt;
===== 使用 =====&lt;br /&gt;
因为我只在Mac环境下配置过GPG，Windows只是打游戏用，所以用的少，Linux/类Unix可以参考一下。其它系统等待他人补充......&lt;br /&gt;
&lt;br /&gt;
====== Mac ======&lt;br /&gt;
Mac默认是不带GPG的，需要通过第三方软件包安装器Homebrew进行安装，首先先安装Homebrew，如已安装可以跳过。&lt;br /&gt;
&lt;br /&gt;
编辑器限制原因不能使用默认标题进行分步了，故使用1、2、3等小数字代替。&lt;br /&gt;
&lt;br /&gt;
安装Homebrew&lt;br /&gt;
&lt;br /&gt;
在安装之前需要从系统信息中查看芯片为Intel/M系列&lt;br /&gt;
&lt;br /&gt;
Intel使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/bin/zsh -c &amp;quot;$(curl -fsSL &amp;lt;nowiki&amp;gt;https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh&amp;lt;/nowiki&amp;gt;)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intel按照脚本提示，选源，输密码，回车一路绿灯就好了，如果这都不会......可能你不是很适合开发，因为该脚本是国内开发者编写的，中文和一键化安装都集齐了。&lt;br /&gt;
&lt;br /&gt;
M系列使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/bin/zsh -c &amp;quot;$(curl -fsSL https://gitee.com/huwei1024/HomebrewCN/raw/master/Homebrew.sh)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
并且因为M系列系统结构发生改变，包安装位置不在是以前的/usr/local/，而是在/opt/homebrew，所以要将配置文件里的环境变量改过来。&lt;br /&gt;
&lt;br /&gt;
1.首先进入根目录&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd ~&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.创建.zshrc文件&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;touch .zshrc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3.打开文件进行编辑&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;open -e .zshrc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4.如果有旧的环境就修改，没有就新增&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;export PATH=&amp;quot;/opt/homebrew/bin:$PATH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export PATH=&amp;quot;/opt/homebrew/sbin:$PATH&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5.保存&lt;br /&gt;
&lt;br /&gt;
使用command + s&lt;br /&gt;
&lt;br /&gt;
6.生效环境变量&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;source .zshrc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7、测试&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;brew -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
若终端顺利打印出brew的版本，那么就安装成功了！&lt;br /&gt;
&lt;br /&gt;
注：本人没有使用过M系列设备，该教程在知乎上找到的&lt;br /&gt;
&lt;br /&gt;
使用Homebrew安装GPG&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;brew install gnupg pinentry-mac&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[文件:截屏2024-02-17 17.34.48.png|居中]]&lt;br /&gt;
&lt;br /&gt;
为GPG添加环境变量，否则在签名的时候会发生报错（使用bash请自行替换配置文件）&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;echo &amp;quot;export GPG_TTY=$(tty)&amp;quot; &amp;gt;&amp;gt; ~/.zshrc&lt;br /&gt;
source ~/.zshrc&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
生成一个GPG keys&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gpg --full-generate-key&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[文件:截屏2024-02-17 17.45.51.png|居中]]&lt;br /&gt;
&lt;br /&gt;
默认使用的是ECC，我使用的是RSA，按照自己喜好，或从百度搜索非对称和对称加密算法之间的区别，这里只做使用方法的介绍，不做赘述。&lt;br /&gt;
&lt;br /&gt;
然后添写密钥长度和使用有效期，这里建议选择长期，并做备份，一辈子用一个就够了。&lt;br /&gt;
&lt;br /&gt;
[[文件:截屏2024-02-17 17.46.06.png|居中]]&lt;br /&gt;
[[文件:截屏2024-02-17 17.46.35.png|居中]]&lt;br /&gt;
&lt;br /&gt;
个人信息按照Github信息填写，真实姓名对应Username。填写完毕按回车输入O即可生成密钥。不出意外的话会弹出Gui窗口让你设置密钥密码，强烈建设设置一个较为复杂的密码，并牢记，当然也可以不设置。&lt;br /&gt;
&lt;br /&gt;
使用GPG对Git的commit和tag进行签名&lt;br /&gt;
&lt;br /&gt;
先为Git定义GPG二进制所在地&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global gpg.program $(which gpg)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
查看GPG keys ID&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gpg --list-secret-keys --keyid-format=long&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如图所示RSA/后面紧跟的一串就是GPG keys ID&lt;br /&gt;
[[文件:截屏2024-02-17 17.57.01.png|居中]]&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global user.signingkey &amp;quot;GPG key ID&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
为Git设置全局commit和tag签名&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global commit.gpgsign true&lt;br /&gt;
&lt;br /&gt;
git config --global tag.gpgSign true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
参见本文“在Github配置GPG keys”部分开启下一步操作&lt;br /&gt;
&lt;br /&gt;
接下来就可以愉快的编写程序了~&lt;br /&gt;
&lt;br /&gt;
======在Github配置GPG keys======&lt;br /&gt;
在终端输入&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gpg --armor --export &amp;quot;GPG key ID&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
将输出的内容从-----BEGIN PGP PUBLIC KEY BLOCK-----到-----END PGP PUBLIC KEY BLOCK-----，包含它们都复制下来。&lt;br /&gt;
&lt;br /&gt;
打开Github网页，并登录自己的账号。按照下述操作依次执行。&lt;br /&gt;
&lt;br /&gt;
头像--&amp;gt;Setting--&amp;gt;SSH and GPG keys--&amp;gt;New GPG key&lt;br /&gt;
&lt;br /&gt;
标题自己怎么舒服怎么来，将第一步复制的内容全部粘贴然后保存起来，这样Github就能识别到你commit中包含的GPG sign的信息了，你就可以在commit history或release等页面看到绿色的签名后的标志了。&lt;br /&gt;
&lt;br /&gt;
==== SSH key ====&lt;br /&gt;
可以通过生成SSH key，并保存在Github等托管平台上实现免密Push，这也是官方推荐的方法，过去输入用户名/密码的方式早已被抛弃。&lt;br /&gt;
&lt;br /&gt;
===== 生成Key =====&lt;br /&gt;
1.打开终端并输入 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls ~/.ssh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
检查是否已经存在了SSH密钥。如果你看到包含id_rsa等文件，说明你已经有了SSH key，可以跳过第 2 步和第 3 步。&lt;br /&gt;
&lt;br /&gt;
2.输入，生成新的SSH密钥。你可以直接按回车键使用默认的文件路径和空密码，也可以自己设置。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ssh-keygen -t rsa -b 4096 -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4.在终端输入或使用文本编辑器打开，并复制所有内容&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;vim ~/.ssh/id_rsa.pub&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5.打开Github网页，并登录自己的账号。按照下述操作依次执行。&lt;br /&gt;
&lt;br /&gt;
头像--&amp;gt;Setting--&amp;gt;SSH and GPG keys--&amp;gt;New SSH key&lt;br /&gt;
&lt;br /&gt;
自己起个标题名并粘贴4步中所有内容，保存，接下来你可以免密对Github上的repo进行操作了。&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;br /&gt;
&lt;br /&gt;
[3] CSDN -- git merge 使用简介: &amp;lt;nowiki&amp;gt;https://blog.csdn.net/All_In_gzx_cc/article/details/125482617&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4] 知乎 -- MAC 安装 homebrew 国内镜像: &amp;lt;nowiki&amp;gt;https://zhuanlan.zhihu.com/p/547898033&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5] Github -- Generating a new GPG key: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6] Github -- Adding a GPG key to your GitHub account: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/managing-commit-signature-verification/adding-a-gpg-key-to-your-github-account&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7] Github -- Generating a new SSH key and adding it to the ssh-agent: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[8] Github -- Adding a new SSH key to your GitHub account: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Android%E5%86%85%E6%A0%B8%E7%BC%96%E8%AF%91%E5%85%A5%E9%97%A8&amp;diff=893</id>
		<title>Android内核编译入门</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Android%E5%86%85%E6%A0%B8%E7%BC%96%E8%AF%91%E5%85%A5%E9%97%A8&amp;diff=893"/>
		<updated>2024-08-25T03:07:19Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​/* 设置环境变量并开始编译 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Android 内核简介 ===&lt;br /&gt;
安卓内核用的也是linux（LTS），google把LTS内核和Android的一些补丁、模块结合形成自己的Android通用内核（Android common kernel，ACK）。也就是GKI, Generic Kernel Image。如果你的手机是量产机（Google除外），还会被cpu厂商例如高通，联发科再次开发，下放到手机厂商还会有部分修改。&lt;br /&gt;
&lt;br /&gt;
相当于现在变成了一个Image，镜像了。&lt;br /&gt;
&lt;br /&gt;
GKI 内核会与包含系统芯片 (SoC) 和板级代码的硬件专用供应商模块进行交互。GKI 内核与供应商模块之间的交互通过内核模块接口 (KMI) 来实现，该接口由标识供应商模块所需的函数和全局数据的符号列表组成。&lt;br /&gt;
&lt;br /&gt;
=== 配置使用环境 ===&lt;br /&gt;
&lt;br /&gt;
===== 推荐的编译环境 =====&lt;br /&gt;
Ubuntu 20.04 / 22.04&lt;br /&gt;
&lt;br /&gt;
Arch Linux&lt;br /&gt;
&lt;br /&gt;
(因为主播使用的就是这个喵）&lt;br /&gt;
&lt;br /&gt;
考虑到编译环境的稳定性不是很推荐装一些其他的系统&lt;br /&gt;
&lt;br /&gt;
你可以使用 VMware virtual machine 或者 WSL2 （Windows Subsystem on Linux）&lt;br /&gt;
&lt;br /&gt;
目前我更推荐使用 WSL 因为其安装较为方便，并且可以与 Microsoft VScode 协同工作方便你对Git的使用以及对内核源码的修改&lt;br /&gt;
&lt;br /&gt;
（当然 Vmware 也可以，只不过我印象不太好，这货 bug 稍微有点多）&lt;br /&gt;
&lt;br /&gt;
关于这两者方案优劣对比详见百度，此处不赘述。&lt;br /&gt;
&lt;br /&gt;
===== 安装WSL2教程 =====&lt;br /&gt;
需要先启用适用于 Linux 的 Windows 子系统以及虚拟化：&lt;br /&gt;
&lt;br /&gt;
按下键盘&amp;lt;code&amp;gt;win+R&amp;lt;/code&amp;gt;，并输入&amp;lt;code&amp;gt;powershell&amp;lt;/code&amp;gt;回车&lt;br /&gt;
&lt;br /&gt;
在&amp;lt;code&amp;gt;poershell&amp;lt;/code&amp;gt;终端内输入以下内容:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wsl --set --default-version 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
随后打开你的微软应用商店 Microsoft Store&lt;br /&gt;
&lt;br /&gt;
搜索 Ubuntu，选择一个你喜欢的版本安装即可&lt;br /&gt;
&lt;br /&gt;
在安装完WSL后，我们可以注意到其默认安装目录为：&amp;lt;code&amp;gt;C：Program Files\WindowsApps&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果你需要拉内核源码的话后续会占用你大量C盘的空间，因此下一步我们对WSL进行迁移。&lt;br /&gt;
&lt;br /&gt;
我们首先打开 &amp;lt;code&amp;gt;powershell&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
随后输入 &amp;lt;code&amp;gt;wsl -l -v&amp;lt;/code&amp;gt;之后powershell会输出一段：&lt;br /&gt;
&lt;br /&gt;
NAME                      STATE           VERSION&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Ubuntu-20.04    Stopped         2&lt;br /&gt;
&lt;br /&gt;
确认目前状态为 Stopped 之后，我们输入：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wsl --export Ubunut-20.04 D:\WSL\ubuntu-20.04.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
将WSL的系统镜像导出到其他盘，随后注销目前系统的WSL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wsl --unregister Ubuntu-20.04&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
随后我们导入刚才导出的tar文件&amp;lt;code&amp;gt;wsl --import &amp;lt;导入名称&amp;gt; &amp;lt;导入盘的路径&amp;gt; &amp;lt;刚才导出的tar的路径&amp;gt; --version 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
例如根据上面的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wsl --import Ubuntu-20.04 D:\WSL D:\WSL\ubuntu-20.04.tar --version 2&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;apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install -y build-essential bc bison python curl git zip ftp gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi libssl-dev lftp wget libfl-dev gcc bc zip make&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;
'''Clang'''&lt;br /&gt;
&lt;br /&gt;
此处推荐两个 &lt;br /&gt;
&lt;br /&gt;
一个是Google官方提供的Clang编译器：[https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/ Google Clang]&lt;br /&gt;
&lt;br /&gt;
一个是由知名大佬kdrag0n 提供的预编译Clang：[https://github.com/kdrag0n/proton-clang Proton Clang]&lt;br /&gt;
&lt;br /&gt;
==== 拉取内核源码 ====&lt;br /&gt;
关于如何找到你的内核源码这件事，大部分内核源码在开源时都会参照以下命名规则命名&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;android_kernel_厂商_平台&amp;lt;/code&amp;gt; 例如 &amp;lt;code&amp;gt;android_kernel_xiaomi_sm8250&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在针对特定机型进行优化或者重构后的源码也会有开发者将其命名为&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;android_kernel_厂商_设备代号（或者机型名称）&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
设备代号请参照这里 ：[[设备代号收录集合]]&lt;br /&gt;
&lt;br /&gt;
我们一般可以在&amp;lt;code&amp;gt;Github&amp;lt;/code&amp;gt;找到这些源码&lt;br /&gt;
&lt;br /&gt;
如果您需要拉取ACK（Android Common Kernel）请前往Google OpenSource&lt;br /&gt;
&lt;br /&gt;
==== 设置环境变量并开始编译 ====&lt;br /&gt;
&lt;br /&gt;
本文将以较新的内核为示例，使用clang编译。部分设备内核可能需要纯gcc编译，此处暂时不做介绍。&lt;br /&gt;
&lt;br /&gt;
首先你需要进入你内核源码的目录，你也可以将下列的指令写在脚本里面&amp;lt;pre&amp;gt;&lt;br /&gt;
export CC='放clang的路径/bin/clang'&lt;br /&gt;
export CLANG_TRIPLE=aarch64-linux-gnu-&lt;br /&gt;
export CROSS_COMPILE='aarch64-linux-gnu编译器的路径/bin/aarch64-linux-gnu-'&lt;br /&gt;
export CROSS_COMPILE_ARM32='arm-linux-gnueabi编译器的路径/bin/arm-linux-gnueabi-'&lt;br /&gt;
export ARCH=arm64&lt;br /&gt;
export SUBARCH=arm64&lt;br /&gt;
export KBUILD_BUILD_HOST = &amp;quot;hostname&amp;quot;&lt;br /&gt;
export KBUILD_BUILD_USER = &amp;quot;username&amp;quot;&lt;br /&gt;
make O=out ''device''_defconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
这里需要注意的是，最后的&amp;lt;code&amp;gt;device&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
取决于你编译的设备的代号，查看你设备的代号请见：[[设备代号收录集合]]&lt;br /&gt;
&lt;br /&gt;
如果是直接从apt等软件包仓库安装的GNU编译套件，那么&amp;lt;code&amp;gt;CROSS_COMPILE&amp;lt;/code&amp;gt;可以直接设定为&amp;lt;code&amp;gt;aarch64-linux-gnu&amp;lt;/code&amp;gt;. ...ARM32同理&lt;br /&gt;
而&amp;lt;code&amp;gt;defconfig&amp;lt;/code&amp;gt;则是你设备在内核中的配置文件，一套内核源码可能被多个设备共有。在编译的时候，make通过不同的配置文件来区分这些设备，这些配置文件在arch/[架构]/config下，在make的时候无需指定路径，直接输入配置文件名字即可。&amp;lt;ref&amp;gt;此处引用了 grislux55 在gitbook上的内核编译教程中针对配置文件的介绍，文末贴上了引用资料链接&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
举个简单的例子，内核源码就是一个大超市，&amp;lt;code&amp;gt;defconfig&amp;lt;/code&amp;gt;（'''购物清单'''）则负责告诉&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;，'''你需要购买什么东西（对其进行编译），从而达成对设备驱动的区分'''&lt;br /&gt;
&lt;br /&gt;
=== 获取编译结果并刷入测试 ===&lt;br /&gt;
内核文件在[你的项目/输出路径/arch/目标内核架构/boot]下&lt;br /&gt;
&lt;br /&gt;
例如我们编译了xiaomi_sdm8250的内核，则在android_kernel_xiaomi_sm8250/out/arch/arm64/boot/里面&lt;br /&gt;
&lt;br /&gt;
其名为Image或者Image.gz或者Image.gz-dtb&lt;br /&gt;
&lt;br /&gt;
他们的区别在于&lt;br /&gt;
&lt;br /&gt;
随后你需要刷入测试，以前有一种方法是使用 Android Image Kitchen 来解开boot.img 并将你编译好的dtb替换进去，现在看来这种方法未免太不优雅，因此我们可以使用由osm0sis大佬开发的Anykernel3打包卡刷包文件，并可以在 TWRP REC 或者 Horizen Kernel Flasher内进行刷入附链接：&lt;br /&gt;
&lt;br /&gt;
[https://github.com/osm0sis/AnyKernel3 ①Anykernel3]   ②Horizen Kernel Flasher ③[https://twrp.me/ TWRP rec]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 资料参考： ===&lt;br /&gt;
[1] Gtibook 安卓内核编译教程：https://jebchou.gitbook.io/android-kernel-magic/02begin_compile&lt;br /&gt;
&lt;br /&gt;
[2] CSDN 安卓架构-内核：https://blog.csdn.net/weixin_40557160/article/details/128388849&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</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=892</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=892"/>
		<updated>2024-08-24T14:35:15Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​git: git commit 重写&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;&lt;br /&gt;
&lt;br /&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;
&lt;br /&gt;
更改默认编辑器&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global core.editor nano&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;
例如我们要克隆&amp;lt;code&amp;gt;LineageOS&amp;lt;/code&amp;gt;的内核源码，指定&amp;lt;code&amp;gt;lineage-21&amp;lt;/code&amp;gt;分支，且仅保留最近一个提交，则需要输入:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b lineage-21 &amp;lt;nowiki&amp;gt;https://github.com/LineageOS/android_kernel_xiaomi_sdm845&amp;lt;/nowiki&amp;gt; --depth=1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git add ====&lt;br /&gt;
添加某个文件，或者目录到暂存区，用于告诉git你需要将哪些文件的更改包含在下一次的提交(commit)之中添加一个或者多个文件到暂存区之中&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;
&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;
&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;
&amp;lt;/pre&amp;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;
 git commit&lt;br /&gt;
&lt;br /&gt;
这一操作将会打开 git 的默认的文本编辑器，你应该在这里写明 commit message. 第一行是标题，下面的都是解释说明，前面带有#的行不会被列入文本中.&lt;br /&gt;
&lt;br /&gt;
好的 commit message 是方便所有人的举措. 对初学者来说，不要求做的多么规范，但是建议做到以下几点：&lt;br /&gt;
&lt;br /&gt;
- 简短说明本次 commit 做了什么，至少你自己看一眼能知道自己在干什么&lt;br /&gt;
&lt;br /&gt;
- 尽力做到一个 commit 一个修改，尽量不要大杂烩或者一个修改拖好几个 commit&lt;br /&gt;
&lt;br /&gt;
- 如果是比较大的项目（例如 Android Kernel），尽量写明你所修改的模块，令人一目了然. 例如:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ARM64: configs: enchilada: Disable virtual terminal&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;--author=&amp;quot;ExampleName &amp;lt;example@example.com&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;参数说明这是哪位作者的提交. 这是对他人思考和试验成果的尊重.&lt;br /&gt;
&lt;br /&gt;
- Commit message 里不得谩骂他人，不要带有其他人或者你自己的无关私人信息.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
如果想要直接提交而不添加暂存区（偷懒），可以指定&amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;参数.&lt;br /&gt;
&lt;br /&gt;
您也可以使用&amp;lt;code&amp;gt;-m &amp;quot;example commit message&amp;quot;&amp;lt;/code&amp;gt;来直接 commit.&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;
例如在您的仓库中有这几个分支：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-&amp;gt; master (Default)&lt;br /&gt;
   backup&lt;br /&gt;
   test&lt;br /&gt;
&amp;lt;/pre&amp;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;
&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;
用于比较当前工作区与上一个版本之间的差异&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/example b/example&lt;br /&gt;
&lt;br /&gt;
index fbb8c85..d65c7eb 100644&lt;br /&gt;
&lt;br /&gt;
--- a/example&lt;br /&gt;
&lt;br /&gt;
+++ b/example&lt;br /&gt;
&lt;br /&gt;
@@ -1 +1,2 @@&lt;br /&gt;
&lt;br /&gt;
114514&lt;br /&gt;
&lt;br /&gt;
+1919180&lt;br /&gt;
&amp;lt;/pre&amp;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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit sha1 hash:   针对你这个提交的 commit id&lt;br /&gt;
Author: commit      作者名称   &amp;lt;you@example.com&amp;gt;&lt;br /&gt;
Date: commit        日期&lt;br /&gt;
commit:             名称&lt;br /&gt;
&amp;lt;/pre&amp;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;
&amp;lt;pre&amp;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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git cherry-pick ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cherry-pick (遴选) 和它的名称一样，挑选一个我们需要的 commit 进行操作。它可以用于将在其他分支上的 commit 修改，移植到当前的分支。&lt;br /&gt;
&lt;br /&gt;
如果我们想在我们正在开发的版本上，添加一个其他版本中的功能代码。就可以使用 cherry-pick ，将这个功能相关的 commit 提取出来，合入该版本。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git cherry-pick &amp;lt;commit-id&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
当我们执行完 &amp;lt;code&amp;gt;cherry-pick&amp;lt;/code&amp;gt;操作之后，会自动生成一个&amp;lt;code&amp;gt;commit&amp;lt;/code&amp;gt;以及对应新的&amp;lt;code&amp;gt;commit-id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在顺利的情况下我们可以直接通过，但如果遇到代码等因为变量名，写法等不同的情况，&amp;lt;code&amp;gt;cherry-pick&amp;lt;/code&amp;gt;大概率会报错，此时我们需要进行报错处理。&lt;br /&gt;
&lt;br /&gt;
第一种方案是手动修改&lt;br /&gt;
&lt;br /&gt;
我们可以先使用&amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt;检查当前遴选时冲突的文件&lt;br /&gt;
&lt;br /&gt;
然后 &amp;lt;code&amp;gt;git checkout --ours filename&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;
再使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git cherry-pick --continue&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
命令让 cherrypick 操作继续执行。&lt;br /&gt;
&lt;br /&gt;
第二种方案是直接退出&amp;lt;code&amp;gt;cherry-pick&amp;lt;/code&amp;gt;进程，一般适用于冲突文件实在太多了难以按照方案一处理的情况。&lt;br /&gt;
&lt;br /&gt;
需要注意的是，如果您当前正在遴选的提交在该分支已经存在也会冲突，在这种情况下，您需要解决冲突并手动解决问题。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git cherry-pick --abort&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git fetch ====&lt;br /&gt;
git fetch 命令用于从远程获取仓库。&lt;br /&gt;
&lt;br /&gt;
==== git merge ====&lt;br /&gt;
&amp;lt;code&amp;gt;git merge&amp;lt;/code&amp;gt;是用来把分叉的提交历史放回到一起(合并)的方式。&lt;br /&gt;
&lt;br /&gt;
git merge命令用来将你之前使用git branch命令创建的分支以及在此分支上独立开发的内容整合为一个分支。&lt;br /&gt;
&lt;br /&gt;
本&lt;br /&gt;
&lt;br /&gt;
==== git pull ====&lt;br /&gt;
用于从远程获取代码并合并本地的版本。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt;其实就是&amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;git merge FETCH_HEAD&amp;lt;/code&amp;gt; 的简写。&lt;br /&gt;
&lt;br /&gt;
格式如下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git pull &amp;lt;remote-host-name&amp;gt; &amp;lt;remote-branch-name&amp;gt;:&amp;lt;local-branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git rebase ====&lt;br /&gt;
用于需要修改历史上某一项commit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git rebase -i HEAD~&amp;lt;commit number&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
commit number就是从头部往前数的commit数量。执行后会弹出你在git config内配置的编辑器，若未配置则是默认，vim居多。然后就可以看见一堆commit前面有pick字样。可以将pick替换为你想要的操作。&lt;br /&gt;
有以下操作：&lt;br /&gt;
&lt;br /&gt;
1.edit，顾名思义编辑此commit，替换完保存后请修改内容，使用&amp;lt;code&amp;gt;git add&amp;lt;/code&amp;gt;或vscode，github desktop将修改文件添加到暂存区，之后命令行执行&amp;lt;code&amp;gt;git commit --amend&amp;lt;/code&amp;gt;这样commit就修改成了&lt;br /&gt;
&lt;br /&gt;
2.squash，合并几个提交，确认一个父提交，将要合并的commit，从下向上替换字符串，会从下向上合并(方位指的是&amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;后弹出的编辑器)&lt;br /&gt;
&lt;br /&gt;
3.drop，需要移除的commit&lt;br /&gt;
&lt;br /&gt;
4.reword，修改commit信息&lt;br /&gt;
&lt;br /&gt;
另外，还可以使用首字母来说明命令。&lt;br /&gt;
&lt;br /&gt;
==== git subtree ====&lt;br /&gt;
子树，在Android开发中多用于Kernel侧更改，如跟踪audio模块等&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git subtree add --prefix=&amp;lt;目录&amp;gt; &amp;lt;仓库地址&amp;gt; &amp;lt;远程分支&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果需要更新远程库时&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git subtree pull --prefix=&amp;lt;目录&amp;gt; &amp;lt;仓库地址&amp;gt; &amp;lt;远程分支&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git submodule ====&lt;br /&gt;
&lt;br /&gt;
===== 子模块功能的概述 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule&amp;lt;/code&amp;gt;允许在自己的Github仓库里加入别人的github仓库，作为自己仓库的子仓库(即submodule)。&lt;br /&gt;
&lt;br /&gt;
为什么我们会需要使用子模块？当我们维护一个项目时有可能遇到以下情况，例如维护某款机型的KernelSU内核，我们需要将KernelSU导入至我们的内核源码中，如果我们直接clone进去容易带来一个问题，如果KernelSU更新了怎么办？此时我们便可以使用子模块来解决这个问题&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule&amp;lt;/code&amp;gt;允许在git仓库里存放别人仓库的url，作为自己的子模块，其核心内容是在Git仓库里面加入一个&amp;lt;code&amp;gt;.gitmodules&amp;lt;/code&amp;gt;文件，里面会记录各个submodule的名字，路径，以及对应链接。&lt;br /&gt;
&lt;br /&gt;
===== 加入子模块 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule add &amp;lt;url&amp;gt; &amp;lt;path&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
此时 &amp;lt;code&amp;gt;.gitmodules&amp;lt;/code&amp;gt;内会自动生成以下内容&lt;br /&gt;
&lt;br /&gt;
[submodule &amp;quot;xxx&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
path = xxx&lt;br /&gt;
&lt;br /&gt;
url = xxx&lt;br /&gt;
&lt;br /&gt;
===== 初始化子模块 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule init&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== 更新子模块 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Git进阶 ===&lt;br /&gt;
&lt;br /&gt;
==== GPG key ====&lt;br /&gt;
&lt;br /&gt;
===== 简介 =====&lt;br /&gt;
平时在Github上摸鱼的时候，是不是经常能看见如下图所示，有一个绿色的&amp;quot;Verified&amp;quot;字样，看着很酷，实际上这是为了确保commit为开发者本人所写的进行的GPG签名。&lt;br /&gt;
[[文件:Github GPG sign.png|居中]]&lt;br /&gt;
因为Git的默认机制，任何人都可以通过你的邮箱和用户名创建虚假的commit，甚至你名气很大的话可以“栽赃陷害”你。如果你是某高校计算机专业的同学亦或是对计算机抱有很大的兴趣，乐意为开源社区提供“资源”，那么我建议你设置GPG sign。未来是不可预知的，人人都可能成为巨佬。&lt;br /&gt;
&lt;br /&gt;
===== 使用 =====&lt;br /&gt;
因为我只在Mac环境下配置过GPG，Windows只是打游戏用，所以用的少，Linux/类Unix可以参考一下。其它系统等待他人补充......&lt;br /&gt;
&lt;br /&gt;
====== Mac ======&lt;br /&gt;
Mac默认是不带GPG的，需要通过第三方软件包安装器Homebrew进行安装，首先先安装Homebrew，如已安装可以跳过。&lt;br /&gt;
&lt;br /&gt;
编辑器限制原因不能使用默认标题进行分步了，故使用1、2、3等小数字代替。&lt;br /&gt;
&lt;br /&gt;
安装Homebrew&lt;br /&gt;
&lt;br /&gt;
在安装之前需要从系统信息中查看芯片为Intel/M系列&lt;br /&gt;
&lt;br /&gt;
Intel使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/bin/zsh -c &amp;quot;$(curl -fsSL &amp;lt;nowiki&amp;gt;https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh&amp;lt;/nowiki&amp;gt;)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intel按照脚本提示，选源，输密码，回车一路绿灯就好了，如果这都不会......可能你不是很适合开发，因为该脚本是国内开发者编写的，中文和一键化安装都集齐了。&lt;br /&gt;
&lt;br /&gt;
M系列使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/bin/zsh -c &amp;quot;$(curl -fsSL https://gitee.com/huwei1024/HomebrewCN/raw/master/Homebrew.sh)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
并且因为M系列系统结构发生改变，包安装位置不在是以前的/usr/local/，而是在/opt/homebrew，所以要将配置文件里的环境变量改过来。&lt;br /&gt;
&lt;br /&gt;
1.首先进入根目录&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd ~&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.创建.zshrc文件&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;touch .zshrc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3.打开文件进行编辑&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;open -e .zshrc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4.如果有旧的环境就修改，没有就新增&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;export PATH=&amp;quot;/opt/homebrew/bin:$PATH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export PATH=&amp;quot;/opt/homebrew/sbin:$PATH&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5.保存&lt;br /&gt;
&lt;br /&gt;
使用command + s&lt;br /&gt;
&lt;br /&gt;
6.生效环境变量&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;source .zshrc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7、测试&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;brew -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
若终端顺利打印出brew的版本，那么就安装成功了！&lt;br /&gt;
&lt;br /&gt;
注：本人没有使用过M系列设备，该教程在知乎上找到的&lt;br /&gt;
&lt;br /&gt;
使用Homebrew安装GPG&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;brew install gnupg pinentry-mac&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[文件:截屏2024-02-17 17.34.48.png|居中]]&lt;br /&gt;
&lt;br /&gt;
为GPG添加环境变量，否则在签名的时候会发生报错（使用bash请自行替换配置文件）&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;echo &amp;quot;export GPG_TTY=$(tty)&amp;quot; &amp;gt;&amp;gt; ~/.zshrc&lt;br /&gt;
source ~/.zshrc&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
生成一个GPG keys&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gpg --full-generate-key&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[文件:截屏2024-02-17 17.45.51.png|居中]]&lt;br /&gt;
&lt;br /&gt;
默认使用的是ECC，我使用的是RSA，按照自己喜好，或从百度搜索非对称和对称加密算法之间的区别，这里只做使用方法的介绍，不做赘述。&lt;br /&gt;
&lt;br /&gt;
然后添写密钥长度和使用有效期，这里建议选择长期，并做备份，一辈子用一个就够了。&lt;br /&gt;
&lt;br /&gt;
[[文件:截屏2024-02-17 17.46.06.png|居中]]&lt;br /&gt;
[[文件:截屏2024-02-17 17.46.35.png|居中]]&lt;br /&gt;
&lt;br /&gt;
个人信息按照Github信息填写，真实姓名对应Username。填写完毕按回车输入O即可生成密钥。不出意外的话会弹出Gui窗口让你设置密钥密码，强烈建设设置一个较为复杂的密码，并牢记，当然也可以不设置。&lt;br /&gt;
&lt;br /&gt;
使用GPG对Git的commit和tag进行签名&lt;br /&gt;
&lt;br /&gt;
先为Git定义GPG二进制所在地&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global gpg.program $(which gpg)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
查看GPG keys ID&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gpg --list-secret-keys --keyid-format=long&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如图所示RSA/后面紧跟的一串就是GPG keys ID&lt;br /&gt;
[[文件:截屏2024-02-17 17.57.01.png|居中]]&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global user.signingkey &amp;quot;GPG key ID&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
为Git设置全局commit和tag签名&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global commit.gpgsign true&lt;br /&gt;
&lt;br /&gt;
git config --global tag.gpgSign true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
参见本文“在Github配置GPG keys”部分开启下一步操作&lt;br /&gt;
&lt;br /&gt;
接下来就可以愉快的编写程序了~&lt;br /&gt;
&lt;br /&gt;
======在Github配置GPG keys======&lt;br /&gt;
在终端输入&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gpg --armor --export &amp;quot;GPG key ID&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
将输出的内容从-----BEGIN PGP PUBLIC KEY BLOCK-----到-----END PGP PUBLIC KEY BLOCK-----，包含它们都复制下来。&lt;br /&gt;
&lt;br /&gt;
打开Github网页，并登录自己的账号。按照下述操作依次执行。&lt;br /&gt;
&lt;br /&gt;
头像--&amp;gt;Setting--&amp;gt;SSH and GPG keys--&amp;gt;New GPG key&lt;br /&gt;
&lt;br /&gt;
标题自己怎么舒服怎么来，将第一步复制的内容全部粘贴然后保存起来，这样Github就能识别到你commit中包含的GPG sign的信息了，你就可以在commit history或release等页面看到绿色的签名后的标志了。&lt;br /&gt;
&lt;br /&gt;
==== SSH key ====&lt;br /&gt;
可以通过生成SSH key，并保存在Github等托管平台上实现免密Push，这也是官方推荐的方法，过去输入用户名/密码的方式早已被抛弃。&lt;br /&gt;
&lt;br /&gt;
===== 生成Key =====&lt;br /&gt;
1.打开终端并输入 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls ~/.ssh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
检查是否已经存在了SSH密钥。如果你看到包含id_rsa等文件，说明你已经有了SSH key，可以跳过第 2 步和第 3 步。&lt;br /&gt;
&lt;br /&gt;
2.输入，生成新的SSH密钥。你可以直接按回车键使用默认的文件路径和空密码，也可以自己设置。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ssh-keygen -t rsa -b 4096 -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4.在终端输入或使用文本编辑器打开，并复制所有内容&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;vim ~/.ssh/id_rsa.pub&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5.打开Github网页，并登录自己的账号。按照下述操作依次执行。&lt;br /&gt;
&lt;br /&gt;
头像--&amp;gt;Setting--&amp;gt;SSH and GPG keys--&amp;gt;New SSH key&lt;br /&gt;
&lt;br /&gt;
自己起个标题名并粘贴4步中所有内容，保存，接下来你可以免密对Github上的repo进行操作了。&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;br /&gt;
&lt;br /&gt;
[3] CSDN -- git merge 使用简介: &amp;lt;nowiki&amp;gt;https://blog.csdn.net/All_In_gzx_cc/article/details/125482617&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4] 知乎 -- MAC 安装 homebrew 国内镜像: &amp;lt;nowiki&amp;gt;https://zhuanlan.zhihu.com/p/547898033&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5] Github -- Generating a new GPG key: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6] Github -- Adding a GPG key to your GitHub account: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/managing-commit-signature-verification/adding-a-gpg-key-to-your-github-account&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7] Github -- Generating a new SSH key and adding it to the ssh-agent: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[8] Github -- Adding a new SSH key to your GitHub account: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E8%A7%A3%E9%94%81Bootloader&amp;diff=827</id>
		<title>解锁Bootloader</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E8%A7%A3%E9%94%81Bootloader&amp;diff=827"/>
		<updated>2024-08-17T15:47:41Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​unlockbootloader: oneplus: 添加旧机型解锁方式&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bootloader锁是啥？？ ==&lt;br /&gt;
Bootloader锁，也称为BL锁，Bootloader是&amp;lt;mark&amp;gt;'''在操作系统内核运行之前运行的一段小程序'''&amp;lt;/mark&amp;gt;。在嵌入式操作系统中，Bootloader的主要作用是在操作系统内核运行之前初始化硬件设备、建立内存空间映射图，从而将系统的软硬件环境带到一个合适状态，以便为最终调用操作系统内核准备好正确的环境。&lt;br /&gt;
&lt;br /&gt;
Bootloader锁主要是在引导过程中对系统签名、内核签名及Recovery签名''''进行检验，如果签名不一致，即终止引导。这是厂商为了普通用户的安全考虑而设下的一个门槛，它会在Bootloader引导启动时检测即将被启动的东西（如recovery.img / boot.img）的签名是否是厂商的，如果不是的话就拒绝启动。因此，如果不解开BL锁，用户无法进行刷机操作。&lt;br /&gt;
&lt;br /&gt;
'''所以解锁bootloader，是我们玩机的第一步！'''&lt;br /&gt;
&lt;br /&gt;
== 我该怎么解锁Bootloader呢? ==&lt;br /&gt;
不同品牌的设备有不同的解锁方式。&lt;br /&gt;
&lt;br /&gt;
'''以下是不同品牌的解锁权限开放情况：'''&lt;br /&gt;
&lt;br /&gt;
'''小米（红米）'''：支持解锁，但需要通过地狱级难度的答题测试。解锁 ROOT 保修。&lt;br /&gt;
&lt;br /&gt;
'''OPPO（真我 realme）'''：部分机型支持解锁，需要申请，名额有限。要求机型上市时间必须超过3个月，同时需要 OPPO 官方开放该机型的深度测试。支持解锁 ROOT 保修，前提是设备可以正常回锁。&lt;br /&gt;
&lt;br /&gt;
'''一加'''：支持解锁，不需答题申请，方式简单。解锁 ROOT 保修。&lt;br /&gt;
&lt;br /&gt;
'''vivo（含 iQOO）'''：不支持解锁。&lt;br /&gt;
&lt;br /&gt;
'''华为'''：不支持解锁。&lt;br /&gt;
&lt;br /&gt;
'''荣耀'''：不支持解锁。&lt;br /&gt;
&lt;br /&gt;
'''魅族'''：官方不支持解锁，但官方开放不完整 ROOT ，可以替换为 Magisk。&lt;br /&gt;
&lt;br /&gt;
'''中兴（努比亚、红魔）'''：不支持解锁。&lt;br /&gt;
&lt;br /&gt;
'''三星'''：支持解锁，方式简单。但是有 KNOX 物理熔断机制，解锁之后无法恢复。&lt;br /&gt;
&lt;br /&gt;
'''索尼'''：大部分支持解锁，但是需要申请获取解锁码。&lt;br /&gt;
&lt;br /&gt;
'''联想'''：支持解锁，方式简单，但是zui15解锁会报错，所以仅限zui15以下。&lt;br /&gt;
[[文件:Jiesuoweizhi.jpg|缩略图|绑定账号位置]]&lt;br /&gt;
&lt;br /&gt;
=== 小米/红米机型（出厂搭载HyperOS的设备） ===&lt;br /&gt;
此部分适用于出厂搭载HyperOS的设备，如小米14系列、Redmi K70系列&lt;br /&gt;
&lt;br /&gt;
但是门槛较高，需要小米社区账号5级+答题通过+申请审核通过，截至24年2月14日，答题为68分客观题+32分主观题，本人多次答题均没有主观成绩，推测并没有人工阅卷，并且答题通过后申请资格审核也不一定通过&lt;br /&gt;
&lt;br /&gt;
本教程建立在小米社区5级的基础上&lt;br /&gt;
&lt;br /&gt;
==== 1、将账号与手机绑定 ====&lt;br /&gt;
打开设置——我的设备——全部参数与信息——连续点击6次OS版本开启开发者选项&lt;br /&gt;
&lt;br /&gt;
返回设置主页——最底部更多设置——底部开发者选项——设备解锁状态&lt;br /&gt;
&lt;br /&gt;
关闭手机WiFi，打开数据网络，点击页面底部绑定，解锁需要等待72小时&lt;br /&gt;
&lt;br /&gt;
之后不需要再次点击绑定，否则需要重新计算72小时&lt;br /&gt;
&lt;br /&gt;
==== 2、小米社区 ====&lt;br /&gt;
底部官方——上方内测申请——BL解锁申请——页面底部“去答题”&lt;br /&gt;
&lt;br /&gt;
对照题库完成比较简单，[https://github.com/MlgmXyysd/Xiaomi-BootLoader-Questionnaire/discussions/4#discussioncomment-8443406 题库链接（可能需要科学上网）]&lt;br /&gt;
&lt;br /&gt;
如果答题分数足以通过，可以回到BL解锁申请页，点击“立即报名”，等待通过&lt;br /&gt;
&lt;br /&gt;
==== 3、电脑下载解锁工具并解锁 ====&lt;br /&gt;
[http://www.miui.com/unlock/index.html 官方网站下载]&lt;br /&gt;
&lt;br /&gt;
下载后解压，双击miflash_unlock.exe，可能需要更新&lt;br /&gt;
&lt;br /&gt;
需要登录与手机绑定账号相同的小米账号，注意扫码登陆会卡住，尽量使用账号密码登录&lt;br /&gt;
&lt;br /&gt;
登录完成后，将手机关机，长按音量减+电源键进入fastboot模式，用数据线将手机连接至电脑&lt;br /&gt;
&lt;br /&gt;
电脑显示已连接小米手机后，单击解锁，并等待解锁进度完成&lt;br /&gt;
&lt;br /&gt;
如果一切正常的话，就可以解锁成功了&lt;br /&gt;
&lt;br /&gt;
=== 小米/红米机型（出厂搭载MIUI的设备） ===&lt;br /&gt;
出厂搭载MIUI且升级了HyperOS的设备，可以尝试漏洞解锁，通过漏洞可以实现跳过答题，恢复原来绑定168小时解锁，可以参考[https://www.coolapk.com/feed/51431664?shareKey=ZTg5YmI4MzczNWU2NjVjY2E5M2Y~&amp;amp;shareUid=6601587&amp;amp;shareFrom=com.coolapk.market_14.0.0 此文章]&lt;br /&gt;
&lt;br /&gt;
以下为运行MIUI设备的解锁方法&lt;br /&gt;
&lt;br /&gt;
==== 1、绑定账号 ====&lt;br /&gt;
步骤同HyperOS&lt;br /&gt;
&lt;br /&gt;
==== 2、等待168小时（7天 ====&lt;br /&gt;
&lt;br /&gt;
==== 3、电脑下载解锁工具并解锁 ====&lt;br /&gt;
步骤同HyperOS&lt;br /&gt;
&lt;br /&gt;
=== 索尼解锁 ===&lt;br /&gt;
解锁会清除全部数据&lt;br /&gt;
[[文件:无法打开oem解锁.jpg|缩略图|国行系统无法打开oem解锁]]&lt;br /&gt;
&lt;br /&gt;
==== 番外：如何查看自己的手机支不支持官方解锁？ ====&lt;br /&gt;
打开拨号界面，输入*#*#7378423#*#*，在弹出的界面中选择“Service Info”——“Configuration”，弹出的页面中有一个“Rooting status”，下方的Bootloader unlock allowed后方如果为Yes，即代表可以通过官方解锁码解锁，如果为No，那么即便获取解锁码也是无法解锁的，需要用到qUnlock（花钱强制解锁）&lt;br /&gt;
&lt;br /&gt;
==== 1、打开OEM解锁 ====&lt;br /&gt;
国行由于精简掉了GMS组件，即便使用科学上网也无法打开该选项，强刷港版固件+科学上网即可解决&lt;br /&gt;
&lt;br /&gt;
这里以XZ1的系统为例，其他机型类似&lt;br /&gt;
&lt;br /&gt;
首先我们需要科学上网，大概挂一会就可以，操作过程尽量不要断开&lt;br /&gt;
&lt;br /&gt;
设置底部“系统”——“关于手机”——连续点击最下方“版本号”直到显示“您现在处于开发者模式”，返回上一级在底部找到开发者选项，如果上网很科学的话OEM解锁就可以打开了&lt;br /&gt;
&lt;br /&gt;
==== 2、用IMEI获取解锁码 ====&lt;br /&gt;
设置底部“系统”——“关于手机”——IMEI，如果你是双卡的话随便一个IMEI就可以&lt;br /&gt;
&lt;br /&gt;
[https://developer.sony.com/open-source/aosp-on-xperia-open-devices/get-started/unlock-bootloader/ 点击此处跳转索尼官网解锁链接]，网页使用谷歌'''reCAPTCHA，所以需要科学上网'''&lt;br /&gt;
&lt;br /&gt;
在网页的底部“Select your device”中选择你的设备型号，在下方的文本框中输入你的IMEI，点击“submit”提交，下方会出现“Your unlock code for 你的IMEI号”，此文字下面的一串代码即为你的解锁码&lt;br /&gt;
&lt;br /&gt;
==== 3、使用Fastboot命令解锁 ====&lt;br /&gt;
将设备关机，先将数据线连接到电脑，在按住音量加的同时插入数据线，呼吸灯变蓝即为Fastboot模式&lt;br /&gt;
&lt;br /&gt;
随后打开命令行，输入“&amp;lt;code&amp;gt;fastboot oem unlock 0x你的解锁码&amp;lt;/code&amp;gt;”，即可成功解锁&lt;br /&gt;
&lt;br /&gt;
或者也可以使用柚坛工具箱&lt;br /&gt;
[[文件:柚坛工具箱基本刷入页面.png|居中|无框|531x531像素]]&lt;br /&gt;
在基本刷入页面的普通设备解锁中的解锁码解锁中填写“&amp;lt;code&amp;gt;0x你的解锁码&amp;lt;/code&amp;gt;”，随后点击立即解锁即可完成解锁。&lt;br /&gt;
&lt;br /&gt;
=== 一加手机 ===&lt;br /&gt;
&lt;br /&gt;
==== 1、打开OEM解锁 ====&lt;br /&gt;
在开发者选项中打开允许OEM解锁选项&lt;br /&gt;
&lt;br /&gt;
==== 2.进入Fastboot，开始解锁 ====&lt;br /&gt;
手机进入fastboot后，在命令行中输入&amp;lt;code&amp;gt;fastboot flashing unlock&amp;lt;/code&amp;gt;，然后按下回车确认&lt;br /&gt;
如果不行，您的设备相对较旧，请执行&amp;lt;code&amp;gt;fastboot oem unlock&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
或使用柚坛工具箱，在基本刷入页面的基本命令解锁中选择&amp;lt;code&amp;gt;flashing unlock&amp;lt;/code&amp;gt;，然后点击执行解锁命令&lt;br /&gt;
[[文件:柚坛工具箱基本刷入页面.png|居中|无框|531x531像素]]&lt;br /&gt;
手机将进入新的英文界面，在此界面中选择&amp;lt;code&amp;gt;UNLOCK THE BOOTLOADER&amp;lt;/code&amp;gt;(音量键选择，电源键确认)&lt;br /&gt;
&lt;br /&gt;
等待设备自动重启&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=EvolutionX&amp;diff=821</id>
		<title>EvolutionX</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=EvolutionX&amp;diff=821"/>
		<updated>2024-08-17T14:37:53Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​EvolutionX: They are now based on los&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[文件:Evox.png|居中|无框]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Evolution X 是一款基于LineageOS的Android类原生项目，旨在为用户提供乍一看类似 Pixel 的感觉，并提供许多附加功能。&lt;br /&gt;
&lt;br /&gt;
正在持续更新，有Vanilla和Gapps两个版本的包供选择。&lt;br /&gt;
&lt;br /&gt;
GitHub：https://github.com/Evolution-X&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E4%BD%BF%E7%94%A8edl.py&amp;diff=778</id>
		<title>使用edl.py</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E4%BD%BF%E7%94%A8edl.py&amp;diff=778"/>
		<updated>2024-08-15T15:05:18Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​/* 安装 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;本章将指导使用由[https://github.com/bkerler bkerler]所创建的非官方高通Sahara / Firehose Attack Client / Diag Tools&lt;br /&gt;
* 源代码：https://github.com/bkerler/edl&lt;br /&gt;
=== 在Linux发行版安装 ===&lt;br /&gt;
==== 配置依赖 ====&lt;br /&gt;
* Debian系列(Debian/Ubuntu/Mint/etc)&lt;br /&gt;
&lt;br /&gt;
  sudo apt install adb fastboot python3-dev python3-pip liblzma-dev git&lt;br /&gt;
  sudo systemctl stop ModemManager&lt;br /&gt;
  sudo systemctl disable ModemManager&lt;br /&gt;
  sudo apt purge ModemManager&lt;br /&gt;
&lt;br /&gt;
* Arch系列&lt;br /&gt;
  sudo pacman -S android-tools python python-pip git xz&lt;br /&gt;
  sudo pacman -R modemmanager&lt;br /&gt;
&lt;br /&gt;
==== 安装 ====&lt;br /&gt;
  git clone https://github.com/bkerler/edl.git --recursive&lt;br /&gt;
  cd edl&lt;br /&gt;
  sudo cp Drivers/51-edl.rules /etc/udev/rules.d&lt;br /&gt;
  sudo cp Drivers/50-android.rules /etc/udev/rules.d&lt;br /&gt;
  python3 setup.py build&lt;br /&gt;
  sudo python3 setup.py install&lt;br /&gt;
&lt;br /&gt;
==== 使用EDL ====&lt;br /&gt;
请先利用edl工程线或其它任意方式进入0x9008 mode&lt;br /&gt;
&lt;br /&gt;
GitHub上详细教程：https://github.com/bkerler/edl?tab=readme-ov-file#run-edl-examples&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=9008%E6%B7%B1%E5%BA%A6%E5%88%B7%E6%9C%BA&amp;diff=777</id>
		<title>9008深度刷机</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=9008%E6%B7%B1%E5%BA%A6%E5%88%B7%E6%9C%BA&amp;diff=777"/>
		<updated>2024-08-15T15:00:35Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​9008 flash tool: 添加一加设备&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 什么是9008深度刷机 ==&lt;br /&gt;
9008深度刷机是通过进入9008模式进行底层刷写固件的救砖模式&lt;br /&gt;
&lt;br /&gt;
不是专业刷机用户，切勿进行9008深度刷机，否则重要分区丢失&lt;br /&gt;
&lt;br /&gt;
或者基带丢失，导致设备无法正常使用硬件，设备损坏等等&lt;br /&gt;
&lt;br /&gt;
=== 9008深刷工具 ===&lt;br /&gt;
'''Qualcomm Product Support Tools (QPST)'''&lt;br /&gt;
&lt;br /&gt;
是著名的高通骁龙的深刷平台，支持部分手机或者Pad设备使用&lt;br /&gt;
&lt;br /&gt;
* 支持部分小米设备&lt;br /&gt;
* 支持联想手机和Pad设备&lt;br /&gt;
* 支持部分魅族手机&lt;br /&gt;
* 支持全系LG手机&lt;br /&gt;
* 支持部分努比亚设备&lt;br /&gt;
* 支持全部一加设备&lt;br /&gt;
&lt;br /&gt;
==== 备注 ====&lt;br /&gt;
还有部分机型厂商进行9008限制，需要到售后，或者专业人员提供帮助&lt;br /&gt;
&lt;br /&gt;
不到万不得已不要使用9008进行深度操作和刷写固件！！！&lt;br /&gt;
&lt;br /&gt;
不到万不得已不要使用9008进行深度操作和刷写固件！！！&lt;br /&gt;
&lt;br /&gt;
不到万不得已不要使用9008进行深度操作和刷写固件！！！&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E7%94%A8%E6%88%B7:MoeGLuwu&amp;diff=776</id>
		<title>用户:MoeGLuwu</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E7%94%A8%E6%88%B7:MoeGLuwu&amp;diff=776"/>
		<updated>2024-08-15T14:45:58Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​gl Initial page!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;gl是一只又菜又爱玩的屑学生w&lt;br /&gt;
&lt;br /&gt;
==== Github：https://github.com/uwu-gl ====&lt;br /&gt;
&lt;br /&gt;
==== 酷安：http://www.coolapk.com/u/25623611 ====&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Fastbootd&amp;diff=775</id>
		<title>Fastbootd</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Fastbootd&amp;diff=775"/>
		<updated>2024-08-15T14:42:17Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​fastbootd: 增加super empty链接&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== 提示：本教程不是指引导加载程序。 ====&lt;br /&gt;
&lt;br /&gt;
== 关于fastbootd ==&lt;br /&gt;
&lt;br /&gt;
==== （1）简介 ====&lt;br /&gt;
&lt;br /&gt;
====  Fastbootd，即用户空间fastboot，是在Android 10开始使用的功能更为强大的刷机模式。 ====&lt;br /&gt;
您可以简单理解为fastbootd就是fastboot的升级版。&lt;br /&gt;
&lt;br /&gt;
一般来说fastbootd会整合进recovery。在类原生上，从recovery进入fastbootd方法一般是Advanced -&amp;gt; Enter fastboot。&lt;br /&gt;
&lt;br /&gt;
fastbootd支持对动态分区进行调整和刷写。具体请看下文。&lt;br /&gt;
&lt;br /&gt;
本文不会重复介绍 Fastboot 命令 一章里的命令。如有必要请前往 [[Fastboot 命令]] 页面。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
（2）示例&lt;br /&gt;
&lt;br /&gt;
AOSP recovery: 如第一张图&lt;br /&gt;
[[文件:AOSP RECOVERY FIRST SCREEN EXAMPLE.jpg|缩略图|aosp rec]]&lt;br /&gt;
Twrp的进入：如第二张图&lt;br /&gt;
[[文件:Screenshot 20240815-213505.png|缩略图|这是twrp的重启界面。点击fastbootd的那一项即可进入fastbootd]]&lt;br /&gt;
部分小米设备：如第三张图&lt;br /&gt;
[[文件:Screenshot 20240815-213658.png|缩略图|小米设备的fastbootd。没有兔兔修机器人也行]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 注意：fastbootd要求最新adb-fastboot工具包，请自行去Google官网下载最新版！ ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 命令及详细介绍 ==&lt;br /&gt;
&lt;br /&gt;
===== 通用： =====&lt;br /&gt;
&lt;br /&gt;
* 进入fastbootd&lt;br /&gt;
 adb reboot fastboot # 开机状态&lt;br /&gt;
 fastboot reboot fastboot # 引导加载器状态&lt;br /&gt;
* 检查当前状态是否为fastbootd&lt;br /&gt;
 fastboot getvar is-userspace # 如果是，则返回yes；如果不是，则返回no&lt;br /&gt;
同理，您可以把&amp;lt;code&amp;gt;is-userspace&amp;lt;/code&amp;gt;替换为您需要的变量名进行获取。&lt;br /&gt;
&lt;br /&gt;
===== 动态分区专属： =====&lt;br /&gt;
* 清空/重新改造动态分区&lt;br /&gt;
 fastboot wipe-super path-to-super_empty.img # 使用&amp;lt;code&amp;gt;path-to-super_empty.img&amp;lt;/code&amp;gt;来清空动态分区内容并重新改造。在引导加载器也可以执行但是可能会出现玄学问题。&lt;br /&gt;
更多详情请阅读[[Super Empty|super_empty]]教程中的内容。&lt;br /&gt;
* 逻辑分区相关&lt;br /&gt;
 fastboot getvar is-logical:partition_name # 检查名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的分区是否是逻辑分区.&lt;br /&gt;
 fastboot delete-logical-partition partition_name # 删除名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的逻辑分区。&lt;br /&gt;
 fastboot create-logical-partition partition_name 1145141919810 # 新建一个名称为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;，大小为&amp;lt;code&amp;gt;1145141919810 Byte&amp;lt;/code&amp;gt;的逻辑分区。&lt;br /&gt;
 fastboot resize-logical-partition partition_name 1145141919810 # 将名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的大小修改为&amp;lt;code&amp;gt;1145141919810 Byte&amp;lt;/code&amp;gt;. 现有可用空间必须大于等于你所修改的分区大小.&lt;br /&gt;
* （危险！）在引导加载器模式下刷写动态分区内的分区&lt;br /&gt;
 fastboot --force flash partition_name path-to-image.img # 强制刷写分区。&lt;br /&gt;
&lt;br /&gt;
== 在设备rom里添加fastbootd（如果不存在） ==&lt;br /&gt;
请参考此处提交：https://github.com/PixelExperience-Devices/device_xiaomi_sdm845-common/commit/dcc9496eb18af9522fedf6ce0a8031d1fa2880e0&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=ADB_SideLoad&amp;diff=774</id>
		<title>ADB SideLoad</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=ADB_SideLoad&amp;diff=774"/>
		<updated>2024-08-15T14:40:24Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​adb sideload: 优化刷入刷机包的使用命令刷入&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== '''什么是ADB Sideload？''' ===&lt;br /&gt;
'''ADB Sideload'''是一种卡刷的方式，使用'''ADB Sideload'''刷机能够解决很多刷机过程中碰到的一些问题，'''ADB Sideload'''刷机原理是使用数据线连接电脑，然后将卡刷包推送到手机里，使用第三方recovery进行刷机，归根结底'''ADB Sideload'''刷机还是属于“卡刷”方式，手机刷机失败无法开机又不支持外置sd卡（特别是新出的机型，是没有sd卡槽的）的情况下使用'''ADB Sideload'''刷机是最简单可行的方法。&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== '''ADB Sideload刷机教程''' ===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== '''前期准备''' ====&lt;br /&gt;
1、电脑安装好了相应的ADB驱动（安装请参考“[[ADB与Fastboot驱动]]”）&lt;br /&gt;
&lt;br /&gt;
2、相应机型的卡刷包（格式为zip）&lt;br /&gt;
&lt;br /&gt;
3、确保手机已经解锁了bl（解锁请参考“[[解锁Bootloader]] ”），并且手机已经刷入了支持ADB Sideload功能的第三方recovery（例如TWRP、OrangeFox等，详细请参考“[[刷入第三方Recovery]]”）&lt;br /&gt;
&lt;br /&gt;
4、一条可以正常使用的数据线&lt;br /&gt;
&lt;br /&gt;
5、灵巧的双手、灵活的脑子&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''注：因使用米系手机进行教程编写，所以以下操作均为米系手机操作，其他机型请自行类比'''&amp;lt;/u&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== '''开始刷机：''' ====&lt;br /&gt;
&lt;br /&gt;
==== '''第一步：进入recovery''' ====&lt;br /&gt;
&lt;br /&gt;
===== （1）twrp进入方式 =====&lt;br /&gt;
&lt;br /&gt;
====== 方法一：手动进入 ======&lt;br /&gt;
手机关机，同时按下'''电源键和音量+键'''进入recovery模式（以TWRP为例）&lt;br /&gt;
&lt;br /&gt;
然后点击'''高级'''&lt;br /&gt;
&lt;br /&gt;
点击'''ADB Sideload'''&lt;br /&gt;
&lt;br /&gt;
滑动下方'''滑块'''开始ADB Sideload&lt;br /&gt;
&lt;br /&gt;
====== 方法二：使用工具箱进入 ======&lt;br /&gt;
将设备开启USB后连接电脑，在工具箱首页中点击重启到Sideload模式即可。&lt;br /&gt;
[[文件:工具箱首页.png|居中|缩略图|597x597像素]][[文件:AOSP RECOVERY MODE FIRST SCREEN EXAMPLE.jpg|缩略图|Recovery界面]]&lt;br /&gt;
===== （2）AOSP Recovery进入方式 =====&lt;br /&gt;
首先，请进入recovery模式。recovery界面一般如右图，颜色可能不一样但是首页选项基本一致：&lt;br /&gt;
&lt;br /&gt;
现在，点击Apply update, 再点击Apply from adb，你便进入了sideload模式。&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;
然后转到电脑在adb中执行命令，&amp;lt;code&amp;gt;sideload&amp;lt;/code&amp;gt;后面是你的要刷入的ROM文件&lt;br /&gt;
&lt;br /&gt;
  adb sideload G:\fastboot\e-0.7-o-2019111430687-dev-polaris.zip # 刷入路径为G:\fastboot\e-0.7-o-2019111430687-dev-polaris.zip的包&lt;br /&gt;
&lt;br /&gt;
请注意辨别刷入成功标志。adb sideload输出的百分比并不准确。以下给出了几个刷入成功的示例（多数时候还是要凭感觉）：&lt;br /&gt;
&lt;br /&gt;
* 手机上出现Step 1/2和Step 2/2,并没有任何报错&lt;br /&gt;
* 电脑上百分比到47停止不动，手机几分钟后给出上面一条的输出&lt;br /&gt;
* 重启可以开机&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== 方法二：使用柚坛工具箱刷入 ======&lt;br /&gt;
在柚坛工具箱的线刷页面，更多线刷中的ADB Sideload选择需要刷入的ROM，随后点击开始刷入即可。&lt;br /&gt;
[[文件:线刷.png|居中|缩略图|613x613像素]]&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Super_Empty&amp;diff=773</id>
		<title>Super Empty</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Super_Empty&amp;diff=773"/>
		<updated>2024-08-15T14:31:30Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Super empty =&lt;br /&gt;
&lt;br /&gt;
== 简介 ==&lt;br /&gt;
它是任何动态分区设备在系统构建时可选的产物。它一个定义了动态分区信息的空镜像。它的主要作用是为设备提供一个初始的分区表。&lt;br /&gt;
&lt;br /&gt;
对原生动态分区来说&lt;br /&gt;
&lt;br /&gt;
它自身包含了对逻辑分区的映射信息及逻辑分区大小。可以用于清除或更新super分区，比如后期重新分区逻辑分区大小。&lt;br /&gt;
&lt;br /&gt;
对改造动态分区来说&lt;br /&gt;
&lt;br /&gt;
它定义了维护者定义的设备自身分区和分区大小，将它们合并成一个大的“super”供刷入第三方ROM使用，甚至可以让老旧设备运行DSU。并且针对这类设备它的意义远不止类原生，对PT(Project Treble)也有帮助，有经验的维护者可以通过改造动态分区的方式让用户无需扩容即可体验深度定制UI。&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
=== 原生动态分区 ===&lt;br /&gt;
 fastboot wipe-super super_empty.img的路径&lt;br /&gt;
&lt;br /&gt;
=== 改造动态分区 ===&lt;br /&gt;
==== 类原生 ====&lt;br /&gt;
1.刷入维护者提供的recovery.img，在rec和boot合并的机器上也可以是boot.img&lt;br /&gt;
&lt;br /&gt;
2.使用命令进入fastbootd：&lt;br /&gt;
 fastboot reboot fastboot&lt;br /&gt;
3.准备最新版本的adb-fastboot工具包和维护者提供的super_empty.img&lt;br /&gt;
&lt;br /&gt;
4.打开命令行进入工具包目录，使用上一节原生动态分区的方法执行命令。如果设备是ab分区，则您应该切换到另外一个槽位再执行一次。&lt;br /&gt;
&lt;br /&gt;
5.重新进入recovery，格式化data分区。&lt;br /&gt;
&lt;br /&gt;
6.连接电脑，使用[[ADB SideLoad|adb sideload]]刷入。&lt;br /&gt;
&lt;br /&gt;
==== GSI ====&lt;br /&gt;
改造动态分区之后，使用Aosp recovery或TWRP的fastbootd，刷入system分区，即可不需扩容也能使用上超过system物理空间大小的镜像。&lt;br /&gt;
&lt;br /&gt;
== 对开发者的一些帮助 ==&lt;br /&gt;
[https://github.com/uwu-gl/device_oneplus_sdm845-common/commit/2e2b515df62421024695c08240074df678dbb4c9 改造动态分区的示例commit]&lt;br /&gt;
&lt;br /&gt;
如果分区大小还是不够，您可以考虑切换到erofs或squashfs等等压缩文件系统。必须在内核中有文件系统相关支持且fstab中正确指定挂载参数。&lt;br /&gt;
&lt;br /&gt;
对于在Mac上正常刷写super_empty在win或linux下不能正常刷写的情况，请检查device tree内定义的数值是否100%匹配。&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Super_Empty&amp;diff=772</id>
		<title>Super Empty</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Super_Empty&amp;diff=772"/>
		<updated>2024-08-15T14:31:12Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​super_empty: 重写使用方法&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Super empty =&lt;br /&gt;
&lt;br /&gt;
== 简介 ==&lt;br /&gt;
它是任何动态分区设备在系统构建时可选的产物。它一个定义了动态分区信息的空镜像。它的主要作用是为设备提供一个初始的分区表。&lt;br /&gt;
&lt;br /&gt;
对原生动态分区来说&lt;br /&gt;
&lt;br /&gt;
它自身包含了对逻辑分区的映射信息及逻辑分区大小。可以用于清除或更新super分区，比如后期重新分区逻辑分区大小。&lt;br /&gt;
&lt;br /&gt;
对改造动态分区来说&lt;br /&gt;
&lt;br /&gt;
它定义了维护者定义的设备自身分区和分区大小，将它们合并成一个大的“super”供刷入第三方ROM使用，甚至可以让老旧设备运行DSU。并且针对这类设备它的意义远不止类原生，对PT(Project Treble)也有帮助，有经验的维护者可以通过改造动态分区的方式让用户无需扩容即可体验深度定制UI。&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
=== 原生动态分区 ===&lt;br /&gt;
 fastboot wipe-super super_empty.img的路径&lt;br /&gt;
&lt;br /&gt;
=== 改造动态分区 ===&lt;br /&gt;
==== 类原生 ====&lt;br /&gt;
1.刷入维护者提供的recovery.img，在rec和boot合并的机器上也可以是boot.img&lt;br /&gt;
&lt;br /&gt;
2.使用命令进入fastbootd：&lt;br /&gt;
 fastboot reboot fastboot&lt;br /&gt;
3.准备最新版本的adb-fastboot工具包和维护者提供的super_empty.img&lt;br /&gt;
&lt;br /&gt;
4.打开命令行进入工具包目录，使用上一节原生动态分区的方法执行命令。如果设备是ab分区，则您应该切换到另外一个槽位再执行一次。&lt;br /&gt;
&lt;br /&gt;
7.重新进入recovery，格式化data分区。&lt;br /&gt;
&lt;br /&gt;
8.连接电脑，使用[[ADB SideLoad|adb sideload]]刷入。&lt;br /&gt;
&lt;br /&gt;
==== GSI ====&lt;br /&gt;
改造动态分区之后，使用Aosp recovery或TWRP的fastbootd，刷入system分区，即可不需扩容也能使用上超过system物理空间大小的镜像。&lt;br /&gt;
&lt;br /&gt;
== 对开发者的一些帮助 ==&lt;br /&gt;
[https://github.com/uwu-gl/device_oneplus_sdm845-common/commit/2e2b515df62421024695c08240074df678dbb4c9 改造动态分区的示例commit]&lt;br /&gt;
&lt;br /&gt;
如果分区大小还是不够，您可以考虑切换到erofs或squashfs等等压缩文件系统。必须在内核中有文件系统相关支持且fstab中正确指定挂载参数。&lt;br /&gt;
&lt;br /&gt;
对于在Mac上正常刷写super_empty在win或linux下不能正常刷写的情况，请检查device tree内定义的数值是否100%匹配。&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Fastbootd&amp;diff=771</id>
		<title>Fastbootd</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Fastbootd&amp;diff=771"/>
		<updated>2024-08-15T14:13:05Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​fastbootd: 添加示例截图 2/2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== 提示：本教程不是指引导加载程序。 ====&lt;br /&gt;
&lt;br /&gt;
== 关于fastbootd ==&lt;br /&gt;
&lt;br /&gt;
==== （1）简介 ====&lt;br /&gt;
&lt;br /&gt;
====  Fastbootd，即用户空间fastboot，是在Android 10开始使用的功能更为强大的刷机模式。 ====&lt;br /&gt;
您可以简单理解为fastbootd就是fastboot的升级版。&lt;br /&gt;
&lt;br /&gt;
一般来说fastbootd会整合进recovery。在类原生上，从recovery进入fastbootd方法一般是Advanced -&amp;gt; Enter fastboot。&lt;br /&gt;
&lt;br /&gt;
fastbootd支持对动态分区进行调整和刷写。具体请看下文。&lt;br /&gt;
&lt;br /&gt;
本文不会重复介绍 Fastboot 命令 一章里的命令。如有必要请前往 [[Fastboot 命令]] 页面。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
（2）示例&lt;br /&gt;
&lt;br /&gt;
AOSP recovery: 如第一张图&lt;br /&gt;
[[文件:AOSP RECOVERY FIRST SCREEN EXAMPLE.jpg|缩略图|aosp rec]]&lt;br /&gt;
Twrp的进入：如第二张图&lt;br /&gt;
[[文件:Screenshot 20240815-213505.png|缩略图|这是twrp的重启界面。点击fastbootd的那一项即可进入fastbootd]]&lt;br /&gt;
部分小米设备：如第三张图&lt;br /&gt;
[[文件:Screenshot 20240815-213658.png|缩略图|小米设备的fastbootd。没有兔兔修机器人也行]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 注意：fastbootd要求最新adb-fastboot工具包，请自行去Google官网下载最新版！ ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 命令及详细介绍 ==&lt;br /&gt;
&lt;br /&gt;
===== 通用： =====&lt;br /&gt;
&lt;br /&gt;
* 进入fastbootd&lt;br /&gt;
 adb reboot fastboot # 开机状态&lt;br /&gt;
 fastboot reboot fastboot # 引导加载器状态&lt;br /&gt;
* 检查当前状态是否为fastbootd&lt;br /&gt;
 fastboot getvar is-userspace # 如果是，则返回yes；如果不是，则返回no&lt;br /&gt;
同理，您可以把&amp;lt;code&amp;gt;is-userspace&amp;lt;/code&amp;gt;替换为您需要的变量名进行获取。&lt;br /&gt;
&lt;br /&gt;
===== 动态分区专属： =====&lt;br /&gt;
* 清空/重新改造动态分区&lt;br /&gt;
 fastboot wipe-super path-to-super_empty.img # 使用&amp;lt;code&amp;gt;path-to-super_empty.img&amp;lt;/code&amp;gt;来清空动态分区内容并重新改造。在引导加载器也可以执行但是可能会出现玄学问题。&lt;br /&gt;
* 逻辑分区相关&lt;br /&gt;
 fastboot getvar is-logical:partition_name # 检查名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的分区是否是逻辑分区.&lt;br /&gt;
 fastboot delete-logical-partition partition_name # 删除名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的逻辑分区。&lt;br /&gt;
 fastboot create-logical-partition partition_name 1145141919810 # 新建一个名称为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;，大小为&amp;lt;code&amp;gt;1145141919810 Byte&amp;lt;/code&amp;gt;的逻辑分区。&lt;br /&gt;
 fastboot resize-logical-partition partition_name 1145141919810 # 将名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的大小修改为&amp;lt;code&amp;gt;1145141919810 Byte&amp;lt;/code&amp;gt;. 现有可用空间必须大于等于你所修改的分区大小.&lt;br /&gt;
* （危险！）在引导加载器模式下刷写动态分区内的分区&lt;br /&gt;
 fastboot --force flash partition_name path-to-image.img # 强制刷写分区。&lt;br /&gt;
&lt;br /&gt;
== 在设备rom里添加fastbootd（如果不存在） ==&lt;br /&gt;
请参考此处提交：https://github.com/PixelExperience-Devices/device_xiaomi_sdm845-common/commit/dcc9496eb18af9522fedf6ce0a8031d1fa2880e0&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Super_Empty&amp;diff=770</id>
		<title>Super Empty</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Super_Empty&amp;diff=770"/>
		<updated>2024-08-15T13:49:55Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​super_empty: 略微修改改造动态分区&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Super empty =&lt;br /&gt;
&lt;br /&gt;
== 简介 ==&lt;br /&gt;
它是任何动态分区设备在系统构建时可选的产物。它一个定义了动态分区信息的空镜像。它的主要作用是为设备提供一个初始的分区表。&lt;br /&gt;
&lt;br /&gt;
对原生动态分区来说&lt;br /&gt;
&lt;br /&gt;
它自身包含了对逻辑分区的映射信息及逻辑分区大小。可以用于清除或更新super分区，比如后期重新分区逻辑分区大小。&lt;br /&gt;
&lt;br /&gt;
对改造动态分区来说&lt;br /&gt;
&lt;br /&gt;
它定义了维护者定义的设备自身分区和分区大小，将它们合并成一个大的“super”供刷入第三方ROM使用，甚至可以让老旧设备运行DSU。并且针对这类设备它的意义远不止类原生，对PT(Project Treble)也有帮助，有经验的维护者可以通过改造动态分区的方式让用户无需扩容即可体验深度定制UI。&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
=== 原生动态分区 ===&lt;br /&gt;
 fastboot wipe-super super_empty.img的绝对路径&lt;br /&gt;
&lt;br /&gt;
=== 改造动态分区 ===&lt;br /&gt;
==== 类原生 ====&lt;br /&gt;
以我个人维护的小米6X(wayne)为例&lt;br /&gt;
&lt;br /&gt;
1.设备重启至fastboot&lt;br /&gt;
&lt;br /&gt;
2.连接电脑&lt;br /&gt;
&lt;br /&gt;
3.准备最新版本的adb工具包和维护者提供的super_empty.img和ROM包&lt;br /&gt;
&lt;br /&gt;
4.打开命令行进入工具包目录，输入fastboot wipe-super super_empty.img的绝对路径&lt;br /&gt;
&lt;br /&gt;
5.刷写完毕后继续刷入维护者提供的Recovery&lt;br /&gt;
 fastboot flash recovery recovery.img的绝对路径&lt;br /&gt;
&lt;br /&gt;
6.重启设备至recovery&lt;br /&gt;
&lt;br /&gt;
7.选择格式化data(format data)&lt;br /&gt;
&lt;br /&gt;
8.连接电脑，使用adb sideload刷入ROM，adb sideload ROM包绝对路径或相对路径&lt;br /&gt;
&lt;br /&gt;
==== GSI ====&lt;br /&gt;
改造动态分区之后，使用Aosp recovery或TWRP的fastbootd，刷入system分区，即可不需扩容也能使用上超过system物理空间大小的镜像。&lt;br /&gt;
&lt;br /&gt;
== 对开发者的一些帮助 ==&lt;br /&gt;
[https://github.com/uwu-gl/device_oneplus_sdm845-common/commit/2e2b515df62421024695c08240074df678dbb4c9 改造动态分区的示例commit]&lt;br /&gt;
&lt;br /&gt;
如果分区大小还是不够，您可以考虑切换到erofs或squashfs等等压缩文件系统。必须在内核中有文件系统相关支持且fstab中正确指定挂载参数。&lt;br /&gt;
&lt;br /&gt;
对于在Mac上正常刷写super_empty在win或linux下不能正常刷写的情况，请检查device tree内定义的数值是否100%匹配。&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Super_Empty&amp;diff=769</id>
		<title>Super Empty</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Super_Empty&amp;diff=769"/>
		<updated>2024-08-15T13:48:27Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​super_empty: 略微对上一次的修改进行排版&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Super empty =&lt;br /&gt;
&lt;br /&gt;
== 简介 ==&lt;br /&gt;
它是任何动态分区设备在系统构建时可选的产物。它一个定义了动态分区信息的空镜像。它的主要作用是为设备提供一个初始的分区表。&lt;br /&gt;
&lt;br /&gt;
对原生动态分区来说&lt;br /&gt;
&lt;br /&gt;
它自身包含了对逻辑分区的映射信息及逻辑分区大小。可以用于清除或更新super分区，比如后期重新分区逻辑分区大小。&lt;br /&gt;
&lt;br /&gt;
对改造动态分区来说&lt;br /&gt;
&lt;br /&gt;
它定义了维护者定义的设备自身分区和分区大小，将它们合并成一个大的“super”供刷入第三方ROM使用，甚至可以让老旧设备运行DSU。并且针对这类设备它的意义远不止类原生，对PT(Project Treble)也有帮助，有经验的维护者可以通过改造动态分区的方式让用户无需扩容即可体验深度定制UI。&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
=== 原生动态分区 ===&lt;br /&gt;
 fastboot wipe-super super_empty.img的绝对路径&lt;br /&gt;
&lt;br /&gt;
=== 改造动态分区 ===&lt;br /&gt;
==== 类原生 ====&lt;br /&gt;
以我个人维护的小米6X(wayne)为例&lt;br /&gt;
&lt;br /&gt;
1.设备重启至fastboot&lt;br /&gt;
&lt;br /&gt;
2.连接电脑&lt;br /&gt;
&lt;br /&gt;
3.准备最新版本的adb工具包和维护者提供的super_empty.img和ROM包&lt;br /&gt;
&lt;br /&gt;
4.打开命令行进入工具包目录，输入fastboot wipe-super super_empty.img的绝对路径&lt;br /&gt;
&lt;br /&gt;
5.刷写完毕后继续刷入维护者提供的Recovery，fastboot flash recovery recovery.img的绝对路径&lt;br /&gt;
&lt;br /&gt;
6.重启设备至recovery&lt;br /&gt;
&lt;br /&gt;
7.选择格式化data(format data)&lt;br /&gt;
&lt;br /&gt;
8.连接电脑，使用adb sideload刷入ROM，adb sideload ROM包绝对路径&lt;br /&gt;
&lt;br /&gt;
==== GSI ====&lt;br /&gt;
改造动态分区之后，使用Aosp recovery或TWRP的fastbootd，刷入system分区，即可不需扩容也能使用上超过system物理空间大小的镜像。&lt;br /&gt;
&lt;br /&gt;
== 对开发者的一些帮助 ==&lt;br /&gt;
[https://github.com/uwu-gl/device_oneplus_sdm845-common/commit/2e2b515df62421024695c08240074df678dbb4c9 改造动态分区的示例commit]&lt;br /&gt;
&lt;br /&gt;
如果分区大小还是不够，您可以考虑切换到erofs或squashfs等等压缩文件系统。必须在内核中有文件系统相关支持且fstab中正确指定挂载参数。&lt;br /&gt;
&lt;br /&gt;
对于在Mac上正常刷写super_empty在win或linux下不能正常刷写的情况，请检查device tree内定义的数值是否100%匹配。&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Super_Empty&amp;diff=768</id>
		<title>Super Empty</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Super_Empty&amp;diff=768"/>
		<updated>2024-08-15T13:47:50Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​super_empty: 提示erofs等压缩文件分区系统&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Super empty =&lt;br /&gt;
&lt;br /&gt;
== 简介 ==&lt;br /&gt;
它是任何动态分区设备在系统构建时可选的产物。它一个定义了动态分区信息的空镜像。它的主要作用是为设备提供一个初始的分区表。&lt;br /&gt;
&lt;br /&gt;
对原生动态分区来说&lt;br /&gt;
&lt;br /&gt;
它自身包含了对逻辑分区的映射信息及逻辑分区大小。可以用于清除或更新super分区，比如后期重新分区逻辑分区大小。&lt;br /&gt;
&lt;br /&gt;
对改造动态分区来说&lt;br /&gt;
&lt;br /&gt;
它定义了维护者定义的设备自身分区和分区大小，将它们合并成一个大的“super”供刷入第三方ROM使用，甚至可以让老旧设备运行DSU。并且针对这类设备它的意义远不止类原生，对PT(Project Treble)也有帮助，有经验的维护者可以通过改造动态分区的方式让用户无需扩容即可体验深度定制UI。&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
=== 原生动态分区 ===&lt;br /&gt;
 fastboot wipe-super super_empty.img的绝对路径&lt;br /&gt;
&lt;br /&gt;
=== 改造动态分区 ===&lt;br /&gt;
==== 类原生 ====&lt;br /&gt;
以我个人维护的小米6X(wayne)为例&lt;br /&gt;
&lt;br /&gt;
1.设备重启至fastboot&lt;br /&gt;
&lt;br /&gt;
2.连接电脑&lt;br /&gt;
&lt;br /&gt;
3.准备最新版本的adb工具包和维护者提供的super_empty.img和ROM包&lt;br /&gt;
&lt;br /&gt;
4.打开命令行进入工具包目录，输入fastboot wipe-super super_empty.img的绝对路径&lt;br /&gt;
&lt;br /&gt;
5.刷写完毕后继续刷入维护者提供的Recovery，fastboot flash recovery recovery.img的绝对路径&lt;br /&gt;
&lt;br /&gt;
6.重启设备至recovery&lt;br /&gt;
&lt;br /&gt;
7.选择格式化data(format data)&lt;br /&gt;
&lt;br /&gt;
8.连接电脑，使用adb sideload刷入ROM，adb sideload ROM包绝对路径&lt;br /&gt;
&lt;br /&gt;
==== GSI ====&lt;br /&gt;
改造动态分区之后，使用Aosp recovery或TWRP的fastbootd，刷入system分区，即可不需扩容也能使用上超过system物理空间大小的镜像。&lt;br /&gt;
&lt;br /&gt;
== 对开发者的一些帮助 ==&lt;br /&gt;
[https://github.com/uwu-gl/device_oneplus_sdm845-common/commit/2e2b515df62421024695c08240074df678dbb4c9 改造动态分区的示例commit]&lt;br /&gt;
如果分区大小还是不够，您可以考虑切换到erofs或squashfs等等压缩文件系统。必须在内核中有文件系统相关支持且fstab中正确指定挂载参数。&lt;br /&gt;
&lt;br /&gt;
对于在Mac上正常刷写super_empty在win或linux下不能正常刷写的情况，请检查device tree内定义的数值是否100%匹配。&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Super_Empty&amp;diff=767</id>
		<title>Super Empty</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Super_Empty&amp;diff=767"/>
		<updated>2024-08-15T13:45:30Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​super_empty: QwQ&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Super empty =&lt;br /&gt;
&lt;br /&gt;
== 简介 ==&lt;br /&gt;
它是任何动态分区设备在系统构建时可选的产物。它一个定义了动态分区信息的空镜像。它的主要作用是为设备提供一个初始的分区表。&lt;br /&gt;
&lt;br /&gt;
对原生动态分区来说&lt;br /&gt;
&lt;br /&gt;
它自身包含了对逻辑分区的映射信息及逻辑分区大小。可以用于清除或更新super分区，比如后期重新分区逻辑分区大小。&lt;br /&gt;
&lt;br /&gt;
对改造动态分区来说&lt;br /&gt;
&lt;br /&gt;
它定义了维护者定义的设备自身分区和分区大小，将它们合并成一个大的“super”供刷入第三方ROM使用，甚至可以让老旧设备运行DSU。并且针对这类设备它的意义远不止类原生，对PT(Project Treble)也有帮助，有经验的维护者可以通过改造动态分区的方式让用户无需扩容即可体验深度定制UI。&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
=== 原生动态分区 ===&lt;br /&gt;
 fastboot wipe-super super_empty.img的绝对路径&lt;br /&gt;
&lt;br /&gt;
=== 改造动态分区 ===&lt;br /&gt;
==== 类原生 ====&lt;br /&gt;
以我个人维护的小米6X(wayne)为例&lt;br /&gt;
&lt;br /&gt;
1.设备重启至fastboot&lt;br /&gt;
&lt;br /&gt;
2.连接电脑&lt;br /&gt;
&lt;br /&gt;
3.准备最新版本的adb工具包和维护者提供的super_empty.img和ROM包&lt;br /&gt;
&lt;br /&gt;
4.打开命令行进入工具包目录，输入fastboot wipe-super super_empty.img的绝对路径&lt;br /&gt;
&lt;br /&gt;
5.刷写完毕后继续刷入维护者提供的Recovery，fastboot flash recovery recovery.img的绝对路径&lt;br /&gt;
&lt;br /&gt;
6.重启设备至recovery&lt;br /&gt;
&lt;br /&gt;
7.选择格式化data(format data)&lt;br /&gt;
&lt;br /&gt;
8.连接电脑，使用adb sideload刷入ROM，adb sideload ROM包绝对路径&lt;br /&gt;
&lt;br /&gt;
==== GSI ====&lt;br /&gt;
改造动态分区之后，使用Aosp recovery或TWRP的fastbootd，刷入system分区，即可不需扩容也能使用上超过system物理空间大小的镜像。&lt;br /&gt;
&lt;br /&gt;
== 对开发者的一些帮助 ==&lt;br /&gt;
[https://github.com/uwu-gl/device_oneplus_sdm845-common/commit/2e2b515df62421024695c08240074df678dbb4c9 改造动态分区的示例commit]&lt;br /&gt;
&lt;br /&gt;
对于在Mac上正常刷写super_empty在win或linux下不能正常刷写的情况，请检查device tree内定义的数值是否100%匹配。&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Fastbootd&amp;diff=766</id>
		<title>Fastbootd</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Fastbootd&amp;diff=766"/>
		<updated>2024-08-15T13:38:31Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​fastbootd: 添加示例截图&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== 提示：本教程不是指引导加载程序。 ====&lt;br /&gt;
&lt;br /&gt;
== 关于fastbootd ==&lt;br /&gt;
&lt;br /&gt;
==== （1）简介 ====&lt;br /&gt;
&lt;br /&gt;
====  Fastbootd，即用户空间fastboot，是在Android 10开始使用的功能更为强大的刷机模式。 ====&lt;br /&gt;
您可以简单理解为fastbootd就是fastboot的升级版。&lt;br /&gt;
&lt;br /&gt;
一般来说fastbootd会整合进recovery。在类原生上，从recovery进入fastbootd方法一般是Advanced -&amp;gt; Enter fastboot。&lt;br /&gt;
&lt;br /&gt;
fastbootd支持对动态分区进行调整和刷写。具体请看下文。&lt;br /&gt;
&lt;br /&gt;
本文不会重复介绍 Fastboot 命令 一章里的命令。如有必要请前往 [[Fastboot 命令]] 页面。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
（2）示例&lt;br /&gt;
&lt;br /&gt;
AOSP recovery:&lt;br /&gt;
[[文件:AOSP RECOVERY FIRST SCREEN EXAMPLE.jpg|缩略图|aosp rec]]&lt;br /&gt;
Twrp的进入：&lt;br /&gt;
[[文件:Screenshot 20240815-213505.png|缩略图|这是twrp的重启界面。点击fastbootd的那一项即可进入fastbootd]]&lt;br /&gt;
部分小米设备：&lt;br /&gt;
[[文件:Screenshot 20240815-213658.png|缩略图|小米设备的fastbootd。没有兔兔修机器人也行]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 注意：fastbootd要求最新adb-fastboot工具包，请自行去Google官网下载最新版！ ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 命令及详细介绍 ==&lt;br /&gt;
&lt;br /&gt;
===== 通用： =====&lt;br /&gt;
&lt;br /&gt;
* 进入fastbootd&lt;br /&gt;
 adb reboot fastboot # 开机状态&lt;br /&gt;
 fastboot reboot fastboot # 引导加载器状态&lt;br /&gt;
* 检查当前状态是否为fastbootd&lt;br /&gt;
 fastboot getvar is-userspace # 如果是，则返回yes；如果不是，则返回no&lt;br /&gt;
同理，您可以把&amp;lt;code&amp;gt;is-userspace&amp;lt;/code&amp;gt;替换为您需要的变量名进行获取。&lt;br /&gt;
&lt;br /&gt;
===== 动态分区专属： =====&lt;br /&gt;
* 清空/重新改造动态分区&lt;br /&gt;
 fastboot wipe-super path-to-super_empty.img # 使用&amp;lt;code&amp;gt;path-to-super_empty.img&amp;lt;/code&amp;gt;来清空动态分区内容并重新改造。在引导加载器也可以执行但是可能会出现玄学问题。&lt;br /&gt;
* 逻辑分区相关&lt;br /&gt;
 fastboot getvar is-logical:partition_name # 检查名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的分区是否是逻辑分区.&lt;br /&gt;
 fastboot delete-logical-partition partition_name # 删除名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的逻辑分区。&lt;br /&gt;
 fastboot create-logical-partition partition_name 1145141919810 # 新建一个名称为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;，大小为&amp;lt;code&amp;gt;1145141919810 Byte&amp;lt;/code&amp;gt;的逻辑分区。&lt;br /&gt;
 fastboot resize-logical-partition partition_name 1145141919810 # 将名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的大小修改为&amp;lt;code&amp;gt;1145141919810 Byte&amp;lt;/code&amp;gt;. 现有可用空间必须大于等于你所修改的分区大小.&lt;br /&gt;
* （危险！）在引导加载器模式下刷写动态分区内的分区&lt;br /&gt;
 fastboot --force flash partition_name path-to-image.img # 强制刷写分区。&lt;br /&gt;
&lt;br /&gt;
== 在设备rom里添加fastbootd（如果不存在） ==&lt;br /&gt;
请参考此处提交：https://github.com/PixelExperience-Devices/device_xiaomi_sdm845-common/commit/dcc9496eb18af9522fedf6ce0a8031d1fa2880e0&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E6%96%87%E4%BB%B6:Screenshot_20240815-213658.png&amp;diff=765</id>
		<title>文件:Screenshot 20240815-213658.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E6%96%87%E4%BB%B6:Screenshot_20240815-213658.png&amp;diff=765"/>
		<updated>2024-08-15T13:37:40Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Xiaomi device fastbootd screen&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E6%96%87%E4%BB%B6:Screenshot_20240815-213505.png&amp;diff=764</id>
		<title>文件:Screenshot 20240815-213505.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E6%96%87%E4%BB%B6:Screenshot_20240815-213505.png&amp;diff=764"/>
		<updated>2024-08-15T13:36:01Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Enter fastbootd in twrp reboot splash&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=ADB_SideLoad&amp;diff=763</id>
		<title>ADB SideLoad</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=ADB_SideLoad&amp;diff=763"/>
		<updated>2024-08-15T13:21:19Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​Sideload mode: Add aosp recovery&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== '''什么是ADB Sideload？''' ===&lt;br /&gt;
'''ADB Sideload'''是一种卡刷的方式，使用'''ADB Sideload'''刷机能够解决很多刷机过程中碰到的一些问题，'''ADB Sideload'''刷机原理是使用数据线连接电脑，然后将卡刷包推送到手机里，使用第三方recovery进行刷机，归根结底'''ADB Sideload'''刷机还是属于“卡刷”方式，手机刷机失败无法开机又不支持外置sd卡（特别是新出的机型，是没有sd卡槽的）的情况下使用'''ADB Sideload'''刷机是最简单可行的方法。&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== '''ADB Sideload刷机教程''' ===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== '''前期准备''' ====&lt;br /&gt;
1、电脑安装好了相应的ADB驱动（安装请参考“[[ADB与Fastboot驱动]]”）&lt;br /&gt;
&lt;br /&gt;
2、相应机型的卡刷包（格式为zip）&lt;br /&gt;
&lt;br /&gt;
3、确保手机已经解锁了bl（解锁请参考“[[解锁Bootloader]] ”），并且手机已经刷入了支持ADB Sideload功能的第三方recovery（例如TWRP、OrangeFox等，详细请参考“[[刷入第三方Recovery]]”）&lt;br /&gt;
&lt;br /&gt;
4、一条可以正常使用的数据线&lt;br /&gt;
&lt;br /&gt;
5、灵巧的双手、灵活的脑子&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''注：因使用米系手机进行教程编写，所以以下操作均为米系手机操作，其他机型请自行类比'''&amp;lt;/u&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== '''开始刷机：''' ====&lt;br /&gt;
&lt;br /&gt;
==== '''第一步：进入recovery''' ====&lt;br /&gt;
&lt;br /&gt;
===== （1）twrp进入方式 =====&lt;br /&gt;
&lt;br /&gt;
====== 方法一：手动进入 ======&lt;br /&gt;
手机关机，同时按下'''电源键和音量+键'''进入recovery模式（以TWRP为例）&lt;br /&gt;
&lt;br /&gt;
然后点击'''高级'''&lt;br /&gt;
&lt;br /&gt;
点击'''ADB Sideload'''&lt;br /&gt;
&lt;br /&gt;
滑动下方'''滑块'''开始ADB Sideload&lt;br /&gt;
&lt;br /&gt;
====== 方法二：使用工具箱进入 ======&lt;br /&gt;
将设备开启USB后连接电脑，在工具箱首页中点击重启到Sideload模式即可。&lt;br /&gt;
[[文件:工具箱首页.png|居中|缩略图|597x597像素]]&lt;br /&gt;
&lt;br /&gt;
===== （2）AOSP Recovery进入方式 =====&lt;br /&gt;
首先，请进入recovery模式。recovery界面一般长这样，颜色可能不一样但是首页选项基本一致：&lt;br /&gt;
[[文件:AOSP RECOVERY MODE FIRST SCREEN EXAMPLE.jpg|缩略图|Recovery界面]]&lt;br /&gt;
现在，点击Apply update, 再点击Apply from adb，你便进入了sideload模式。&lt;br /&gt;
&lt;br /&gt;
==== '''第二步：刷入刷机包''' ====&lt;br /&gt;
&lt;br /&gt;
====== 方法一：使用命令刷入 ======&lt;br /&gt;
然后转到电脑在adb中执行命令，&amp;lt;code&amp;gt;sideload&amp;lt;/code&amp;gt;后面是你的要刷入的ROM文件&lt;br /&gt;
&lt;br /&gt;
  adb sideload G:\fastboot\e-0.7-o-2019111430687-dev-polaris.zip # 刷入路径为G:\fastboot\e-0.7-o-2019111430687-dev-polaris.zip的包&lt;br /&gt;
&lt;br /&gt;
当出现Total 即刷入成功 然后拔掉数据线 操作手机按提示重启即可进入 。只要ROM没问题 一般情况都可以正常进入系统。不同手机可能有不同的提示，例如有些包会卡在40%就显示成功了，但确确实实是刷进去了，所以要看情况。&lt;br /&gt;
&lt;br /&gt;
====== 方法二：使用柚坛工具箱刷入 ======&lt;br /&gt;
在柚坛工具箱的线刷页面，更多线刷中的ADB Sideload选择需要刷入的ROM，随后点击开始刷入即可。&lt;br /&gt;
[[文件:线刷.png|居中|缩略图|613x613像素]]&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E6%96%87%E4%BB%B6:AOSP_RECOVERY_MODE_FIRST_SCREEN_EXAMPLE.jpg&amp;diff=762</id>
		<title>文件:AOSP RECOVERY MODE FIRST SCREEN EXAMPLE.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E6%96%87%E4%BB%B6:AOSP_RECOVERY_MODE_FIRST_SCREEN_EXAMPLE.jpg&amp;diff=762"/>
		<updated>2024-08-15T13:19:11Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The other one is fastbootd. Sorry! Meow..&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E6%96%87%E4%BB%B6:AOSP_RECOVERY_FIRST_SCREEN_EXAMPLE.jpg&amp;diff=761</id>
		<title>文件:AOSP RECOVERY FIRST SCREEN EXAMPLE.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E6%96%87%E4%BB%B6:AOSP_RECOVERY_FIRST_SCREEN_EXAMPLE.jpg&amp;diff=761"/>
		<updated>2024-08-15T13:17:53Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;..&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=KSU_%E6%A8%A1%E5%9D%97&amp;diff=732</id>
		<title>KSU 模块</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=KSU_%E6%A8%A1%E5%9D%97&amp;diff=732"/>
		<updated>2024-08-15T07:14:30Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​KernelSU module: 初始化更改&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;====== KernelSU作为一种全新的Root方式，不仅有magisk的大部分旧特性，同时也有一些新特性，例如： ======&lt;br /&gt;
&lt;br /&gt;
* WebUI&lt;br /&gt;
* 使用&amp;lt;code&amp;gt;OverlayFS&amp;lt;/code&amp;gt;来达到systemless修改&amp;lt;code&amp;gt;/system&amp;lt;/code&amp;gt;&lt;br /&gt;
* KernelSU 新增了一种脚本 &amp;lt;code&amp;gt;boot-completed.sh&amp;lt;/code&amp;gt;，以便在 Android 系统启动后运行某些任务。&lt;br /&gt;
* KernelSU 新增了一种脚本 &amp;lt;code&amp;gt;post-mount.sh&amp;lt;/code&amp;gt;，以便在 Overlayfs 挂载后运行某些任务。&lt;br /&gt;
&lt;br /&gt;
====== 另外也请注意：KernelSU不支持以下Magisk特性： ======&lt;br /&gt;
&lt;br /&gt;
* 模块不支持在Recovery模式下刷入。&lt;br /&gt;
* 不自带Zygisk（但是可以通过ZygiskNext来实现）&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Android%E5%86%85%E6%A0%B8%E7%BC%96%E8%AF%91%E5%85%A5%E9%97%A8&amp;diff=704</id>
		<title>Android内核编译入门</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Android%E5%86%85%E6%A0%B8%E7%BC%96%E8%AF%91%E5%85%A5%E9%97%A8&amp;diff=704"/>
		<updated>2024-08-14T15:37:23Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​/* Android 内核简介 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Android 内核简介 ===&lt;br /&gt;
安卓内核用的也是linux（LTS），google把LTS内核和Android的一些补丁、模块结合形成自己的Android通用内核（Android common kernel，ACK）。也就是GKI, Generic Kernel Image。如果你的手机是量产机（Google除外），还会被cpu厂商例如高通，联发科再次开发，下放到手机厂商还会有部分修改。&lt;br /&gt;
&lt;br /&gt;
相当于现在变成了一个Image，镜像了。&lt;br /&gt;
&lt;br /&gt;
GKI 内核会与包含系统芯片 (SoC) 和板级代码的硬件专用供应商模块进行交互。GKI 内核与供应商模块之间的交互通过内核模块接口 (KMI) 来实现，该接口由标识供应商模块所需的函数和全局数据的符号列表组成。&lt;br /&gt;
&lt;br /&gt;
=== 配置使用环境 ===&lt;br /&gt;
&lt;br /&gt;
===== 推荐的编译环境 =====&lt;br /&gt;
Ubuntu 20.04 / 22.04&lt;br /&gt;
&lt;br /&gt;
Arch Linux&lt;br /&gt;
&lt;br /&gt;
(因为主播使用的就是这个喵）&lt;br /&gt;
&lt;br /&gt;
考虑到编译环境的稳定性不是很推荐装一些其他的系统&lt;br /&gt;
&lt;br /&gt;
你可以使用 VMware virtual machine 或者 WSL2 （Windows Subsystem on Linux）&lt;br /&gt;
&lt;br /&gt;
目前我更推荐使用 WSL 因为其安装较为方便，并且可以与 Microsoft VScode 协同工作方便你对Git的使用以及对内核源码的修改&lt;br /&gt;
&lt;br /&gt;
（当然 Vmware 也可以，只不过我印象不太好，这货 bug 稍微有点多）&lt;br /&gt;
&lt;br /&gt;
关于这两者方案优劣对比详见百度，此处不赘述。&lt;br /&gt;
&lt;br /&gt;
===== 安装WSL2教程 =====&lt;br /&gt;
需要先启用适用于 Linux 的 Windows 子系统以及虚拟化：&lt;br /&gt;
&lt;br /&gt;
按下键盘&amp;lt;code&amp;gt;win+R&amp;lt;/code&amp;gt;，并输入&amp;lt;code&amp;gt;powershell&amp;lt;/code&amp;gt;回车&lt;br /&gt;
&lt;br /&gt;
在&amp;lt;code&amp;gt;poershell&amp;lt;/code&amp;gt;终端内输入以下内容:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wsl --set --default-version 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
随后打开你的微软应用商店 Microsoft Store&lt;br /&gt;
&lt;br /&gt;
搜索 Ubuntu，选择一个你喜欢的版本安装即可&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== 安装一些必要的工具依赖 =====&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install -y build-essential bc bison python curl git zip ftp gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi libssl-dev lftp wget libfl-dev gcc bc zip make&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;
'''Clang'''&lt;br /&gt;
&lt;br /&gt;
此处推荐两个 &lt;br /&gt;
&lt;br /&gt;
一个是Google官方提供的Clang编译器：[https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/ Google Clang]&lt;br /&gt;
&lt;br /&gt;
一个是由知名大佬kdrag0n 提供的预编译Clang：[https://github.com/kdrag0n/proton-clang Proton Clang]&lt;br /&gt;
&lt;br /&gt;
==== 拉取内核源码 ====&lt;br /&gt;
关于如何找到你的内核源码这件事，大部分内核源码在开源时都会参照以下命名规则命名&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;android_kernel_厂商_平台&amp;lt;/code&amp;gt; 例如 &amp;lt;code&amp;gt;android_kernel_xiaomi_sm8250&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在针对特定机型进行优化或者重构后的源码也会有开发者将其命名为&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;android_kernel_厂商_设备代号（或者机型名称）&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
设备代号请参照这里 ：[[设备代号收录集合]]&lt;br /&gt;
&lt;br /&gt;
我们一般可以在&amp;lt;code&amp;gt;Github&amp;lt;/code&amp;gt;找到这些源码&lt;br /&gt;
&lt;br /&gt;
如果您需要拉取ACK（Android Common Kernel）请前往Google OpenSource&lt;br /&gt;
&lt;br /&gt;
==== 设置环境变量并开始编译 ====&lt;br /&gt;
首先你需要进入你内核源码的目录，你也可以将下列的指令写在脚本里面&amp;lt;pre&amp;gt;&lt;br /&gt;
export CC='放clang的路径/bin/clang'&lt;br /&gt;
export CLANG_TRIPLE=aarch64-linux-gnu-&lt;br /&gt;
export CROSS_COMPILE='aarch64-linux-gnu编译器的路径/bin/aarch64-linux-gnu-'&lt;br /&gt;
export CROSS_COMPILE_ARM32='arm-linux-gnueabi编译器的路径/bin/arm-linux-gnueabi-'&lt;br /&gt;
export ARCH=arm64&lt;br /&gt;
export SUBARCH=arm64&lt;br /&gt;
export KBUILD_BUILD_HOST = &amp;quot;hostname&amp;quot;&lt;br /&gt;
export KBUILD_BUILD_USER = &amp;quot;username&amp;quot;&lt;br /&gt;
make O=out ''device''_defconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
这里需要注意的是，最后的&amp;lt;code&amp;gt;device&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
取决于你编译的设备的代号，查看你设备的代号请见：[[设备代号收录集合]]&lt;br /&gt;
&lt;br /&gt;
而&amp;lt;code&amp;gt;defconfig&amp;lt;/code&amp;gt;则是你设备在内核中的配置文件，一套内核源码可能被多个设备共有。在编译的时候，make通过不同的配置文件来区分这些设备，这些配置文件在arch/[架构]/config下，在make的时候无需指定路径，直接输入配置文件名字即可。&amp;lt;ref&amp;gt;此处引用了 grislux55 在gitbook上的内核编译教程中针对配置文件的介绍，文末贴上了引用资料链接&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
举个简单的例子，内核源码就是一个大超市，&amp;lt;code&amp;gt;defconfig&amp;lt;/code&amp;gt;（'''购物清单'''）则负责告诉&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;，'''你需要购买什么东西（对其进行编译），从而达成对设备驱动的区分'''&lt;br /&gt;
&lt;br /&gt;
=== 获取编译结果并刷入测试 ===&lt;br /&gt;
内核文件在[你的项目/输出路径/arch/目标内核架构/boot]下&lt;br /&gt;
&lt;br /&gt;
例如我们编译了xiaomi_sdm8250的内核，则在android_kernel_xiaomi_sm8250/out/arch/arm64/boot/里面&lt;br /&gt;
&lt;br /&gt;
其名为Image或者Image.gz或者Image.gz-dtb&lt;br /&gt;
&lt;br /&gt;
他们的区别在于&lt;br /&gt;
&lt;br /&gt;
随后你需要刷入测试，以前有一种方法是使用 Android Image Kitchen 来解开boot.img 并将你编译好的dtb替换进去，现在看来这种方法未免太不优雅，因此我们可以使用由osm0sis大佬开发的Anykernel3打包卡刷包文件，并可以在 TWRP REC 或者 Horizen Kernel Flasher内进行刷入附链接：&lt;br /&gt;
&lt;br /&gt;
[https://github.com/osm0sis/AnyKernel3 ①Anykernel3]   ②Horizen Kernel Flasher ③[https://twrp.me/ TWRP rec]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 资料参考： ===&lt;br /&gt;
[1] Gtibook 安卓内核编译教程：https://jebchou.gitbook.io/android-kernel-magic/02begin_compile&lt;br /&gt;
&lt;br /&gt;
[2] CSDN 安卓架构-内核：https://blog.csdn.net/weixin_40557160/article/details/128388849&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</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=703</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=703"/>
		<updated>2024-08-14T15:34:31Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​git: git rebase小修改&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;&lt;br /&gt;
&lt;br /&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;
&lt;br /&gt;
更改默认编辑器&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global core.editor nano&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;
例如我们要克隆&amp;lt;code&amp;gt;LineageOS&amp;lt;/code&amp;gt;的内核源码，指定&amp;lt;code&amp;gt;lineage-21&amp;lt;/code&amp;gt;分支，且仅保留最近一个提交，则需要输入:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b lineage-21 &amp;lt;nowiki&amp;gt;https://github.com/LineageOS/android_kernel_xiaomi_sdm845&amp;lt;/nowiki&amp;gt; --depth=1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git add ====&lt;br /&gt;
添加某个文件，或者目录到暂存区，用于告诉git你需要将哪些文件的更改包含在下一次的提交(commit)之中添加一个或者多个文件到暂存区之中&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;
&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;
&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;
&amp;lt;/pre&amp;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;
例如在您的仓库中有这几个分支：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-&amp;gt; master (Default)&lt;br /&gt;
   backup&lt;br /&gt;
   test&lt;br /&gt;
&amp;lt;/pre&amp;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;
&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;
用于比较当前工作区与上一个版本之间的差异&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/example b/example&lt;br /&gt;
&lt;br /&gt;
index fbb8c85..d65c7eb 100644&lt;br /&gt;
&lt;br /&gt;
--- a/example&lt;br /&gt;
&lt;br /&gt;
+++ b/example&lt;br /&gt;
&lt;br /&gt;
@@ -1 +1,2 @@&lt;br /&gt;
&lt;br /&gt;
114514&lt;br /&gt;
&lt;br /&gt;
+1919180&lt;br /&gt;
&amp;lt;/pre&amp;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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit sha1 hash:   针对你这个提交的 commit id&lt;br /&gt;
Author: commit      作者名称   &amp;lt;you@example.com&amp;gt;&lt;br /&gt;
Date: commit        日期&lt;br /&gt;
commit:             名称&lt;br /&gt;
&amp;lt;/pre&amp;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;
&amp;lt;pre&amp;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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git cherry-pick ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cherry-pick (遴选) 和它的名称一样，挑选一个我们需要的 commit 进行操作。它可以用于将在其他分支上的 commit 修改，移植到当前的分支。&lt;br /&gt;
&lt;br /&gt;
如果我们想在我们正在开发的版本上，添加一个其他版本中的功能代码。就可以使用 cherry-pick ，将这个功能相关的 commit 提取出来，合入该版本。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git cherry-pick &amp;lt;commit-id&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
当我们执行完 &amp;lt;code&amp;gt;cherry-pick&amp;lt;/code&amp;gt;操作之后，会自动生成一个&amp;lt;code&amp;gt;commit&amp;lt;/code&amp;gt;以及对应新的&amp;lt;code&amp;gt;commit-id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在顺利的情况下我们可以直接通过，但如果遇到代码等因为变量名，写法等不同的情况，&amp;lt;code&amp;gt;cherry-pick&amp;lt;/code&amp;gt;大概率会报错，此时我们需要进行报错处理。&lt;br /&gt;
&lt;br /&gt;
第一种方案是手动修改&lt;br /&gt;
&lt;br /&gt;
我们可以先使用&amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt;检查当前遴选时冲突的文件&lt;br /&gt;
&lt;br /&gt;
然后 &amp;lt;code&amp;gt;git checkout --ours filename&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;
再使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git cherry-pick --continue&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
命令让 cherrypick 操作继续执行。&lt;br /&gt;
&lt;br /&gt;
第二种方案是直接退出&amp;lt;code&amp;gt;cherry-pick&amp;lt;/code&amp;gt;进程，一般适用于冲突文件实在太多了难以按照方案一处理的情况。&lt;br /&gt;
&lt;br /&gt;
需要注意的是，如果您当前正在遴选的提交在该分支已经存在也会冲突，在这种情况下，您需要解决冲突并手动解决问题。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git cherry-pick --abort&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git fetch ====&lt;br /&gt;
git fetch 命令用于从远程获取仓库。&lt;br /&gt;
&lt;br /&gt;
==== git merge ====&lt;br /&gt;
&amp;lt;code&amp;gt;git merge&amp;lt;/code&amp;gt;是用来把分叉的提交历史放回到一起(合并)的方式。&lt;br /&gt;
&lt;br /&gt;
git merge命令用来将你之前使用git branch命令创建的分支以及在此分支上独立开发的内容整合为一个分支。&lt;br /&gt;
&lt;br /&gt;
本&lt;br /&gt;
&lt;br /&gt;
==== git pull ====&lt;br /&gt;
用于从远程获取代码并合并本地的版本。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt;其实就是&amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;git merge FETCH_HEAD&amp;lt;/code&amp;gt; 的简写。&lt;br /&gt;
&lt;br /&gt;
格式如下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git pull &amp;lt;remote-host-name&amp;gt; &amp;lt;remote-branch-name&amp;gt;:&amp;lt;local-branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git rebase ====&lt;br /&gt;
用于需要修改历史上某一项commit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git rebase -i HEAD~&amp;lt;commit number&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
commit number就是从头部往前数的commit数量。执行后会弹出你在git config内配置的编辑器，若未配置则是默认，vim居多。然后就可以看见一堆commit前面有pick字样。可以将pick替换为你想要的操作。&lt;br /&gt;
有以下操作：&lt;br /&gt;
&lt;br /&gt;
1.edit，顾名思义编辑此commit，替换完保存后请修改内容，使用&amp;lt;code&amp;gt;git add&amp;lt;/code&amp;gt;或vscode，github desktop将修改文件添加到暂存区，之后命令行执行&amp;lt;code&amp;gt;git commit --amend&amp;lt;/code&amp;gt;这样commit就修改成了&lt;br /&gt;
&lt;br /&gt;
2.squash，合并几个提交，确认一个父提交，将要合并的commit，从下向上替换字符串，会从下向上合并(方位指的是&amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;后弹出的编辑器)&lt;br /&gt;
&lt;br /&gt;
3.drop，需要移除的commit&lt;br /&gt;
&lt;br /&gt;
4.reword，修改commit信息&lt;br /&gt;
&lt;br /&gt;
另外，还可以使用首字母来说明命令。&lt;br /&gt;
&lt;br /&gt;
==== git subtree ====&lt;br /&gt;
子树，在Android开发中多用于Kernel侧更改，如跟踪audio模块等&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git subtree add --prefix=&amp;lt;目录&amp;gt; &amp;lt;仓库地址&amp;gt; &amp;lt;远程分支&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果需要更新远程库时&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git subtree pull --prefix=&amp;lt;目录&amp;gt; &amp;lt;仓库地址&amp;gt; &amp;lt;远程分支&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git submodule ====&lt;br /&gt;
&lt;br /&gt;
===== 子模块功能的概述 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule&amp;lt;/code&amp;gt;允许在自己的Github仓库里加入别人的github仓库，作为自己仓库的子仓库(即submodule)。&lt;br /&gt;
&lt;br /&gt;
为什么我们会需要使用子模块？当我们维护一个项目时有可能遇到以下情况，例如维护某款机型的KernelSU内核，我们需要将KernelSU导入至我们的内核源码中，如果我们直接clone进去容易带来一个问题，如果KernelSU更新了怎么办？此时我们便可以使用子模块来解决这个问题&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule&amp;lt;/code&amp;gt;允许在git仓库里存放别人仓库的url，作为自己的子模块，其核心内容是在Git仓库里面加入一个&amp;lt;code&amp;gt;.gitmodules&amp;lt;/code&amp;gt;文件，里面会记录各个submodule的名字，路径，以及对应链接。&lt;br /&gt;
&lt;br /&gt;
===== 加入子模块 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule add &amp;lt;url&amp;gt; &amp;lt;path&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
此时 &amp;lt;code&amp;gt;.gitmodules&amp;lt;/code&amp;gt;内会自动生成以下内容&lt;br /&gt;
&lt;br /&gt;
[submodule &amp;quot;xxx&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
path = xxx&lt;br /&gt;
&lt;br /&gt;
url = xxx&lt;br /&gt;
&lt;br /&gt;
===== 初始化子模块 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule init&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== 更新子模块 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Git进阶 ===&lt;br /&gt;
&lt;br /&gt;
==== GPG key ====&lt;br /&gt;
&lt;br /&gt;
===== 简介 =====&lt;br /&gt;
平时在Github上摸鱼的时候，是不是经常能看见如下图所示，有一个绿色的&amp;quot;Verified&amp;quot;字样，看着很酷，实际上这是为了确保commit为开发者本人所写的进行的GPG签名。&lt;br /&gt;
[[文件:Github GPG sign.png|居中]]&lt;br /&gt;
因为Git的默认机制，任何人都可以通过你的邮箱和用户名创建虚假的commit，甚至你名气很大的话可以“栽赃陷害”你。如果你是某高校计算机专业的同学亦或是对计算机抱有很大的兴趣，乐意为开源社区提供“资源”，那么我建议你设置GPG sign。未来是不可预知的，人人都可能成为巨佬。&lt;br /&gt;
&lt;br /&gt;
===== 使用 =====&lt;br /&gt;
因为我只在Mac环境下配置过GPG，Windows只是打游戏用，所以用的少，Linux/类Unix可以参考一下。其它系统等待他人补充......&lt;br /&gt;
&lt;br /&gt;
====== Mac ======&lt;br /&gt;
Mac默认是不带GPG的，需要通过第三方软件包安装器Homebrew进行安装，首先先安装Homebrew，如已安装可以跳过。&lt;br /&gt;
&lt;br /&gt;
编辑器限制原因不能使用默认标题进行分步了，故使用1、2、3等小数字代替。&lt;br /&gt;
&lt;br /&gt;
安装Homebrew&lt;br /&gt;
&lt;br /&gt;
在安装之前需要从系统信息中查看芯片为Intel/M系列&lt;br /&gt;
&lt;br /&gt;
Intel使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/bin/zsh -c &amp;quot;$(curl -fsSL &amp;lt;nowiki&amp;gt;https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh&amp;lt;/nowiki&amp;gt;)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intel按照脚本提示，选源，输密码，回车一路绿灯就好了，如果这都不会......可能你不是很适合开发，因为该脚本是国内开发者编写的，中文和一键化安装都集齐了。&lt;br /&gt;
&lt;br /&gt;
M系列使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/bin/zsh -c &amp;quot;$(curl -fsSL https://gitee.com/huwei1024/HomebrewCN/raw/master/Homebrew.sh)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
并且因为M系列系统结构发生改变，包安装位置不在是以前的/usr/local/，而是在/opt/homebrew，所以要将配置文件里的环境变量改过来。&lt;br /&gt;
&lt;br /&gt;
1.首先进入根目录&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd ~&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.创建.zshrc文件&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;touch .zshrc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3.打开文件进行编辑&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;open -e .zshrc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4.如果有旧的环境就修改，没有就新增&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;export PATH=&amp;quot;/opt/homebrew/bin:$PATH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export PATH=&amp;quot;/opt/homebrew/sbin:$PATH&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5.保存&lt;br /&gt;
&lt;br /&gt;
使用command + s&lt;br /&gt;
&lt;br /&gt;
6.生效环境变量&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;source .zshrc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7、测试&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;brew -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
若终端顺利打印出brew的版本，那么就安装成功了！&lt;br /&gt;
&lt;br /&gt;
注：本人没有使用过M系列设备，该教程在知乎上找到的&lt;br /&gt;
&lt;br /&gt;
使用Homebrew安装GPG&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;brew install gnupg pinentry-mac&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[文件:截屏2024-02-17 17.34.48.png|居中]]&lt;br /&gt;
&lt;br /&gt;
为GPG添加环境变量，否则在签名的时候会发生报错（使用bash请自行替换配置文件）&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;echo &amp;quot;export GPG_TTY=$(tty)&amp;quot; &amp;gt;&amp;gt; ~/.zshrc&lt;br /&gt;
source ~/.zshrc&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
生成一个GPG keys&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gpg --full-generate-key&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[文件:截屏2024-02-17 17.45.51.png|居中]]&lt;br /&gt;
&lt;br /&gt;
默认使用的是ECC，我使用的是RSA，按照自己喜好，或从百度搜索非对称和对称加密算法之间的区别，这里只做使用方法的介绍，不做赘述。&lt;br /&gt;
&lt;br /&gt;
然后添写密钥长度和使用有效期，这里建议选择长期，并做备份，一辈子用一个就够了。&lt;br /&gt;
&lt;br /&gt;
[[文件:截屏2024-02-17 17.46.06.png|居中]]&lt;br /&gt;
[[文件:截屏2024-02-17 17.46.35.png|居中]]&lt;br /&gt;
&lt;br /&gt;
个人信息按照Github信息填写，真实姓名对应Username。填写完毕按回车输入O即可生成密钥。不出意外的话会弹出Gui窗口让你设置密钥密码，强烈建设设置一个较为复杂的密码，并牢记，当然也可以不设置。&lt;br /&gt;
&lt;br /&gt;
使用GPG对Git的commit和tag进行签名&lt;br /&gt;
&lt;br /&gt;
先为Git定义GPG二进制所在地&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global gpg.program $(which gpg)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
查看GPG keys ID&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gpg --list-secret-keys --keyid-format=long&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如图所示RSA/后面紧跟的一串就是GPG keys ID&lt;br /&gt;
[[文件:截屏2024-02-17 17.57.01.png|居中]]&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global user.signingkey &amp;quot;GPG key ID&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
为Git设置全局commit和tag签名&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global commit.gpgsign true&lt;br /&gt;
&lt;br /&gt;
git config --global tag.gpgSign true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
参见本文“在Github配置GPG keys”部分开启下一步操作&lt;br /&gt;
&lt;br /&gt;
接下来就可以愉快的编写程序了~&lt;br /&gt;
&lt;br /&gt;
======在Github配置GPG keys======&lt;br /&gt;
在终端输入&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gpg --armor --export &amp;quot;GPG key ID&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
将输出的内容从-----BEGIN PGP PUBLIC KEY BLOCK-----到-----END PGP PUBLIC KEY BLOCK-----，包含它们都复制下来。&lt;br /&gt;
&lt;br /&gt;
打开Github网页，并登录自己的账号。按照下述操作依次执行。&lt;br /&gt;
&lt;br /&gt;
头像--&amp;gt;Setting--&amp;gt;SSH and GPG keys--&amp;gt;New GPG key&lt;br /&gt;
&lt;br /&gt;
标题自己怎么舒服怎么来，将第一步复制的内容全部粘贴然后保存起来，这样Github就能识别到你commit中包含的GPG sign的信息了，你就可以在commit history或release等页面看到绿色的签名后的标志了。&lt;br /&gt;
&lt;br /&gt;
==== SSH key ====&lt;br /&gt;
可以通过生成SSH key，并保存在Github等托管平台上实现免密Push，这也是官方推荐的方法，过去输入用户名/密码的方式早已被抛弃。&lt;br /&gt;
&lt;br /&gt;
===== 生成Key =====&lt;br /&gt;
1.打开终端并输入 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls ~/.ssh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
检查是否已经存在了SSH密钥。如果你看到包含id_rsa等文件，说明你已经有了SSH key，可以跳过第 2 步和第 3 步。&lt;br /&gt;
&lt;br /&gt;
2.输入，生成新的SSH密钥。你可以直接按回车键使用默认的文件路径和空密码，也可以自己设置。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ssh-keygen -t rsa -b 4096 -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4.在终端输入或使用文本编辑器打开，并复制所有内容&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;vim ~/.ssh/id_rsa.pub&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5.打开Github网页，并登录自己的账号。按照下述操作依次执行。&lt;br /&gt;
&lt;br /&gt;
头像--&amp;gt;Setting--&amp;gt;SSH and GPG keys--&amp;gt;New SSH key&lt;br /&gt;
&lt;br /&gt;
自己起个标题名并粘贴4步中所有内容，保存，接下来你可以免密对Github上的repo进行操作了。&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;br /&gt;
&lt;br /&gt;
[3] CSDN -- git merge 使用简介: &amp;lt;nowiki&amp;gt;https://blog.csdn.net/All_In_gzx_cc/article/details/125482617&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4] 知乎 -- MAC 安装 homebrew 国内镜像: &amp;lt;nowiki&amp;gt;https://zhuanlan.zhihu.com/p/547898033&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5] Github -- Generating a new GPG key: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6] Github -- Adding a GPG key to your GitHub account: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/managing-commit-signature-verification/adding-a-gpg-key-to-your-github-account&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7] Github -- Generating a new SSH key and adding it to the ssh-agent: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[8] Github -- Adding a new SSH key to your GitHub account: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</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=702</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=702"/>
		<updated>2024-08-14T15:31:40Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​git: git diff小修改&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;&lt;br /&gt;
&lt;br /&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;
&lt;br /&gt;
更改默认编辑器&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global core.editor nano&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;
例如我们要克隆&amp;lt;code&amp;gt;LineageOS&amp;lt;/code&amp;gt;的内核源码，指定&amp;lt;code&amp;gt;lineage-21&amp;lt;/code&amp;gt;分支，且仅保留最近一个提交，则需要输入:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b lineage-21 &amp;lt;nowiki&amp;gt;https://github.com/LineageOS/android_kernel_xiaomi_sdm845&amp;lt;/nowiki&amp;gt; --depth=1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git add ====&lt;br /&gt;
添加某个文件，或者目录到暂存区，用于告诉git你需要将哪些文件的更改包含在下一次的提交(commit)之中添加一个或者多个文件到暂存区之中&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;
&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;
&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;
&amp;lt;/pre&amp;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;
例如在您的仓库中有这几个分支：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-&amp;gt; master (Default)&lt;br /&gt;
   backup&lt;br /&gt;
   test&lt;br /&gt;
&amp;lt;/pre&amp;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;
&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;
用于比较当前工作区与上一个版本之间的差异&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/example b/example&lt;br /&gt;
&lt;br /&gt;
index fbb8c85..d65c7eb 100644&lt;br /&gt;
&lt;br /&gt;
--- a/example&lt;br /&gt;
&lt;br /&gt;
+++ b/example&lt;br /&gt;
&lt;br /&gt;
@@ -1 +1,2 @@&lt;br /&gt;
&lt;br /&gt;
114514&lt;br /&gt;
&lt;br /&gt;
+1919180&lt;br /&gt;
&amp;lt;/pre&amp;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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit sha1 hash:   针对你这个提交的 commit id&lt;br /&gt;
Author: commit      作者名称   &amp;lt;you@example.com&amp;gt;&lt;br /&gt;
Date: commit        日期&lt;br /&gt;
commit:             名称&lt;br /&gt;
&amp;lt;/pre&amp;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;
&amp;lt;pre&amp;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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git cherry-pick ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cherry-pick (遴选) 和它的名称一样，挑选一个我们需要的 commit 进行操作。它可以用于将在其他分支上的 commit 修改，移植到当前的分支。&lt;br /&gt;
&lt;br /&gt;
如果我们想在我们正在开发的版本上，添加一个其他版本中的功能代码。就可以使用 cherry-pick ，将这个功能相关的 commit 提取出来，合入该版本。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git cherry-pick &amp;lt;commit-id&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
当我们执行完 &amp;lt;code&amp;gt;cherry-pick&amp;lt;/code&amp;gt;操作之后，会自动生成一个&amp;lt;code&amp;gt;commit&amp;lt;/code&amp;gt;以及对应新的&amp;lt;code&amp;gt;commit-id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在顺利的情况下我们可以直接通过，但如果遇到代码等因为变量名，写法等不同的情况，&amp;lt;code&amp;gt;cherry-pick&amp;lt;/code&amp;gt;大概率会报错，此时我们需要进行报错处理。&lt;br /&gt;
&lt;br /&gt;
第一种方案是手动修改&lt;br /&gt;
&lt;br /&gt;
我们可以先使用&amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt;检查当前遴选时冲突的文件&lt;br /&gt;
&lt;br /&gt;
然后 &amp;lt;code&amp;gt;git checkout --ours filename&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;
再使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git cherry-pick --continue&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
命令让 cherrypick 操作继续执行。&lt;br /&gt;
&lt;br /&gt;
第二种方案是直接退出&amp;lt;code&amp;gt;cherry-pick&amp;lt;/code&amp;gt;进程，一般适用于冲突文件实在太多了难以按照方案一处理的情况。&lt;br /&gt;
&lt;br /&gt;
需要注意的是，如果您当前正在遴选的提交在该分支已经存在也会冲突，在这种情况下，您需要解决冲突并手动解决问题。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git cherry-pick --abort&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git fetch ====&lt;br /&gt;
git fetch 命令用于从远程获取仓库。&lt;br /&gt;
&lt;br /&gt;
==== git merge ====&lt;br /&gt;
&amp;lt;code&amp;gt;git merge&amp;lt;/code&amp;gt;是用来把分叉的提交历史放回到一起(合并)的方式。&lt;br /&gt;
&lt;br /&gt;
git merge命令用来将你之前使用git branch命令创建的分支以及在此分支上独立开发的内容整合为一个分支。&lt;br /&gt;
&lt;br /&gt;
本&lt;br /&gt;
&lt;br /&gt;
==== git pull ====&lt;br /&gt;
用于从远程获取代码并合并本地的版本。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt;其实就是&amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;git merge FETCH_HEAD&amp;lt;/code&amp;gt; 的简写。&lt;br /&gt;
&lt;br /&gt;
格式如下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git pull &amp;lt;remote-host-name&amp;gt; &amp;lt;remote-branch-name&amp;gt;:&amp;lt;local-branch-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git rebase ====&lt;br /&gt;
用于需要修改历史上某一项commit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git rebase -i HEAD~&amp;lt;commit number&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
commit number就是从头部往前数的commit数量。执行后会弹出你在git config内配置的编辑器，若未配置则是默认，vim居多。然后就可以看见一堆commit前面有pick字样。可以将pick替换为你想要的操作。&lt;br /&gt;
有以下操作：&lt;br /&gt;
&lt;br /&gt;
1.edit，顾名思义编辑此commit，替换完保存后请修改内容，使用&amp;lt;code&amp;gt;git add&amp;lt;/code&amp;gt;或vscode，github desktop将修改文件添加到暂存区，之后命令行执行&amp;lt;code&amp;gt;git commit --amend&amp;lt;/code&amp;gt;这样commit就修改成了&lt;br /&gt;
&lt;br /&gt;
2.squash，合并几个提交，确认一个父提交，将要合并的commit，从下向上替换字符串，会从下向上合并(方位指的是&amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;后弹出的编辑器)&lt;br /&gt;
&lt;br /&gt;
3.drop，需要移除的commit&lt;br /&gt;
&lt;br /&gt;
==== git subtree ====&lt;br /&gt;
子树，在Android开发中多用于Kernel侧更改，如跟踪audio模块等&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git subtree add --prefix=&amp;lt;目录&amp;gt; &amp;lt;仓库地址&amp;gt; &amp;lt;远程分支&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果需要更新远程库时&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git subtree pull --prefix=&amp;lt;目录&amp;gt; &amp;lt;仓库地址&amp;gt; &amp;lt;远程分支&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== git submodule ====&lt;br /&gt;
&lt;br /&gt;
===== 子模块功能的概述 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule&amp;lt;/code&amp;gt;允许在自己的Github仓库里加入别人的github仓库，作为自己仓库的子仓库(即submodule)。&lt;br /&gt;
&lt;br /&gt;
为什么我们会需要使用子模块？当我们维护一个项目时有可能遇到以下情况，例如维护某款机型的KernelSU内核，我们需要将KernelSU导入至我们的内核源码中，如果我们直接clone进去容易带来一个问题，如果KernelSU更新了怎么办？此时我们便可以使用子模块来解决这个问题&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule&amp;lt;/code&amp;gt;允许在git仓库里存放别人仓库的url，作为自己的子模块，其核心内容是在Git仓库里面加入一个&amp;lt;code&amp;gt;.gitmodules&amp;lt;/code&amp;gt;文件，里面会记录各个submodule的名字，路径，以及对应链接。&lt;br /&gt;
&lt;br /&gt;
===== 加入子模块 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule add &amp;lt;url&amp;gt; &amp;lt;path&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
此时 &amp;lt;code&amp;gt;.gitmodules&amp;lt;/code&amp;gt;内会自动生成以下内容&lt;br /&gt;
&lt;br /&gt;
[submodule &amp;quot;xxx&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
path = xxx&lt;br /&gt;
&lt;br /&gt;
url = xxx&lt;br /&gt;
&lt;br /&gt;
===== 初始化子模块 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule init&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== 更新子模块 =====&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Git进阶 ===&lt;br /&gt;
&lt;br /&gt;
==== GPG key ====&lt;br /&gt;
&lt;br /&gt;
===== 简介 =====&lt;br /&gt;
平时在Github上摸鱼的时候，是不是经常能看见如下图所示，有一个绿色的&amp;quot;Verified&amp;quot;字样，看着很酷，实际上这是为了确保commit为开发者本人所写的进行的GPG签名。&lt;br /&gt;
[[文件:Github GPG sign.png|居中]]&lt;br /&gt;
因为Git的默认机制，任何人都可以通过你的邮箱和用户名创建虚假的commit，甚至你名气很大的话可以“栽赃陷害”你。如果你是某高校计算机专业的同学亦或是对计算机抱有很大的兴趣，乐意为开源社区提供“资源”，那么我建议你设置GPG sign。未来是不可预知的，人人都可能成为巨佬。&lt;br /&gt;
&lt;br /&gt;
===== 使用 =====&lt;br /&gt;
因为我只在Mac环境下配置过GPG，Windows只是打游戏用，所以用的少，Linux/类Unix可以参考一下。其它系统等待他人补充......&lt;br /&gt;
&lt;br /&gt;
====== Mac ======&lt;br /&gt;
Mac默认是不带GPG的，需要通过第三方软件包安装器Homebrew进行安装，首先先安装Homebrew，如已安装可以跳过。&lt;br /&gt;
&lt;br /&gt;
编辑器限制原因不能使用默认标题进行分步了，故使用1、2、3等小数字代替。&lt;br /&gt;
&lt;br /&gt;
安装Homebrew&lt;br /&gt;
&lt;br /&gt;
在安装之前需要从系统信息中查看芯片为Intel/M系列&lt;br /&gt;
&lt;br /&gt;
Intel使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/bin/zsh -c &amp;quot;$(curl -fsSL &amp;lt;nowiki&amp;gt;https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh&amp;lt;/nowiki&amp;gt;)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intel按照脚本提示，选源，输密码，回车一路绿灯就好了，如果这都不会......可能你不是很适合开发，因为该脚本是国内开发者编写的，中文和一键化安装都集齐了。&lt;br /&gt;
&lt;br /&gt;
M系列使用&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/bin/zsh -c &amp;quot;$(curl -fsSL https://gitee.com/huwei1024/HomebrewCN/raw/master/Homebrew.sh)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
并且因为M系列系统结构发生改变，包安装位置不在是以前的/usr/local/，而是在/opt/homebrew，所以要将配置文件里的环境变量改过来。&lt;br /&gt;
&lt;br /&gt;
1.首先进入根目录&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd ~&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.创建.zshrc文件&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;touch .zshrc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3.打开文件进行编辑&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;open -e .zshrc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4.如果有旧的环境就修改，没有就新增&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;export PATH=&amp;quot;/opt/homebrew/bin:$PATH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export PATH=&amp;quot;/opt/homebrew/sbin:$PATH&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5.保存&lt;br /&gt;
&lt;br /&gt;
使用command + s&lt;br /&gt;
&lt;br /&gt;
6.生效环境变量&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;source .zshrc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7、测试&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;brew -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
若终端顺利打印出brew的版本，那么就安装成功了！&lt;br /&gt;
&lt;br /&gt;
注：本人没有使用过M系列设备，该教程在知乎上找到的&lt;br /&gt;
&lt;br /&gt;
使用Homebrew安装GPG&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;brew install gnupg pinentry-mac&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[文件:截屏2024-02-17 17.34.48.png|居中]]&lt;br /&gt;
&lt;br /&gt;
为GPG添加环境变量，否则在签名的时候会发生报错（使用bash请自行替换配置文件）&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;echo &amp;quot;export GPG_TTY=$(tty)&amp;quot; &amp;gt;&amp;gt; ~/.zshrc&lt;br /&gt;
source ~/.zshrc&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
生成一个GPG keys&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gpg --full-generate-key&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[文件:截屏2024-02-17 17.45.51.png|居中]]&lt;br /&gt;
&lt;br /&gt;
默认使用的是ECC，我使用的是RSA，按照自己喜好，或从百度搜索非对称和对称加密算法之间的区别，这里只做使用方法的介绍，不做赘述。&lt;br /&gt;
&lt;br /&gt;
然后添写密钥长度和使用有效期，这里建议选择长期，并做备份，一辈子用一个就够了。&lt;br /&gt;
&lt;br /&gt;
[[文件:截屏2024-02-17 17.46.06.png|居中]]&lt;br /&gt;
[[文件:截屏2024-02-17 17.46.35.png|居中]]&lt;br /&gt;
&lt;br /&gt;
个人信息按照Github信息填写，真实姓名对应Username。填写完毕按回车输入O即可生成密钥。不出意外的话会弹出Gui窗口让你设置密钥密码，强烈建设设置一个较为复杂的密码，并牢记，当然也可以不设置。&lt;br /&gt;
&lt;br /&gt;
使用GPG对Git的commit和tag进行签名&lt;br /&gt;
&lt;br /&gt;
先为Git定义GPG二进制所在地&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global gpg.program $(which gpg)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
查看GPG keys ID&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gpg --list-secret-keys --keyid-format=long&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如图所示RSA/后面紧跟的一串就是GPG keys ID&lt;br /&gt;
[[文件:截屏2024-02-17 17.57.01.png|居中]]&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global user.signingkey &amp;quot;GPG key ID&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
为Git设置全局commit和tag签名&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git config --global commit.gpgsign true&lt;br /&gt;
&lt;br /&gt;
git config --global tag.gpgSign true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
参见本文“在Github配置GPG keys”部分开启下一步操作&lt;br /&gt;
&lt;br /&gt;
接下来就可以愉快的编写程序了~&lt;br /&gt;
&lt;br /&gt;
======在Github配置GPG keys======&lt;br /&gt;
在终端输入&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gpg --armor --export &amp;quot;GPG key ID&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
将输出的内容从-----BEGIN PGP PUBLIC KEY BLOCK-----到-----END PGP PUBLIC KEY BLOCK-----，包含它们都复制下来。&lt;br /&gt;
&lt;br /&gt;
打开Github网页，并登录自己的账号。按照下述操作依次执行。&lt;br /&gt;
&lt;br /&gt;
头像--&amp;gt;Setting--&amp;gt;SSH and GPG keys--&amp;gt;New GPG key&lt;br /&gt;
&lt;br /&gt;
标题自己怎么舒服怎么来，将第一步复制的内容全部粘贴然后保存起来，这样Github就能识别到你commit中包含的GPG sign的信息了，你就可以在commit history或release等页面看到绿色的签名后的标志了。&lt;br /&gt;
&lt;br /&gt;
==== SSH key ====&lt;br /&gt;
可以通过生成SSH key，并保存在Github等托管平台上实现免密Push，这也是官方推荐的方法，过去输入用户名/密码的方式早已被抛弃。&lt;br /&gt;
&lt;br /&gt;
===== 生成Key =====&lt;br /&gt;
1.打开终端并输入 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls ~/.ssh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
检查是否已经存在了SSH密钥。如果你看到包含id_rsa等文件，说明你已经有了SSH key，可以跳过第 2 步和第 3 步。&lt;br /&gt;
&lt;br /&gt;
2.输入，生成新的SSH密钥。你可以直接按回车键使用默认的文件路径和空密码，也可以自己设置。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ssh-keygen -t rsa -b 4096 -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4.在终端输入或使用文本编辑器打开，并复制所有内容&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;vim ~/.ssh/id_rsa.pub&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5.打开Github网页，并登录自己的账号。按照下述操作依次执行。&lt;br /&gt;
&lt;br /&gt;
头像--&amp;gt;Setting--&amp;gt;SSH and GPG keys--&amp;gt;New SSH key&lt;br /&gt;
&lt;br /&gt;
自己起个标题名并粘贴4步中所有内容，保存，接下来你可以免密对Github上的repo进行操作了。&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;br /&gt;
&lt;br /&gt;
[3] CSDN -- git merge 使用简介: &amp;lt;nowiki&amp;gt;https://blog.csdn.net/All_In_gzx_cc/article/details/125482617&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4] 知乎 -- MAC 安装 homebrew 国内镜像: &amp;lt;nowiki&amp;gt;https://zhuanlan.zhihu.com/p/547898033&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5] Github -- Generating a new GPG key: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6] Github -- Adding a GPG key to your GitHub account: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/managing-commit-signature-verification/adding-a-gpg-key-to-your-github-account&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7] Github -- Generating a new SSH key and adding it to the ssh-agent: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[8] Github -- Adding a new SSH key to your GitHub account: &amp;lt;nowiki&amp;gt;https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=KernelSU&amp;diff=701</id>
		<title>KernelSU</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=KernelSU&amp;diff=701"/>
		<updated>2024-08-14T15:27:06Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​KernelSU: 初始化修改&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;KernelSU 是 Android GKI 设备的 root 解决方案，它工作在内核模式，并直接在内核空间中为用户空间应用程序授予 root 权限。&lt;br /&gt;
&lt;br /&gt;
KernelSU 的主要特点是它是基于内核的。 KernelSU 运行在内核空间， 所以它可以提供我们以前从未有过的内核接口。 例如，我们可以在内核模式下为任何进程添加硬件断点；我们可以在任何进程的物理内存中访问，而无人知晓；我们可以在内核空间拦截任何系统调用; 等等。&lt;br /&gt;
&lt;br /&gt;
KernelSU 还提供了一个基于 overlayfs 的模块系统，允许您加载自定义插件到系统中。它还提供了一种修改 /system 分区中文件的机制。&lt;br /&gt;
&lt;br /&gt;
更多信息，请阅读KernelSU官方wiki，本文不再详细赘述。&lt;br /&gt;
https://kernelsu.org&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=700</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=700"/>
		<updated>2024-08-14T15:25:15Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​general: Add kernelsu&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;
# [[获取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;
# [[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;
# [[KernelSU]]&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;
# [[如何解包 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;
# [[AwakenOS]]&lt;br /&gt;
# [[Cipher]]&lt;br /&gt;
# [[crDroid]]&lt;br /&gt;
# [[dotOS]]&lt;br /&gt;
# [[DroidX]]&lt;br /&gt;
# [[EvolutionX]]&lt;br /&gt;
# [[exTHmUI]]&lt;br /&gt;
# [[GrapheneOS]]&lt;br /&gt;
# [[LineageOS]]&lt;br /&gt;
# [[Miku|Miku UI]]&lt;br /&gt;
# [[Mokee]]&lt;br /&gt;
# [[PixelExperience]]&lt;br /&gt;
# [[RisingTech]]&lt;br /&gt;
# [[SuperiorOS]]&lt;br /&gt;
# [[SyberiaOS]]&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>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Magisk%E6%A8%A1%E5%9D%97&amp;diff=699</id>
		<title>Magisk模块</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Magisk%E6%A8%A1%E5%9D%97&amp;diff=699"/>
		<updated>2024-08-14T14:45:15Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​magisk: 提示用户小心rm，dd，echo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== '''&amp;lt;big&amp;gt;什么是Magisk模块？&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
[[Magisk]]模块是一种可以让用户方便快捷的更改系统的方式，用户可以通过刷入一个模块，来达到修改系统，修改应用的目的，都是得益于Magisk本身的性质，提供了这种快捷方便的方式&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Magisk模块的获取&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
可以通过'''用户分享'''，'''Magisk的官方仓库'''，'''酷安'''等途径来获取，在这提醒，不要随意刷模块，因为有人利用模块格机来达到盈利的目的，所以在刷入模块前注意仔细甄别，不要刷来路不明的模块！&lt;br /&gt;
请记得解包magisk模块，查看你能看到的每个地方，如果有rm -rf, echo, dd等命令，一定多留个心眼！&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Android_%E7%89%88%E6%9C%AC%E5%90%88%E9%9B%86&amp;diff=698</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=698"/>
		<updated>2024-08-14T14:37:00Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​androidversion: 添加API Level&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;
|暂未发布正式版&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Android_%E7%89%88%E6%9C%AC%E5%90%88%E9%9B%86&amp;diff=693</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=693"/>
		<updated>2024-08-14T14:11:59Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​&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;
!代号&lt;br /&gt;
!发布时间&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.0&lt;br /&gt;
|无&lt;br /&gt;
|2008/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.1&lt;br /&gt;
|Base&lt;br /&gt;
|2009/02&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.5&lt;br /&gt;
|Cupcake&lt;br /&gt;
|2009/04&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.6&lt;br /&gt;
|Donut&lt;br /&gt;
|2009/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.0&lt;br /&gt;
|Eclair&lt;br /&gt;
|2009/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.2&lt;br /&gt;
|Froyo&lt;br /&gt;
|2010/05&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.3&lt;br /&gt;
|Gingerbread&lt;br /&gt;
|2010/12&lt;br /&gt;
|-&lt;br /&gt;
|Android 3.0&lt;br /&gt;
|Honeycomb&lt;br /&gt;
|2011/02&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.0&lt;br /&gt;
|IceCreamSandwich&lt;br /&gt;
|2011/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.1-4.3&lt;br /&gt;
|JellyBean&lt;br /&gt;
|2012/07&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.4&lt;br /&gt;
|KitKat&lt;br /&gt;
|2013/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 5.0-5.1&lt;br /&gt;
|Lollipop&lt;br /&gt;
|2014/11&lt;br /&gt;
|-&lt;br /&gt;
|Android 6.0&lt;br /&gt;
|Marshmallow&lt;br /&gt;
|2015/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 7.0-7.1&lt;br /&gt;
|Nougat&lt;br /&gt;
|2016/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 8.0-8.1&lt;br /&gt;
|Oreo&lt;br /&gt;
|2017/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 9.0&lt;br /&gt;
|Pie&lt;br /&gt;
|2018/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 10&lt;br /&gt;
|QuinceTart&lt;br /&gt;
|2019/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 11&lt;br /&gt;
|RedVelvetCake&lt;br /&gt;
|2020/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 12(L)&lt;br /&gt;
|SnowCone&lt;br /&gt;
|2021/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 13&lt;br /&gt;
|Tiramisu&lt;br /&gt;
|2022/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 14&lt;br /&gt;
|UpsideDownCake&lt;br /&gt;
|2023/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 15&lt;br /&gt;
|VanillaIceCream&lt;br /&gt;
|暂未发布正式版&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Android_%E7%89%88%E6%9C%AC%E5%90%88%E9%9B%86&amp;diff=691</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=691"/>
		<updated>2024-08-14T14:10:14Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;说明：Android 10开始，Google不再使用公开甜品代号。本wiki如有记录则为其内部代号。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!版本&lt;br /&gt;
!代号&lt;br /&gt;
!发布时间&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.0&lt;br /&gt;
|无&lt;br /&gt;
|2008/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.1&lt;br /&gt;
|Base&lt;br /&gt;
|2009/02&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.5&lt;br /&gt;
|Cupcake&lt;br /&gt;
|2009/04&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.6&lt;br /&gt;
|Donut&lt;br /&gt;
|2009/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.0&lt;br /&gt;
|Eclair&lt;br /&gt;
|2009/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.2&lt;br /&gt;
|Froyo&lt;br /&gt;
|2010/05&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.3&lt;br /&gt;
|Gingerbread&lt;br /&gt;
|2010/12&lt;br /&gt;
|-&lt;br /&gt;
|Android 3.0&lt;br /&gt;
|Honeycomb&lt;br /&gt;
|2011/02&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.0&lt;br /&gt;
|IceCreamSandwich&lt;br /&gt;
|2011/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.1-4.3&lt;br /&gt;
|JellyBean&lt;br /&gt;
|2012/07&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.4&lt;br /&gt;
|KitKat&lt;br /&gt;
|2013/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 5.0-5.1&lt;br /&gt;
|Lollipop&lt;br /&gt;
|2014/11&lt;br /&gt;
|-&lt;br /&gt;
|Android 6.0&lt;br /&gt;
|Marshmallow&lt;br /&gt;
|2015/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 7.0-7.1&lt;br /&gt;
|Nougat&lt;br /&gt;
|2016/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 8.0-8.1&lt;br /&gt;
|Oreo&lt;br /&gt;
|2017/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 9.0&lt;br /&gt;
|Pie&lt;br /&gt;
|2018/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 10&lt;br /&gt;
|QuinceTart&lt;br /&gt;
|2019/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 11&lt;br /&gt;
|RedVelvetCake&lt;br /&gt;
|2020/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 12(L)&lt;br /&gt;
|SnowCone&lt;br /&gt;
|2021/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 13&lt;br /&gt;
|Tiramisu&lt;br /&gt;
|2022/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 14&lt;br /&gt;
|UpsideDownCake&lt;br /&gt;
|2023/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 15&lt;br /&gt;
|VanillaIceCream&lt;br /&gt;
|暂未发布正式版&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Android_%E7%89%88%E6%9C%AC%E5%90%88%E9%9B%86&amp;diff=690</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=690"/>
		<updated>2024-08-14T14:09:47Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;说明：Android 10开始，Google不再使用公开甜品代号。本wiki如有记录则为其内部代号。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!版本&lt;br /&gt;
!代号&lt;br /&gt;
!发布时间&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.0&lt;br /&gt;
|无&lt;br /&gt;
|2008/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.1&lt;br /&gt;
|无&lt;br /&gt;
|2009/02&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.5&lt;br /&gt;
|Cupcake&lt;br /&gt;
|2009/04&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.6&lt;br /&gt;
|Donut&lt;br /&gt;
|2009/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.0&lt;br /&gt;
|Eclair&lt;br /&gt;
|2009/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.2&lt;br /&gt;
|Froyo&lt;br /&gt;
|2010/05&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.3&lt;br /&gt;
|Gingerbread&lt;br /&gt;
|2010/12&lt;br /&gt;
|-&lt;br /&gt;
|Android 3.0&lt;br /&gt;
|Honeycomb&lt;br /&gt;
|2011/02&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.0&lt;br /&gt;
|IceCreamSandwich&lt;br /&gt;
|2011/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.1-4.3&lt;br /&gt;
|JellyBean&lt;br /&gt;
|2012/07&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.4&lt;br /&gt;
|KitKat&lt;br /&gt;
|2013/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 5.0-5.1&lt;br /&gt;
|Lollipop&lt;br /&gt;
|2014/11&lt;br /&gt;
|-&lt;br /&gt;
|Android 6.0&lt;br /&gt;
|Marshmallow&lt;br /&gt;
|2015/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 7.0-7.1&lt;br /&gt;
|Nougat&lt;br /&gt;
|2016/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 8.0-8.1&lt;br /&gt;
|Oreo&lt;br /&gt;
|2017/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 9.0&lt;br /&gt;
|Pie&lt;br /&gt;
|2018/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 10&lt;br /&gt;
|QuinceTart&lt;br /&gt;
|2019/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 11&lt;br /&gt;
|RedVelvetCake&lt;br /&gt;
|2020/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 12(L)&lt;br /&gt;
|SnowCone&lt;br /&gt;
|2021/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 13&lt;br /&gt;
|Tiramisu&lt;br /&gt;
|2022/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 14&lt;br /&gt;
|UpsideDownCake&lt;br /&gt;
|2023/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 15&lt;br /&gt;
|VanillaIceCream&lt;br /&gt;
|暂未发布正式版&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Android_%E7%89%88%E6%9C%AC%E5%90%88%E9%9B%86&amp;diff=689</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=689"/>
		<updated>2024-08-14T14:09:10Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​androidversion: 初始化更改&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;说明：Android 10开始，Google不再使用公开甜品代号。本wiki如有记录则为其内部代号。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!版本&lt;br /&gt;
!代号&lt;br /&gt;
!发布时间&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.0&lt;br /&gt;
|无&lt;br /&gt;
|2008/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.1&lt;br /&gt;
|无&lt;br /&gt;
|2009/02&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.5&lt;br /&gt;
|Cupcake&lt;br /&gt;
|2009/04&lt;br /&gt;
|-&lt;br /&gt;
|Android 1.6&lt;br /&gt;
|Donut&lt;br /&gt;
|2009/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.0&lt;br /&gt;
|Eclair&lt;br /&gt;
|2009/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.2&lt;br /&gt;
|Froyo&lt;br /&gt;
|2010/05&lt;br /&gt;
|-&lt;br /&gt;
|Android 2.3&lt;br /&gt;
|Gingerbread&lt;br /&gt;
|2010/12&lt;br /&gt;
|-&lt;br /&gt;
|Android 3.0&lt;br /&gt;
|Honeycomb&lt;br /&gt;
|2011/02&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.0&lt;br /&gt;
|IceCreamSandwich&lt;br /&gt;
|2011/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.1-4.3&lt;br /&gt;
|Jelly Bean&lt;br /&gt;
|2012/07&lt;br /&gt;
|-&lt;br /&gt;
|Android 4.4&lt;br /&gt;
|KitKat&lt;br /&gt;
|2013/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 5.0-5.1&lt;br /&gt;
|Lollipop&lt;br /&gt;
|2014/11&lt;br /&gt;
|-&lt;br /&gt;
|Android 6.0&lt;br /&gt;
|Marshmallow&lt;br /&gt;
|2015/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 7.0-7.1&lt;br /&gt;
|Nougat&lt;br /&gt;
|2016/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 8.0-8.1&lt;br /&gt;
|Oreo&lt;br /&gt;
|2017/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 9.0&lt;br /&gt;
|Pie&lt;br /&gt;
|2018/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 10&lt;br /&gt;
|QuinceTart&lt;br /&gt;
|2019/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 11&lt;br /&gt;
|RedVelvetCake&lt;br /&gt;
|2020/09&lt;br /&gt;
|-&lt;br /&gt;
|Android 12(L)&lt;br /&gt;
|SnowCone&lt;br /&gt;
|2021/10&lt;br /&gt;
|-&lt;br /&gt;
|Android 13&lt;br /&gt;
|Tiramisu&lt;br /&gt;
|2022/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 14&lt;br /&gt;
|UpsideDownCake&lt;br /&gt;
|2023/08&lt;br /&gt;
|-&lt;br /&gt;
|Android 15&lt;br /&gt;
|VanillaIceCream&lt;br /&gt;
|暂未发布正式版&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E8%AE%BE%E5%A4%87%E4%BB%A3%E5%8F%B7%E6%94%B6%E5%BD%95%E9%9B%86%E5%90%88&amp;diff=673</id>
		<title>设备代号收录集合</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E8%AE%BE%E5%A4%87%E4%BB%A3%E5%8F%B7%E6%94%B6%E5%BD%95%E9%9B%86%E5%90%88&amp;diff=673"/>
		<updated>2024-08-14T09:43:36Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​oneplus: 添加6/6t&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;目前设备代号收录表格&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 小米/红米：（按发布时间排序） ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|机型设备&lt;br /&gt;
|代号名称&lt;br /&gt;
|发布时间&lt;br /&gt;
|-&lt;br /&gt;
|红米Note13 4G NFC&lt;br /&gt;
|sapphiren&lt;br /&gt;
|2024/1/15&lt;br /&gt;
|-&lt;br /&gt;
|红米Note13  4G&lt;br /&gt;
|sapphire&lt;br /&gt;
|2024/1/15&lt;br /&gt;
|-&lt;br /&gt;
|红米13R 5G / 红米13C 5G&lt;br /&gt;
|air&lt;br /&gt;
|2023/12/8&lt;br /&gt;
|-&lt;br /&gt;
|红米K70E  / POCO X6 Pro 5G&lt;br /&gt;
|duchamp&lt;br /&gt;
|2023/11/29&lt;br /&gt;
|-&lt;br /&gt;
|红米K70 Pro&lt;br /&gt;
|manet&lt;br /&gt;
|2023/11/29&lt;br /&gt;
|-&lt;br /&gt;
|红米K70&lt;br /&gt;
|vermeer&lt;br /&gt;
|2023/11/29&lt;br /&gt;
|-&lt;br /&gt;
|红米13C / POCO C65&lt;br /&gt;
|gale&lt;br /&gt;
|2023/11/10&lt;br /&gt;
|-&lt;br /&gt;
|小米14  Pro&lt;br /&gt;
|shennong&lt;br /&gt;
|2023/10/26&lt;br /&gt;
|-&lt;br /&gt;
|小米14&lt;br /&gt;
|houji&lt;br /&gt;
|2023/10/26&lt;br /&gt;
|-&lt;br /&gt;
|小米13T&lt;br /&gt;
|aristotle&lt;br /&gt;
|2023/9/26&lt;br /&gt;
|-&lt;br /&gt;
|红米Note13 Pro 4G / POCO X6&lt;br /&gt;
|garnet&lt;br /&gt;
|2023/9/21&lt;br /&gt;
|-&lt;br /&gt;
|红米Note13  5G / 13R Pro&lt;br /&gt;
|gold&lt;br /&gt;
|2023/9/21&lt;br /&gt;
|-&lt;br /&gt;
|红米Note13 Pro 5G / Pro+ 5G&lt;br /&gt;
|zircon&lt;br /&gt;
|2023/9/21&lt;br /&gt;
|-&lt;br /&gt;
|红米平板SE&lt;br /&gt;
|xun&lt;br /&gt;
|2023/8/15&lt;br /&gt;
|-&lt;br /&gt;
|小米MIX Fold 3&lt;br /&gt;
|babylon&lt;br /&gt;
|2023/8/14&lt;br /&gt;
|-&lt;br /&gt;
|红米K60  至尊版 / 小米13T Pro&lt;br /&gt;
|corot&lt;br /&gt;
|2023/8/14&lt;br /&gt;
|-&lt;br /&gt;
|小米平板6 Max&lt;br /&gt;
|yudi&lt;br /&gt;
|2023/8/14&lt;br /&gt;
|-&lt;br /&gt;
|POCO  M6 Pro 4G&lt;br /&gt;
|emerald&lt;br /&gt;
|2023/8/5&lt;br /&gt;
|-&lt;br /&gt;
|红米Note12R / POCO M6 Pro 5G /  红米12 5G&lt;br /&gt;
|sky&lt;br /&gt;
|2023/6/23&lt;br /&gt;
|-&lt;br /&gt;
|红米12&lt;br /&gt;
|fire&lt;br /&gt;
|2023/6/3&lt;br /&gt;
|-&lt;br /&gt;
|红米Note12T Pro&lt;br /&gt;
|pearl&lt;br /&gt;
|2023/5/29&lt;br /&gt;
|-&lt;br /&gt;
|小米CIVI3&lt;br /&gt;
|yuechu&lt;br /&gt;
|2023/5/25&lt;br /&gt;
|-&lt;br /&gt;
|红米Note12S&lt;br /&gt;
|sea&lt;br /&gt;
|2023/4/26&lt;br /&gt;
|-&lt;br /&gt;
|小米13  Ultra&lt;br /&gt;
|ishtar&lt;br /&gt;
|2023/4/18&lt;br /&gt;
|-&lt;br /&gt;
|小米平板6 Pro&lt;br /&gt;
|liuqin&lt;br /&gt;
|2023/4/18&lt;br /&gt;
|-&lt;br /&gt;
|小米平板6&lt;br /&gt;
|pipa&lt;br /&gt;
|2023/4/18&lt;br /&gt;
|-&lt;br /&gt;
|红米Note12 Pro 4G&lt;br /&gt;
|sweet_k6a&lt;br /&gt;
|2023/4/11&lt;br /&gt;
|-&lt;br /&gt;
|红米Note12  4G NFC&lt;br /&gt;
|topaz&lt;br /&gt;
|2023/3/30&lt;br /&gt;
|-&lt;br /&gt;
|红米Note12 4G&lt;br /&gt;
|tapas&lt;br /&gt;
|2023/3/30&lt;br /&gt;
|-&lt;br /&gt;
|红米Note12  Turbo / POCO F5 5G&lt;br /&gt;
|marble&lt;br /&gt;
|2023/3/28&lt;br /&gt;
|-&lt;br /&gt;
|POCO C51 / 红米A2 / A2+&lt;br /&gt;
|water&lt;br /&gt;
|2023/3/24&lt;br /&gt;
|-&lt;br /&gt;
|红米12C  / POCO C55&lt;br /&gt;
|earth&lt;br /&gt;
|2022/12/31&lt;br /&gt;
|-&lt;br /&gt;
|红米Note12 Pro 极速版 / POCO X5 Pro  5G&lt;br /&gt;
|redwood&lt;br /&gt;
|2022/12/27&lt;br /&gt;
|-&lt;br /&gt;
|红米K60E&lt;br /&gt;
|rembrandt&lt;br /&gt;
|2022/12/27&lt;br /&gt;
|-&lt;br /&gt;
|红米K60 Pro&lt;br /&gt;
|socrates&lt;br /&gt;
|2022/12/27&lt;br /&gt;
|-&lt;br /&gt;
|红米K60  / POCO F5 Pro&lt;br /&gt;
|mondrian&lt;br /&gt;
|2022/12/27&lt;br /&gt;
|-&lt;br /&gt;
|小米13 Pro&lt;br /&gt;
|nuwa&lt;br /&gt;
|2022/12/12&lt;br /&gt;
|-&lt;br /&gt;
|小米13&lt;br /&gt;
|fuxi&lt;br /&gt;
|2022/12/12&lt;br /&gt;
|-&lt;br /&gt;
|POCO X5 5G&lt;br /&gt;
|moonstone&lt;br /&gt;
|2022/11/20&lt;br /&gt;
|-&lt;br /&gt;
|红米Note12  5G / 红米Note12R Pro&lt;br /&gt;
|sunstone&lt;br /&gt;
|2022/10/27&lt;br /&gt;
|-&lt;br /&gt;
|红米Note12 Pro&lt;br /&gt;
|ruby&lt;br /&gt;
|2022/10/27&lt;br /&gt;
|-&lt;br /&gt;
|小米12T&lt;br /&gt;
|plato&lt;br /&gt;
|2022/10/4&lt;br /&gt;
|-&lt;br /&gt;
|红米平板&lt;br /&gt;
|yunluo&lt;br /&gt;
|2022/10/4&lt;br /&gt;
|-&lt;br /&gt;
|小米CIVI  2 / 小米13 Lite&lt;br /&gt;
|ziyi&lt;br /&gt;
|2022/9/27&lt;br /&gt;
|-&lt;br /&gt;
|POCO C50 / 红米A1&lt;br /&gt;
|ice&lt;br /&gt;
|2022/9/15&lt;br /&gt;
|-&lt;br /&gt;
|POCO  M5S&lt;br /&gt;
|rosemary_p&lt;br /&gt;
|2022/9/5&lt;br /&gt;
|-&lt;br /&gt;
|POCO M5 / 红米11 Prime 4G&lt;br /&gt;
|rock&lt;br /&gt;
|2022/9/5&lt;br /&gt;
|-&lt;br /&gt;
|小米平板5  Pro 12.4&lt;br /&gt;
|dagu&lt;br /&gt;
|2022/8/11&lt;br /&gt;
|-&lt;br /&gt;
|红米K50 至尊版 / 小米12T Pro&lt;br /&gt;
|diting&lt;br /&gt;
|2022/8/11&lt;br /&gt;
|-&lt;br /&gt;
|小米MIX  Fold 2&lt;br /&gt;
|zizhan&lt;br /&gt;
|2022/8/11&lt;br /&gt;
|-&lt;br /&gt;
|小米12S&lt;br /&gt;
|mayfly&lt;br /&gt;
|2022/7/4&lt;br /&gt;
|-&lt;br /&gt;
|小米12S  Ultra&lt;br /&gt;
|thor&lt;br /&gt;
|2022/7/4&lt;br /&gt;
|-&lt;br /&gt;
|小米12S Pro&lt;br /&gt;
|unicorn&lt;br /&gt;
|2022/7/4&lt;br /&gt;
|-&lt;br /&gt;
|小米12  Pro 天玑版&lt;br /&gt;
|daumier&lt;br /&gt;
|2022/7/4&lt;br /&gt;
|-&lt;br /&gt;
|小米12 Lite&lt;br /&gt;
|taoyao&lt;br /&gt;
|2022/7/4&lt;br /&gt;
|-&lt;br /&gt;
|POCO  C40&lt;br /&gt;
|frost&lt;br /&gt;
|2022/6/17&lt;br /&gt;
|-&lt;br /&gt;
|红米Note11T Pro / Pro+ / POCO X4  GT / Pro / 红米K50i / Pro&lt;br /&gt;
|xaga&lt;br /&gt;
|2022/5/24&lt;br /&gt;
|-&lt;br /&gt;
|小米CIVI  1S&lt;br /&gt;
|zijin&lt;br /&gt;
|2022/4/21&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 10T&lt;br /&gt;
|lilac&lt;br /&gt;
|2022/4/14&lt;br /&gt;
|-&lt;br /&gt;
|红米10A&lt;br /&gt;
|dandelion&lt;br /&gt;
|2022/3/29&lt;br /&gt;
|-&lt;br /&gt;
|红米10C&lt;br /&gt;
|fog&lt;br /&gt;
|2022/3/17&lt;br /&gt;
|-&lt;br /&gt;
|红米K50&lt;br /&gt;
|rubens&lt;br /&gt;
|2022/3/17&lt;br /&gt;
|-&lt;br /&gt;
|红米K50 Pro&lt;br /&gt;
|matisse&lt;br /&gt;
|2022/3/17&lt;br /&gt;
|-&lt;br /&gt;
|红米K40S  / POCO F4&lt;br /&gt;
|munch&lt;br /&gt;
|2022/3/17&lt;br /&gt;
|-&lt;br /&gt;
|红米Note11 Pro&lt;br /&gt;
|viva&lt;br /&gt;
|2022/3/7&lt;br /&gt;
|-&lt;br /&gt;
|红米Note11R&lt;br /&gt;
|lightcm&lt;br /&gt;
|2022/3/7&lt;br /&gt;
|-&lt;br /&gt;
|红米Note11E / POCO M4 5G / 红米10  Prime+ 5G&lt;br /&gt;
|light&lt;br /&gt;
|2022/3/7&lt;br /&gt;
|-&lt;br /&gt;
|红米K50  电竞版 / POCO F4 GT&lt;br /&gt;
|ingres&lt;br /&gt;
|2022/2/16&lt;br /&gt;
|-&lt;br /&gt;
|红米Note11 NFC&lt;br /&gt;
|spesn&lt;br /&gt;
|2022/2/7&lt;br /&gt;
|-&lt;br /&gt;
|红米Note11&lt;br /&gt;
|spes&lt;br /&gt;
|2022/2/7&lt;br /&gt;
|-&lt;br /&gt;
|红米Note11E Pro / 红米Note11 Pro 5G&lt;br /&gt;
|veux&lt;br /&gt;
|2022/1/26&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  11S 5G&lt;br /&gt;
|opal&lt;br /&gt;
|2022/1/26&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 11S / POCO M4 Pro 4G&lt;br /&gt;
|fleur&lt;br /&gt;
|2022/1/26&lt;br /&gt;
|-&lt;br /&gt;
|小米12  Pro&lt;br /&gt;
|zeus&lt;br /&gt;
|2021/12/28&lt;br /&gt;
|-&lt;br /&gt;
|小米12X&lt;br /&gt;
|psyche&lt;br /&gt;
|2021/12/28&lt;br /&gt;
|-&lt;br /&gt;
|小米12&lt;br /&gt;
|cupid&lt;br /&gt;
|2021/12/28&lt;br /&gt;
|-&lt;br /&gt;
|POCO M4 Pro 5G&lt;br /&gt;
|evergreen&lt;br /&gt;
|2021/11/9&lt;br /&gt;
|-&lt;br /&gt;
|红米Note11  Pro / Pro+&lt;br /&gt;
|pissarro&lt;br /&gt;
|2021/10/28&lt;br /&gt;
|-&lt;br /&gt;
|红米Note11 5G&lt;br /&gt;
|evergo&lt;br /&gt;
|2021/10/28&lt;br /&gt;
|-&lt;br /&gt;
|红米Note11  4G&lt;br /&gt;
|selenes&lt;br /&gt;
|2021/10/28&lt;br /&gt;
|-&lt;br /&gt;
|小米CIVI&lt;br /&gt;
|mona&lt;br /&gt;
|2021/9/27&lt;br /&gt;
|-&lt;br /&gt;
|小米11青春活力版&lt;br /&gt;
|lisa&lt;br /&gt;
|2021/9/15&lt;br /&gt;
|-&lt;br /&gt;
|小米11T&lt;br /&gt;
|agate&lt;br /&gt;
|2021/9/15&lt;br /&gt;
|-&lt;br /&gt;
|小米11T  Pro&lt;br /&gt;
|vili&lt;br /&gt;
|2021/9/15&lt;br /&gt;
|-&lt;br /&gt;
|红米10&lt;br /&gt;
|selene&lt;br /&gt;
|2021/8/19&lt;br /&gt;
|-&lt;br /&gt;
|小米MIX4&lt;br /&gt;
|odin&lt;br /&gt;
|2021/8/10&lt;br /&gt;
|-&lt;br /&gt;
|小米平板5 Pro (WiFi)&lt;br /&gt;
|elish&lt;br /&gt;
|2021/8/10&lt;br /&gt;
|-&lt;br /&gt;
|小米平板5  Pro (5G)&lt;br /&gt;
|enuma&lt;br /&gt;
|2021/8/10&lt;br /&gt;
|-&lt;br /&gt;
|小米平板5&lt;br /&gt;
|nabu&lt;br /&gt;
|2021/8/10&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  10 Pro (China) / POCO X3 GT&lt;br /&gt;
|chopin&lt;br /&gt;
|2021/5/26&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 10 (China) / POCO M3 Pro  / 红米Note 11 SE&lt;br /&gt;
|camellia&lt;br /&gt;
|2021/5/26&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  8 (21年款)&lt;br /&gt;
|biloba&lt;br /&gt;
|2021/5/24&lt;br /&gt;
|-&lt;br /&gt;
|红米K40 游戏增强版 / POCO F3 GT&lt;br /&gt;
|ares&lt;br /&gt;
|2021/4/27&lt;br /&gt;
|-&lt;br /&gt;
|小米MIX  Fold&lt;br /&gt;
|cetus&lt;br /&gt;
|2021/3/29&lt;br /&gt;
|-&lt;br /&gt;
|小米11 青春版&lt;br /&gt;
|renoir&lt;br /&gt;
|2021/3/29&lt;br /&gt;
|-&lt;br /&gt;
|小米11  Pro / Ultra&lt;br /&gt;
|star&lt;br /&gt;
|2021/3/29&lt;br /&gt;
|-&lt;br /&gt;
|小米11 Lite&lt;br /&gt;
|courbet&lt;br /&gt;
|2021/3/29&lt;br /&gt;
|-&lt;br /&gt;
|POCO  X3 Pro&lt;br /&gt;
|vayu&lt;br /&gt;
|2021/3/22&lt;br /&gt;
|-&lt;br /&gt;
|小米10S&lt;br /&gt;
|thyme&lt;br /&gt;
|2021/3/10&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  10 Pro&lt;br /&gt;
|sweet&lt;br /&gt;
|2021/3/4&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 10 5G&lt;br /&gt;
|camellian&lt;br /&gt;
|2021/3/4&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  10S&lt;br /&gt;
|rosemary&lt;br /&gt;
|2021/3/4&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 10&lt;br /&gt;
|mojito&lt;br /&gt;
|2021/3/4&lt;br /&gt;
|-&lt;br /&gt;
|红米K40  Pro / Pro+ / 小米11i / 小米11X Pro&lt;br /&gt;
|haydn&lt;br /&gt;
|2021/2/25&lt;br /&gt;
|-&lt;br /&gt;
|红米K40 / POCO F3&lt;br /&gt;
|alioth&lt;br /&gt;
|2021/2/25&lt;br /&gt;
|-&lt;br /&gt;
|小米11&lt;br /&gt;
|venus&lt;br /&gt;
|2020/12/28&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 9T 5G&lt;br /&gt;
|cannong&lt;br /&gt;
|2020/12/1&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  9 Pro 5G / 小米10T Lite&lt;br /&gt;
|gauguin&lt;br /&gt;
|2020/11/26&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 9 5G&lt;br /&gt;
|cannon&lt;br /&gt;
|2020/11/26&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  9 4G / 红米9T&lt;br /&gt;
|lime&lt;br /&gt;
|2020/11/26&lt;br /&gt;
|-&lt;br /&gt;
|POCO M3&lt;br /&gt;
|citrus&lt;br /&gt;
|2020/11/24&lt;br /&gt;
|-&lt;br /&gt;
|红米K30S  至尊纪念版 / 小米10T / 10T Pro&lt;br /&gt;
|apollo&lt;br /&gt;
|2020/10/27&lt;br /&gt;
|-&lt;br /&gt;
|POCO C3&lt;br /&gt;
|angelicain&lt;br /&gt;
|2020/10/6&lt;br /&gt;
|-&lt;br /&gt;
|POCO  M2&lt;br /&gt;
|shiva&lt;br /&gt;
|2020/9/8&lt;br /&gt;
|-&lt;br /&gt;
|POCO X3 NFC&lt;br /&gt;
|surya&lt;br /&gt;
|2020/9/7&lt;br /&gt;
|-&lt;br /&gt;
|红米9C  NFC&lt;br /&gt;
|angelican&lt;br /&gt;
|2020/8/31&lt;br /&gt;
|-&lt;br /&gt;
|红米9 (India)&lt;br /&gt;
|cattail&lt;br /&gt;
|2020/8/27&lt;br /&gt;
|-&lt;br /&gt;
|小米10  至尊纪念版&lt;br /&gt;
|cas&lt;br /&gt;
|2020/8/11&lt;br /&gt;
|-&lt;br /&gt;
|红米K30 至尊纪念版&lt;br /&gt;
|cezanne&lt;br /&gt;
|2020/8/11&lt;br /&gt;
|-&lt;br /&gt;
|POCO  M2 Pro&lt;br /&gt;
|gram&lt;br /&gt;
|2020/7/7&lt;br /&gt;
|-&lt;br /&gt;
|红米9A / 9AT&lt;br /&gt;
|dandelion&lt;br /&gt;
|2020/6/30&lt;br /&gt;
|-&lt;br /&gt;
|红米9C&lt;br /&gt;
|angelica&lt;br /&gt;
|2020/6/30&lt;br /&gt;
|-&lt;br /&gt;
|红米9&lt;br /&gt;
|lancelot&lt;br /&gt;
|2020/6/15&lt;br /&gt;
|-&lt;br /&gt;
|小米Note10  Lite&lt;br /&gt;
|toco&lt;br /&gt;
|2020/5/30&lt;br /&gt;
|-&lt;br /&gt;
|红米10X Pro&lt;br /&gt;
|bomb&lt;br /&gt;
|2020/5/26&lt;br /&gt;
|-&lt;br /&gt;
|红米10X  5G&lt;br /&gt;
|atom&lt;br /&gt;
|2020/5/26&lt;br /&gt;
|-&lt;br /&gt;
|红米K30i 5G&lt;br /&gt;
|picasso_48m&lt;br /&gt;
|2020/5/26&lt;br /&gt;
|-&lt;br /&gt;
|红米10X  4G / 红米Note 9&lt;br /&gt;
|merlin&lt;br /&gt;
|2020/4/30&lt;br /&gt;
|-&lt;br /&gt;
|小米10 青春版&lt;br /&gt;
|vangogh&lt;br /&gt;
|2020/4/27&lt;br /&gt;
|-&lt;br /&gt;
|小米10  Lite&lt;br /&gt;
|monet&lt;br /&gt;
|2020/3/27&lt;br /&gt;
|-&lt;br /&gt;
|红米K30 Pro / 变焦版 / POCO F2 Pro&lt;br /&gt;
|lmi&lt;br /&gt;
|2020/3/24&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  9 Pro Max&lt;br /&gt;
|excalibur&lt;br /&gt;
|2020/3/12&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 9S / Pro (India)&lt;br /&gt;
|curtana&lt;br /&gt;
|2020/3/12&lt;br /&gt;
|-&lt;br /&gt;
|红米Note9  Pro&lt;br /&gt;
|joyeuse&lt;br /&gt;
|2020/3/12&lt;br /&gt;
|-&lt;br /&gt;
|小米10 Pro&lt;br /&gt;
|cmi&lt;br /&gt;
|2020/2/13&lt;br /&gt;
|-&lt;br /&gt;
|小米10&lt;br /&gt;
|umi&lt;br /&gt;
|2020/2/13&lt;br /&gt;
|-&lt;br /&gt;
|红米8A Pro / 红米8A Dual&lt;br /&gt;
|olivewood&lt;br /&gt;
|2020/2/11&lt;br /&gt;
|-&lt;br /&gt;
|POCO  X2 印度版&lt;br /&gt;
|phoenixin&lt;br /&gt;
|2020/2/4&lt;br /&gt;
|-&lt;br /&gt;
|红米K30 5G&lt;br /&gt;
|picasso&lt;br /&gt;
|2019/12/10&lt;br /&gt;
|-&lt;br /&gt;
|红米K30  4G / POCO X2&lt;br /&gt;
|phoenix&lt;br /&gt;
|2019/12/10&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 8T&lt;br /&gt;
|willow&lt;br /&gt;
|2019/11/6&lt;br /&gt;
|-&lt;br /&gt;
|小米CC9  Pro / 小米Note 10&lt;br /&gt;
|tucana&lt;br /&gt;
|2019/11/6&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 8 Pro 印度版&lt;br /&gt;
|begoniain&lt;br /&gt;
|2019/10/21&lt;br /&gt;
|-&lt;br /&gt;
|红米8&lt;br /&gt;
|olive&lt;br /&gt;
|2019/10/9&lt;br /&gt;
|-&lt;br /&gt;
|红米8A&lt;br /&gt;
|olivelite&lt;br /&gt;
|2019/9/25&lt;br /&gt;
|-&lt;br /&gt;
|小米9  Pro 5G&lt;br /&gt;
|crux&lt;br /&gt;
|2019/9/24&lt;br /&gt;
|-&lt;br /&gt;
|红米K20 Pro 尊享版&lt;br /&gt;
|raphaels&lt;br /&gt;
|2019/9/19&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  8 Pro&lt;br /&gt;
|begonia&lt;br /&gt;
|2019/8/29&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 8&lt;br /&gt;
|ginkgo&lt;br /&gt;
|2019/8/29&lt;br /&gt;
|-&lt;br /&gt;
|小米A3&lt;br /&gt;
|laurel&lt;br /&gt;
|2019/7/17&lt;br /&gt;
|-&lt;br /&gt;
|小米CC9e&lt;br /&gt;
|laurus&lt;br /&gt;
|2019/7/2&lt;br /&gt;
|-&lt;br /&gt;
|小米CC9  / 小米9 Lite&lt;br /&gt;
|pyxis&lt;br /&gt;
|2019/7/2&lt;br /&gt;
|-&lt;br /&gt;
|小米CC9 美图定制版&lt;br /&gt;
|vela&lt;br /&gt;
|2019/7/2&lt;br /&gt;
|-&lt;br /&gt;
|红米K20  / 小米9T 印度版&lt;br /&gt;
|davinciin&lt;br /&gt;
|2019/6/12&lt;br /&gt;
|-&lt;br /&gt;
|红米K20 / 小米9T&lt;br /&gt;
|davinci&lt;br /&gt;
|2019/5/28&lt;br /&gt;
|-&lt;br /&gt;
|红米K20  Pro / 小米9T Pro&lt;br /&gt;
|raphael&lt;br /&gt;
|2019/5/28&lt;br /&gt;
|-&lt;br /&gt;
|红米K20 Pro 印度版&lt;br /&gt;
|raphaelin&lt;br /&gt;
|2019/5/28&lt;br /&gt;
|-&lt;br /&gt;
|红米7A&lt;br /&gt;
|pine&lt;br /&gt;
|2019/5/22&lt;br /&gt;
|-&lt;br /&gt;
|红米Y3&lt;br /&gt;
|onc&lt;br /&gt;
|2019/4/24&lt;br /&gt;
|-&lt;br /&gt;
|红米7&lt;br /&gt;
|onclite&lt;br /&gt;
|2019/3/18&lt;br /&gt;
|-&lt;br /&gt;
|小米MIX 3 5G&lt;br /&gt;
|andromeda&lt;br /&gt;
|2019/2/24&lt;br /&gt;
|-&lt;br /&gt;
|小米9&lt;br /&gt;
|cepheus&lt;br /&gt;
|2019/2/20&lt;br /&gt;
|-&lt;br /&gt;
|小米9 SE&lt;br /&gt;
|grus&lt;br /&gt;
|2019/2/20&lt;br /&gt;
|-&lt;br /&gt;
|红米Go&lt;br /&gt;
|tiare&lt;br /&gt;
|2019/1/29&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 7&lt;br /&gt;
|lavender&lt;br /&gt;
|2019/1/10&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  7 Pro&lt;br /&gt;
|violet&lt;br /&gt;
|2019/1/10&lt;br /&gt;
|-&lt;br /&gt;
|小米Play&lt;br /&gt;
|lotus&lt;br /&gt;
|2018/12/24&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  6 Pro&lt;br /&gt;
|tulip&lt;br /&gt;
|2018/11/22&lt;br /&gt;
|-&lt;br /&gt;
|小米MIX 3&lt;br /&gt;
|perseus&lt;br /&gt;
|2018/10/25&lt;br /&gt;
|-&lt;br /&gt;
|小米8  Lite&lt;br /&gt;
|platina&lt;br /&gt;
|2018/9/19&lt;br /&gt;
|-&lt;br /&gt;
|红米6 Pro&lt;br /&gt;
|sakura&lt;br /&gt;
|2018/9/5&lt;br /&gt;
|-&lt;br /&gt;
|POCO  F1&lt;br /&gt;
|beryllium&lt;br /&gt;
|2018/8/22&lt;br /&gt;
|-&lt;br /&gt;
|小米平板4/Plus&lt;br /&gt;
|clover&lt;br /&gt;
|2018/8/14&lt;br /&gt;
|-&lt;br /&gt;
|小米A2  Lite&lt;br /&gt;
|daisy&lt;br /&gt;
|2018/7/24&lt;br /&gt;
|-&lt;br /&gt;
|小米A2&lt;br /&gt;
|jasmine&lt;br /&gt;
|2018/7/24&lt;br /&gt;
|-&lt;br /&gt;
|小米Max  3&lt;br /&gt;
|nitrogen&lt;br /&gt;
|2018/7/19&lt;br /&gt;
|-&lt;br /&gt;
|红米6A&lt;br /&gt;
|cactus&lt;br /&gt;
|2018/6/12&lt;br /&gt;
|-&lt;br /&gt;
|红米6&lt;br /&gt;
|cereus&lt;br /&gt;
|2018/6/12&lt;br /&gt;
|-&lt;br /&gt;
|小米8&lt;br /&gt;
|dipper&lt;br /&gt;
|2018/5/31&lt;br /&gt;
|-&lt;br /&gt;
|小米8  Pro 屏幕指纹版&lt;br /&gt;
|equuleus&lt;br /&gt;
|2018/5/31&lt;br /&gt;
|-&lt;br /&gt;
|小米8 SE&lt;br /&gt;
|sirius&lt;br /&gt;
|2018/5/31&lt;br /&gt;
|-&lt;br /&gt;
|小米8  透明探索版&lt;br /&gt;
|ursa&lt;br /&gt;
|2018/5/31&lt;br /&gt;
|-&lt;br /&gt;
|红米S2 / 红米Y2&lt;br /&gt;
|ysl&lt;br /&gt;
|2018/5/10&lt;br /&gt;
|-&lt;br /&gt;
|小米6X&lt;br /&gt;
|wayne&lt;br /&gt;
|2018/4/25&lt;br /&gt;
|-&lt;br /&gt;
|小米MIX 2S&lt;br /&gt;
|polaris&lt;br /&gt;
|2018/3/27&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  5 / Pro&lt;br /&gt;
|whyred&lt;br /&gt;
|2018/2/14&lt;br /&gt;
|-&lt;br /&gt;
|红米5&lt;br /&gt;
|rosy&lt;br /&gt;
|2017/12/7&lt;br /&gt;
|-&lt;br /&gt;
|红米5  Plus&lt;br /&gt;
|vince&lt;br /&gt;
|2017/12/7&lt;br /&gt;
|-&lt;br /&gt;
|红米5A&lt;br /&gt;
|riva&lt;br /&gt;
|2017/10/20&lt;br /&gt;
|-&lt;br /&gt;
|小米MIX  2&lt;br /&gt;
|chiron&lt;br /&gt;
|2017/9/11&lt;br /&gt;
|-&lt;br /&gt;
|小米Note 3&lt;br /&gt;
|jason&lt;br /&gt;
|2017/9/11&lt;br /&gt;
|-&lt;br /&gt;
|小米A1&lt;br /&gt;
|tissot&lt;br /&gt;
|2017/9/5&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 5A 高配版&lt;br /&gt;
|ugg&lt;br /&gt;
|2017/8/21&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  5A 标准版&lt;br /&gt;
|ugglite&lt;br /&gt;
|2017/8/21&lt;br /&gt;
|-&lt;br /&gt;
|小米5X&lt;br /&gt;
|tiffany&lt;br /&gt;
|2017/7/26&lt;br /&gt;
|-&lt;br /&gt;
|小米Max  2&lt;br /&gt;
|oxygen&lt;br /&gt;
|2017/5/25&lt;br /&gt;
|-&lt;br /&gt;
|小米6&lt;br /&gt;
|sagit&lt;br /&gt;
|2017/4/19&lt;br /&gt;
|-&lt;br /&gt;
|小米平板3&lt;br /&gt;
|cappu&lt;br /&gt;
|2017/4/6&lt;br /&gt;
|-&lt;br /&gt;
|小米5C&lt;br /&gt;
|meri&lt;br /&gt;
|2017/2/28&lt;br /&gt;
|-&lt;br /&gt;
|红米4X&lt;br /&gt;
|santoni&lt;br /&gt;
|2017/2/28&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 4X 高通版&lt;br /&gt;
|mido&lt;br /&gt;
|2017/1/19&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  4 联发科版&lt;br /&gt;
|nikel&lt;br /&gt;
|2017/1/19&lt;br /&gt;
|-&lt;br /&gt;
|红米4 高配版&lt;br /&gt;
|markw&lt;br /&gt;
|2016/11/4&lt;br /&gt;
|-&lt;br /&gt;
|红米4  标准版&lt;br /&gt;
|prada&lt;br /&gt;
|2016/11/4&lt;br /&gt;
|-&lt;br /&gt;
|红米4A&lt;br /&gt;
|rolex&lt;br /&gt;
|2016/11/4&lt;br /&gt;
|-&lt;br /&gt;
|小米MIX&lt;br /&gt;
|lithium&lt;br /&gt;
|2016/10/25&lt;br /&gt;
|-&lt;br /&gt;
|小米Note 2&lt;br /&gt;
|scorpio&lt;br /&gt;
|2016/10/25&lt;br /&gt;
|-&lt;br /&gt;
|小米5S&lt;br /&gt;
|capricorn&lt;br /&gt;
|2016/9/27&lt;br /&gt;
|-&lt;br /&gt;
|小米5S Plus&lt;br /&gt;
|natrium&lt;br /&gt;
|2016/9/27&lt;br /&gt;
|-&lt;br /&gt;
|红米Pro&lt;br /&gt;
|omega&lt;br /&gt;
|2016/7/27&lt;br /&gt;
|-&lt;br /&gt;
|红米3S&lt;br /&gt;
|land&lt;br /&gt;
|2016/6/15&lt;br /&gt;
|-&lt;br /&gt;
|小米Max  高配版&lt;br /&gt;
|helium&lt;br /&gt;
|2016/6/1&lt;br /&gt;
|-&lt;br /&gt;
|小米Max 标准版&lt;br /&gt;
|hydrogen&lt;br /&gt;
|2016/5/10&lt;br /&gt;
|-&lt;br /&gt;
|小米4S&lt;br /&gt;
|aqua&lt;br /&gt;
|2016/2/24&lt;br /&gt;
|-&lt;br /&gt;
|小米5&lt;br /&gt;
|gemini&lt;br /&gt;
|2016/2/24&lt;br /&gt;
|-&lt;br /&gt;
|红米3  / Pro&lt;br /&gt;
|ido&lt;br /&gt;
|2016/1/10&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 3 台湾特别版&lt;br /&gt;
|kate&lt;br /&gt;
|2015/11/25&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  3 全网通版&lt;br /&gt;
|kenzo&lt;br /&gt;
|2015/11/25&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 3 双网通版&lt;br /&gt;
|hennessy&lt;br /&gt;
|2015/11/24&lt;br /&gt;
|-&lt;br /&gt;
|小米平板2&lt;br /&gt;
|latte&lt;br /&gt;
|2015/11/24&lt;br /&gt;
|-&lt;br /&gt;
|小米4C&lt;br /&gt;
|libra&lt;br /&gt;
|2015/9/22&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  2&lt;br /&gt;
|hermes&lt;br /&gt;
|2015/8/13&lt;br /&gt;
|-&lt;br /&gt;
|小米4i&lt;br /&gt;
|ferrari&lt;br /&gt;
|2015/4/23&lt;br /&gt;
|-&lt;br /&gt;
|红米2A  标准版&lt;br /&gt;
|lte26007&lt;br /&gt;
|2015/3/1&lt;br /&gt;
|-&lt;br /&gt;
|小米Note 顶配版&lt;br /&gt;
|leo&lt;br /&gt;
|2015/1/15&lt;br /&gt;
|-&lt;br /&gt;
|小米Note  双网通 / 全网通&lt;br /&gt;
|virgo&lt;br /&gt;
|2015/1/15&lt;br /&gt;
|-&lt;br /&gt;
|红米手机2 增强版&lt;br /&gt;
|wt86047&lt;br /&gt;
|2015/1/4&lt;br /&gt;
|-&lt;br /&gt;
|红米手机2&lt;br /&gt;
|wt88047&lt;br /&gt;
|2015/1/4&lt;br /&gt;
|-&lt;br /&gt;
|红米Note 4G单卡版&lt;br /&gt;
|dior&lt;br /&gt;
|2014/8/12&lt;br /&gt;
|-&lt;br /&gt;
|红米Note  4G双卡版&lt;br /&gt;
|gucci&lt;br /&gt;
|2014/8/12&lt;br /&gt;
|-&lt;br /&gt;
|小米3 / 小米4&lt;br /&gt;
|cancro&lt;br /&gt;
|2014/7/22&lt;br /&gt;
|-&lt;br /&gt;
|红米手机1S&lt;br /&gt;
|armani&lt;br /&gt;
|2014/7/16&lt;br /&gt;
|-&lt;br /&gt;
|红米手机1S 移动3G版&lt;br /&gt;
|HM2014011&lt;br /&gt;
|2014/7/16&lt;br /&gt;
|-&lt;br /&gt;
|红米手机1S  移动4G版&lt;br /&gt;
|HM2014501&lt;br /&gt;
|2014/7/16&lt;br /&gt;
|-&lt;br /&gt;
|小米平板1&lt;br /&gt;
|mocha&lt;br /&gt;
|2014/5/15&lt;br /&gt;
|-&lt;br /&gt;
|红米Note&lt;br /&gt;
|lcsh92&lt;br /&gt;
|2014/3/20&lt;br /&gt;
|-&lt;br /&gt;
|小米2A&lt;br /&gt;
|taurus&lt;br /&gt;
|2013/10/24&lt;br /&gt;
|-&lt;br /&gt;
|小米3  移动版&lt;br /&gt;
|pisces&lt;br /&gt;
|2013/9/5&lt;br /&gt;
|-&lt;br /&gt;
|红米手机&lt;br /&gt;
|HM2013023&lt;br /&gt;
|2013/7/12&lt;br /&gt;
|-&lt;br /&gt;
|小米2S&lt;br /&gt;
|aries&lt;br /&gt;
|2013/6/17&lt;br /&gt;
|-&lt;br /&gt;
|小米1S&lt;br /&gt;
|mione&lt;br /&gt;
|2012/8/23&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Nothing Phone ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!机型设备&lt;br /&gt;
!机型型号&lt;br /&gt;
!机型代号&lt;br /&gt;
!发布时间&lt;br /&gt;
|-&lt;br /&gt;
|Nothing Phone (2) &lt;br /&gt;
|A065/AIN065(India)&lt;br /&gt;
|Pong&lt;br /&gt;
|2023/07/12&lt;br /&gt;
|-&lt;br /&gt;
|Nothing Phone (1)&lt;br /&gt;
|A603&lt;br /&gt;
|Spacewar&lt;br /&gt;
|2022/7/12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 一加 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!机型设备&lt;br /&gt;
!机型代号&lt;br /&gt;
!发布时间&lt;br /&gt;
|-&lt;br /&gt;
|一加 7T Pro 5G&lt;br /&gt;
|hotdogg&lt;br /&gt;
|2019/11/05&lt;br /&gt;
|-&lt;br /&gt;
|一加 7T Pro&lt;br /&gt;
|hotdog&lt;br /&gt;
|2019/10/15&lt;br /&gt;
|-&lt;br /&gt;
|一加 7T&lt;br /&gt;
|hotdogb&lt;br /&gt;
|2019/10/15&lt;br /&gt;
|-&lt;br /&gt;
|一加 7 Pro&lt;br /&gt;
|guacamole&lt;br /&gt;
|2019/05/16&lt;br /&gt;
|-&lt;br /&gt;
|一加 7&lt;br /&gt;
|guacamoleb&lt;br /&gt;
|2019/05/16&lt;br /&gt;
|-&lt;br /&gt;
|一加 6T&lt;br /&gt;
|fajita&lt;br /&gt;
|2018/11/05&lt;br /&gt;
|-&lt;br /&gt;
|一加 6&lt;br /&gt;
|enchilada&lt;br /&gt;
|2018/05/22&lt;br /&gt;
|-&lt;br /&gt;
|一加 5&lt;br /&gt;
|cheeseburger&lt;br /&gt;
|2017/11/28&lt;br /&gt;
|-&lt;br /&gt;
|一加 5T&lt;br /&gt;
|dumpling&lt;br /&gt;
|2017/12/01&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Fastboot_%E5%91%BD%E4%BB%A4&amp;diff=669</id>
		<title>Fastboot 命令</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Fastboot_%E5%91%BD%E4%BB%A4&amp;diff=669"/>
		<updated>2024-08-14T09:28:33Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​bootloader: 空行&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== '''&amp;lt;big&amp;gt;什么是Fastboot 命令？&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
我们在手机进入Fastboot模式后，可以连接电脑，通过Fastboot指令进行调试&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== '''列出Fastboot设备''' ====&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot devices&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;fastboot reboot&amp;lt;/code&amp;gt;            #重启⼿机&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot reboot-bootloader&amp;lt;/code&amp;gt;    #重启到bootloader模式,其实就是再次进入fastboot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''擦除相关（erase）''' ====&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot erase boot&amp;lt;/code&amp;gt;    #擦除boot分区(擦了引导就没了,会卡在第一屏,)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot erase recovery&amp;lt;/code&amp;gt;   #擦除recovery分区&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot erase system&amp;lt;/code&amp;gt;    #擦除system分区(擦了系统就没了,会卡在第二屏)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot erase userdata&amp;lt;/code&amp;gt;    #擦除userdata分区(可擦,清空数据用)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot erase cache&amp;lt;/code&amp;gt;    #擦除cache分区(可擦,清空数据用)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''刷入分区（flash）''' ====&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot flash boot boot.img&amp;lt;/code&amp;gt;    #写⼊boot分区&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot flash recovery recovery.img&amp;lt;/code&amp;gt;    写⼊recovery分&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot flash system system.img&amp;lt;/code&amp;gt;    #写⼊system分区&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''获取手机的全部信息''' ====&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot getvar all&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''切换槽位（ab/vab分区专属）''' ====&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot set_active other # 切换到另一个槽位。引导加载器模式也可用这条命令.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''其它:''' ====&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot -w reboot&amp;lt;/code&amp;gt;        #清除手机中所有数据然后重启，等同于系统中的“恢复出厂设置”，或Recovery模式的“清空所有数据”操作&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot boot &amp;lt;内核镜像文件名或路径&amp;gt;&amp;lt;/code&amp;gt;        #临时启动镜像，不会烧录和替换内核文件到存储中,类似于在PC端用U盘启动PE系统&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot oem device-info&amp;lt;/code&amp;gt;        #输出当前BL锁状态(非MTK)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot oem lks&amp;lt;/code&amp;gt;        #输出当前BL锁状态(MTK)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot oem reboot-recovery&amp;lt;/code&amp;gt;        #重启进入Recovery模式&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot oem poweroff&amp;lt;/code&amp;gt; #       拔掉数据线后关机&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot oem lock&amp;lt;/code&amp;gt;        #重新上BL锁并清空所有数据(需未开启root)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot oem unlock&amp;lt;/code&amp;gt;        #解除BL锁并清空所有数据(小米手机必须绑定账号,主动申请解锁,等待7天,使用工具才行)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot oem edl&amp;lt;/code&amp;gt;        #进入高通9008模式,无需工程线或主板短接,可无视BL锁线刷&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Fastboot_%E5%91%BD%E4%BB%A4&amp;diff=668</id>
		<title>Fastboot 命令</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Fastboot_%E5%91%BD%E4%BB%A4&amp;diff=668"/>
		<updated>2024-08-14T09:27:46Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​bootloader: 添加切换槽位命令&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== '''&amp;lt;big&amp;gt;什么是Fastboot 命令？&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
我们在手机进入Fastboot模式后，可以连接电脑，通过Fastboot指令进行调试&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== '''列出Fastboot设备''' ====&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot devices&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;fastboot reboot&amp;lt;/code&amp;gt;            #重启⼿机&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot reboot-bootloader&amp;lt;/code&amp;gt;    #重启到bootloader模式,其实就是再次进入fastboot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''擦除相关（erase）''' ====&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot erase boot&amp;lt;/code&amp;gt;    #擦除boot分区(擦了引导就没了,会卡在第一屏,)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot erase recovery&amp;lt;/code&amp;gt;   #擦除recovery分区&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot erase system&amp;lt;/code&amp;gt;    #擦除system分区(擦了系统就没了,会卡在第二屏)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot erase userdata&amp;lt;/code&amp;gt;    #擦除userdata分区(可擦,清空数据用)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot erase cache&amp;lt;/code&amp;gt;    #擦除cache分区(可擦,清空数据用)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''刷入分区（flash）''' ====&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot flash boot boot.img&amp;lt;/code&amp;gt;    #写⼊boot分区&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot flash recovery recovery.img&amp;lt;/code&amp;gt;    写⼊recovery分&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot flash system system.img&amp;lt;/code&amp;gt;    #写⼊system分区&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''获取手机的全部信息''' ====&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot getvar all&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''切换槽位（ab/vab分区专属）''' ====&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot set_active other # 切换到另一个槽位。引导加载器模式也可用这条命令.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''其它:''' ====&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot -w reboot&amp;lt;/code&amp;gt;        #清除手机中所有数据然后重启，等同于系统中的“恢复出厂设置”，或Recovery模式的“清空所有数据”操作&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot boot &amp;lt;内核镜像文件名或路径&amp;gt;&amp;lt;/code&amp;gt;        #临时启动镜像，不会烧录和替换内核文件到存储中,类似于在PC端用U盘启动PE系统&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot oem device-info&amp;lt;/code&amp;gt;        #输出当前BL锁状态(非MTK)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot oem lks&amp;lt;/code&amp;gt;        #输出当前BL锁状态(MTK)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot oem reboot-recovery&amp;lt;/code&amp;gt;        #重启进入Recovery模式&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot oem poweroff&amp;lt;/code&amp;gt; #       拔掉数据线后关机&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot oem lock&amp;lt;/code&amp;gt;        #重新上BL锁并清空所有数据(需未开启root)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot oem unlock&amp;lt;/code&amp;gt;        #解除BL锁并清空所有数据(小米手机必须绑定账号,主动申请解锁,等待7天,使用工具才行)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fastboot oem edl&amp;lt;/code&amp;gt;        #进入高通9008模式,无需工程线或主板短接,可无视BL锁线刷&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Fastbootd&amp;diff=667</id>
		<title>Fastbootd</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Fastbootd&amp;diff=667"/>
		<updated>2024-08-14T09:26:14Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​删除重复命令&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== 提示：本教程不是指引导加载程序。 ====&lt;br /&gt;
&lt;br /&gt;
== 关于fastbootd ==&lt;br /&gt;
&lt;br /&gt;
Fastbootd，即用户空间fastboot，是在Android 10开始使用的功能更为强大的刷机模式。&lt;br /&gt;
&lt;br /&gt;
您可以简单理解为fastbootd就是fastboot的升级版。&lt;br /&gt;
&lt;br /&gt;
一般来说fastbootd会整合进recovery。在类原生上，从recovery进入fastbootd方法一般是Advanced -&amp;gt; Enter fastboot。&lt;br /&gt;
&lt;br /&gt;
fastbootd支持对动态分区进行调整和刷写。具体请看下文。&lt;br /&gt;
&lt;br /&gt;
本文不会重复介绍引导加载器一章里的命令。如有必要请前往引导加载器页面：https://wiki.uotan.cn/index.php?title=Fastboot_%E5%91%BD%E4%BB%A4&lt;br /&gt;
&lt;br /&gt;
===== 注意：fastbootd要求最新adb-fastboot工具包，请自行去Google官网下载最新版！ =====&lt;br /&gt;
&lt;br /&gt;
== 命令及详细介绍 ==&lt;br /&gt;
&lt;br /&gt;
===== 通用： =====&lt;br /&gt;
&lt;br /&gt;
* 进入fastbootd&lt;br /&gt;
 adb reboot fastboot # 开机状态&lt;br /&gt;
 fastboot reboot fastboot # 引导加载器状态&lt;br /&gt;
* 检查当前状态是否为fastbootd&lt;br /&gt;
 fastboot getvar is-userspace # 如果是，则返回yes；如果不是，则返回no&lt;br /&gt;
同理，您可以把&amp;lt;code&amp;gt;is-userspace&amp;lt;/code&amp;gt;替换为您需要的变量名进行获取。&lt;br /&gt;
&lt;br /&gt;
===== 动态分区专属： =====&lt;br /&gt;
* 清空/重新改造动态分区&lt;br /&gt;
 fastboot wipe-super path-to-super_empty.img # 使用&amp;lt;code&amp;gt;path-to-super_empty.img&amp;lt;/code&amp;gt;来清空动态分区内容并重新改造。在引导加载器也可以执行但是可能会出现玄学问题。&lt;br /&gt;
* 逻辑分区相关&lt;br /&gt;
 fastboot getvar is-logical:partition_name # 检查名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的分区是否是逻辑分区.&lt;br /&gt;
 fastboot delete-logical-partition partition_name # 删除名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的逻辑分区。&lt;br /&gt;
 fastboot create-logical-partition partition_name 1145141919810 # 新建一个名称为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;，大小为&amp;lt;code&amp;gt;1145141919810 Byte&amp;lt;/code&amp;gt;的逻辑分区。&lt;br /&gt;
 fastboot resize-logical-partition partition_name 1145141919810 # 将名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的大小修改为&amp;lt;code&amp;gt;1145141919810 Byte&amp;lt;/code&amp;gt;. 现有可用空间必须大于等于你所修改的分区大小.&lt;br /&gt;
* （危险！）在引导加载器模式下刷写动态分区内的分区&lt;br /&gt;
 fastboot --force flash partition_name path-to-image.img # 强制刷写分区。&lt;br /&gt;
&lt;br /&gt;
== 在设备rom里添加fastbootd（如果不存在） ==&lt;br /&gt;
请参考此处提交：https://github.com/PixelExperience-Devices/device_xiaomi_sdm845-common/commit/dcc9496eb18af9522fedf6ce0a8031d1fa2880e0&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Fastbootd&amp;diff=666</id>
		<title>Fastbootd</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Fastbootd&amp;diff=666"/>
		<updated>2024-08-14T09:15:02Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​/* 关于fastbootd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== 提示：本教程不是指引导加载程序。 ====&lt;br /&gt;
&lt;br /&gt;
== 关于fastbootd ==&lt;br /&gt;
&lt;br /&gt;
Fastbootd，即用户空间fastboot，是在Android 10开始使用的功能更为强大的刷机模式。&lt;br /&gt;
&lt;br /&gt;
您可以简单理解为fastbootd就是fastboot的升级版。&lt;br /&gt;
&lt;br /&gt;
一般来说fastbootd会整合进recovery。在类原生上，从recovery进入fastbootd方法一般是Advanced -&amp;gt; Enter fastboot。&lt;br /&gt;
&lt;br /&gt;
fastbootd支持对动态分区进行调整和刷写。具体请看下文。&lt;br /&gt;
&lt;br /&gt;
===== 注意：fastbootd要求最新adb-fastboot工具包，请自行去Google官网下载最新版！ =====&lt;br /&gt;
&lt;br /&gt;
== 命令及详细介绍 ==&lt;br /&gt;
&lt;br /&gt;
===== 通用： =====&lt;br /&gt;
&lt;br /&gt;
* 进入fastbootd&lt;br /&gt;
 adb reboot fastboot # 开机状态&lt;br /&gt;
 fastboot reboot fastboot # 引导加载器状态&lt;br /&gt;
* 检查当前状态是否为fastbootd&lt;br /&gt;
 fastboot getvar is-userspace # 如果是，则返回yes；如果不是，则返回no&lt;br /&gt;
同理，您可以把&amp;lt;code&amp;gt;is-userspace&amp;lt;/code&amp;gt;替换为您需要的变量名进行获取。&lt;br /&gt;
* 切换槽位（ab/vab分区专属）&lt;br /&gt;
 fastboot set_active other # 切换到另一个槽位。引导加载器模式也可用这条命令.&lt;br /&gt;
* 刷入分区&lt;br /&gt;
 fastboot flash partition_name path-to-image.img # 将&amp;lt;code&amp;gt;path-to-image.img&amp;lt;/code&amp;gt;刷入到名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的分区。&lt;br /&gt;
* 清空分区&lt;br /&gt;
 fastboot erase partition_name # 清空名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的分区. &lt;br /&gt;
===== 动态分区专属： =====&lt;br /&gt;
* 清空/重新改造动态分区&lt;br /&gt;
 fastboot wipe-super path-to-super_empty.img # 使用&amp;lt;code&amp;gt;path-to-super_empty.img&amp;lt;/code&amp;gt;来清空动态分区内容并重新改造&lt;br /&gt;
* 逻辑分区相关&lt;br /&gt;
 fastboot getvar is-logical:partition_name # 检查名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的分区是否是逻辑分区.&lt;br /&gt;
 fastboot delete-logical-partition partition_name # 删除名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的逻辑分区。&lt;br /&gt;
 fastboot create-logical-partition partition_name 1145141919810 # 新建一个名称为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;，大小为&amp;lt;code&amp;gt;1145141919810 Byte&amp;lt;/code&amp;gt;的逻辑分区。&lt;br /&gt;
 fastboot resize-logical-partition partition_name 1145141919810 # 将名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的大小修改为&amp;lt;code&amp;gt;1145141919810 Byte&amp;lt;/code&amp;gt;. 现有可用空间必须大于等于你所修改的分区大小.&lt;br /&gt;
* （危险！）在引导加载器模式下刷写动态分区内的分区&lt;br /&gt;
 fastboot --force flash partition_name path-to-image.img # 强制刷写分区。&lt;br /&gt;
&lt;br /&gt;
== 在设备rom里添加fastbootd（如果不存在） ==&lt;br /&gt;
请参考此处提交：https://github.com/PixelExperience-Devices/device_xiaomi_sdm845-common/commit/dcc9496eb18af9522fedf6ce0a8031d1fa2880e0&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Fastbootd&amp;diff=665</id>
		<title>Fastbootd</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Fastbootd&amp;diff=665"/>
		<updated>2024-08-14T09:10:49Z</updated>

		<summary type="html">&lt;p&gt;MoeGLuwu：​创建页面，内容为“== 关于fastbootd ==  ===== 提示：本教程不是指引导加载程序。 ===== Fastbootd，即用户空间fastboot，是在Android 10开始使用的功能更为强大的刷机模式。  您可以简单理解为fastbootd就是fastboot的升级版。  一般来说fastbootd会整合进recovery。在类原生上，从recovery进入fastbootd方法一般是Advanced -&amp;gt; Enter fastboot。  fastbootd支持对动态分区进行调整和刷写。具体请看下文。…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 关于fastbootd ==&lt;br /&gt;
&lt;br /&gt;
===== 提示：本教程不是指引导加载程序。 =====&lt;br /&gt;
Fastbootd，即用户空间fastboot，是在Android 10开始使用的功能更为强大的刷机模式。&lt;br /&gt;
&lt;br /&gt;
您可以简单理解为fastbootd就是fastboot的升级版。&lt;br /&gt;
&lt;br /&gt;
一般来说fastbootd会整合进recovery。在类原生上，从recovery进入fastbootd方法一般是Advanced -&amp;gt; Enter fastboot。&lt;br /&gt;
&lt;br /&gt;
fastbootd支持对动态分区进行调整和刷写。具体请看下文。&lt;br /&gt;
&lt;br /&gt;
===== 注意：fastbootd要求最新adb-fastboot工具包，请自行去Google官网下载最新版！ =====&lt;br /&gt;
&lt;br /&gt;
== 命令及详细介绍 ==&lt;br /&gt;
&lt;br /&gt;
===== 通用： =====&lt;br /&gt;
&lt;br /&gt;
* 进入fastbootd&lt;br /&gt;
 adb reboot fastboot # 开机状态&lt;br /&gt;
 fastboot reboot fastboot # 引导加载器状态&lt;br /&gt;
* 检查当前状态是否为fastbootd&lt;br /&gt;
 fastboot getvar is-userspace # 如果是，则返回yes；如果不是，则返回no&lt;br /&gt;
同理，您可以把&amp;lt;code&amp;gt;is-userspace&amp;lt;/code&amp;gt;替换为您需要的变量名进行获取。&lt;br /&gt;
* 切换槽位（ab/vab分区专属）&lt;br /&gt;
 fastboot set_active other # 切换到另一个槽位。引导加载器模式也可用这条命令.&lt;br /&gt;
* 刷入分区&lt;br /&gt;
 fastboot flash partition_name path-to-image.img # 将&amp;lt;code&amp;gt;path-to-image.img&amp;lt;/code&amp;gt;刷入到名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的分区。&lt;br /&gt;
* 清空分区&lt;br /&gt;
 fastboot erase partition_name # 清空名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的分区. &lt;br /&gt;
===== 动态分区专属： =====&lt;br /&gt;
* 清空/重新改造动态分区&lt;br /&gt;
 fastboot wipe-super path-to-super_empty.img # 使用&amp;lt;code&amp;gt;path-to-super_empty.img&amp;lt;/code&amp;gt;来清空动态分区内容并重新改造&lt;br /&gt;
* 逻辑分区相关&lt;br /&gt;
 fastboot getvar is-logical:partition_name # 检查名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的分区是否是逻辑分区.&lt;br /&gt;
 fastboot delete-logical-partition partition_name # 删除名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的逻辑分区。&lt;br /&gt;
 fastboot create-logical-partition partition_name 1145141919810 # 新建一个名称为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;，大小为&amp;lt;code&amp;gt;1145141919810 Byte&amp;lt;/code&amp;gt;的逻辑分区。&lt;br /&gt;
 fastboot resize-logical-partition partition_name 1145141919810 # 将名为&amp;lt;code&amp;gt;partition_name&amp;lt;/code&amp;gt;的大小修改为&amp;lt;code&amp;gt;1145141919810 Byte&amp;lt;/code&amp;gt;. 现有可用空间必须大于等于你所修改的分区大小.&lt;br /&gt;
* （危险！）在引导加载器模式下刷写动态分区内的分区&lt;br /&gt;
 fastboot --force flash partition_name path-to-image.img # 强制刷写分区。&lt;br /&gt;
&lt;br /&gt;
== 在设备rom里添加fastbootd（如果不存在） ==&lt;br /&gt;
请参考此处提交：https://github.com/PixelExperience-Devices/device_xiaomi_sdm845-common/commit/dcc9496eb18af9522fedf6ce0a8031d1fa2880e0&lt;/div&gt;</summary>
		<author><name>MoeGLuwu</name></author>
	</entry>
</feed>