分享

这可能是酷安最详细的刷机教程了 来自 青雨染蓑衣

 而不弃cr8wa7 2021-06-10

 之前看晨钟大佬吐槽好多小白,一点基础都没有,又有着一颗想折腾的心。遂打算写一篇教程,希望能够给真的小白一点帮助。

因个人水平有限,如有疏漏或错误,请各位大佬在评论区斧正,不胜感激!抱拳

超长图文预警

码字不易,给个头条呗受虐滑稽


目录:
一、基础知识及一些概念
1.bootloader简介
2.Android设备的分区
3.recovery简介
4.Android 调试桥 (adb)

二、刷机包的相关知识
1.一个刷机包是如何被构建出来的?
2.如何解包?
3.刷机包里都有啥?
4.gsi

三、主流的系统介绍
1.各项目的介绍
2.下载

四、系统的安装(刷机)
1.线刷
2.卡刷
①OnlyA类型的
②A/B类型的

五、root及谷歌框架的安装
1.root及magisk(面具介绍)
2.谷歌框架的安装

六、一些杂项配置

---------------------我是分割线-------------------

正文部分

一、基础知识及一些概念

1.bootloader简介

bootloader是什么?
简单地说,bootloader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

具体的启动流程可以看这里

查看链接

因为,是用来启动系统的。那如果可以任意启动系统,那我们的设备里的数据,是不是就很不安全?比如你设置一个锁屏密码,在这个系统内生效。但另一个系统不认,那直接再启动一个系统,不就可以绕过这个密码了?

所以,为了保证安全,我们会对bootloader做一些限制,比如,不符合原来设定签名的系统,不启动,也不允许你把不符合要求的系统刷写到手机上。

这就引出了bootloader锁这个概念。
所谓的解除bootloader锁,解的就是这个限制。

OEM解锁

重启到bootloader的界面,有的也叫下载模式

解除bootloader锁定后的警告

2.Android的分区

Android 设备包含若干个分区,这些分区在启动过程中发挥不同的作用。

关于A/B分区:

为了支持 A/B 更新,设备需要为 boot、system、vendor 和 radio 分区分别单独配置一个槽位。

boot:boot 分区包含通过 mkbootimg 组合在一起的内核映像和 RAM 磁盘。为了直接刷写内核而不刷写新的 boot 分区,可以使用虚拟分区:kernel:kernel 虚拟分区仅覆盖内核(zImage、zImage-dtb、Image.gz-dtb),方法是写入新的映像来覆盖旧的映像。为此,它会确定 eMMC 中现有内核映像的起始位置并将新内核映像复制到该位置。请记住,新内核映像可能会大于现有内核映像。引导加载程序可以通过移动其后的任何数据来腾出空间或放弃出错的操作。如果提供的开发内核不兼容,则可能需要使用相关的内核模块更新 dtb 分区(如果存在)、vendor 分区或 system 分区。

ramdisk:ramdisk 虚拟分区通过将新映像写入旧磁盘来仅覆盖 RAM 磁盘。为此,它会确定 eMMC 中现有 ramdisk.img 的起始位置并将新 RAM 磁盘映像复制到该位置。请记住,新 RAM 磁盘映像可能会大于现有 RAM 磁盘映像。引导加载程序可以通过移动其后的任何数据来腾出空间或放弃出错的操作。

system:system 分区主要包含 Android 框架。

recovery:recovery 分区用于存储在 OTA 过程中启动的恢复映像。如果设备支持 A/B 更新,则恢复映像可以是启动映像中包含的 RAM 磁盘,而不是单独的映像。

cache:cache 分区用于存储临时数据,如果设备使用 A/B 更新,则可以不要此分区。cache 分区不需要可从引导加载程序写入,而只需要可清空。大小取决于设备类型和 userdata 分区的可用空间。目前,50MB 至 100MB 应该没问题。

misc:misc 分区供恢复映像使用,存储空间不能小于 4KB。

userdata:userdata 分区包含用户安装的应用和数据,包括自定义数据。metadata:如果设备被加密,则需要使用 metadata 分区,该分区的存储空间不能小于 16MB。

vendor:vendor 分区包含所有不可分发给 Android 开源项目 (AOSP) 的二进制文件。如果没有专有信息,则可以省略此分区。

radio:radio 分区包含无线装置映像。只有包含无线装置且在专用分区中包含无线装置专用软件的设备才需要此分区。

tos:tos 分区用于存储 Trusty 操作系统的二进制映像文件,仅在设备包含 Trusty 时使用。

除此之外还有一大堆厂商为实现特定功能的分区,这里不再赘述。

我这台机器的部分分区(右侧)

3.recovery简介

Recovery模式指的是一种可以对安卓机内部的数据或系统进行修改的模式(类似于windows PE或DOS)。也可以称之为安卓的恢复模式,在这个所谓的恢复模式下,我们可以刷入新的安卓系统,或者对已有的系统进行备份或升级,也可以在此恢复出厂设置(格式化数据和缓存)。

Recovery包括了一个完整Linux内核和一些特殊的recovery binary,可以读取升级文件用这些文件来更新其他的分区。

传统的系统更新,一般流程就是:首先下载系统安装包,然后校验无误后,重启到recovery模式,recovery校验安装包的签名,如果是官方发布的,则按照包里的内容进行安装。
安装完成后,重启完成系统更新

因为现在越来越多的设备使用了A/B类型的分区结构,在更新系统时,主系统可以完成大部分本来recovery该做的工作。因此这一部分的机器是没有独立recovery分区的。这一部分已经集成到了boot里,并且功能也仅限于清除数据,和启动的功能。安装系统这一部分的任务,已经交由系统来负责了。

lineage OS的recovery,功能和厂商的基本一致。 同时,这个也是AB类型的

4.Android 调试桥 (adb)

Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限。

总的来说,通过adb可以实现一些介于普通用户和root之间的权限。

像晨钟大佬的工具箱,很多都是基于这个的。

具体的使用和介绍,请参照谷歌官方的介绍。
查看链接

包含在sdk platform tools 中

二、刷机包的相关知识

1.一个刷机包是如何被构建出来的?

这里不多介绍,有兴趣请查看lineage的build wiki。

查看链接

因为要涉及很多适配的东西,我太菜了,讲不来受虐滑稽

只说一下大致流程:

首先:需要有你想要适配ROM的源代码,因为是开源的,直接下载就好。

还需要有内核的源代码,因为Android是基于Linux的,硬件,进程的调度,都需要它。这部分就要看厂商开不开源了。如果没有开源,使用boot里解包的prebuilt内核也行,但很多bug可能就没办法修了。

第二步:你得告诉编译系统,你要为一个什么样的设备编译ROM。那怎么告诉呢?总不能直接跟它说,你给我编译一个米6的dot OS吧?受虐滑稽

这时候,你就要编写一个device tree,在这套文件里,有详细的设备信息,以及它运行时需要的东西。

dt的目录结构,可能会因为机型而异,但大体一致

这一部分,很细,很杂,往往需要开发者付出很大心血。有时候,一套完整的device tree 要很多开发者参与才能完成。所以,某些人在喷的时候,请嘴下积德。t耐克嘴

不过,一旦完成,这套树,就可以给几乎所有的ROM项目做适配,需要改的,也只是会针对某些ROM的特性做小修改。

因此,不要再喷某一个ROM的bug和另一个ROM的bug一样,就得出谁抄谁的结论了,这一般都是维护者的问题。小嘴滑稽

第三步:说清楚了,就是漫长的编译过程了。有bug,编译报错,改。又错了,再改改.....
反正我八代低压i5,加固态,跑完全程大概要六个多小时。

第四步:按照releasetools.py的内容打包发布,这里面会告诉要发布的包,里面要包含啥,以及一些后续要用到的东西。

里面的内容

2.如何解包?

要回答第三个问题,我们先拆个包斗鸡眼滑稽
这个是传统的刷机包类型

大致的目录结构

boot.img 是更新boot分区所需要的镜像文件。这个boot.img主要包括kernel、ramdisk。

system/目录的内容在升级后会放在系统的system分区,主要是系统app,library和binary二进制文件

recovery/目录主要用来更新recovery分区, install-recovery.sh是用来更新recovery分区的脚本。

update-binary是一个二进制文件,相当于一个脚本解释器,能够识别updater-script中描述的操作。

updater-script:此文件是一个脚本文件,具体描述了更新过程。

metadata文件是描述设备信息及环境变量的元数据。主要包括一些编译选项,签名公钥,时间戳以及设备型号等。
原文链接:查看链接

一般来说,现在都会对包内进行压缩,你解包后,只会看到一个后缀名为.br的文件。

这个是经过brotil压缩算法压缩的产物。
解压后就能看到boot,system等等的镜像文件了。

另一种是A/B分区的

里面是payload.bin
同样也是需要解压的。

需要的工具请自行百度。受虐滑稽

3.一个刷机包里都有啥?

上面已经大致介绍了,现在说一些不一样的受虐滑稽

首先
一个最小的刷机包,里面至少要包含boot和system,内核和系统应该是匹配的受虐滑稽

第二,底包的概念

那啥是底包呢?还记得上面写的vendor分区吗?这个分区里放的是设备专有的硬件驱动库,没有这个,硬件就不能正常工作。综合下来,就是vendor.img。

我们常看见,需要刷某一个版本的厂商官方ROM作为底包,其实就是说,这个第三方ROM需要某一个版本里的vendor。

一般来说,像lineage之类的,如果要上官方版,就必须要求开发者提供稳定的vendor,这也就意味着,这类包大概率会包含vendor,就不再需要底包。

第三,其它乱七八糟的分区镜像

看完上面的内容,你应该已经知道了,一个ROM正常工作,其实只需要boot,system,vendor就够了。

但有些开发者为了实现一些功能,会改其他分区,这时候就会加入对应的分区镜像。

所以,刷之前最好检查一下脚本,看看会动哪些分区。如果出了问题,也知道该怎么做,而不是整天搞玄学,瞎折腾。

4.gsi

通用系统映像
通用系统映像 (GSI) 是指已针对 Android 设备调整配置的系统映像。GSI 可视为一种“纯 Android”实现,采用未经修改的 Android 开源项目 (AOSP) 代码,在任何运行 Android 8.1 或以上版本的 Android 设备上都可以顺利运行。

GSI 用于运行 VTS 和 CTS-on-GSI 测试。为确保运行最新版 Android 的设备正确实现供应商接口,您需要将 Android 设备的系统映像替换为 GSI,然后使用供应商测试套件 (VTS) 和兼容性测试套件 (CTS) 来测试设备。

得益于Google的treble项目,系统适配时,可以相对独立于vendor。

这个不仅适用于aosp,对厂商的定制UI同样适用。

目前,主流的gsi制作工具有两个:

erfan的gsi

还有小新大大的sgsi

后者只适用于高通平台。

三、主流系统的介绍

首先,需要明确一下offcial和unofficial的区别。

offcial顾名思意,就是项目官方发布的。

这要求ROM编译时,必须通过官方的编译服务器编译,这样出来的包,才能叫offcial。
能有offcial,一般就意味着该设备有稳定的维护者,会比较稳定,但基本上也只是这些了。

unofficial一般是指除官方编译服务器之外的设备编译的,即便是设备的维护者,在自己的电脑上,仍然是unofficial。它并不是之前有人理解的,在offcial的基础上二次打包而成的

unofficial一般也没啥问题,因为很多unofficial都是设备官方的维护者编译的,可能因为各种原因,没有加入官方的编译序列。除了不是offcial,其它东西都是一样的。受虐滑稽

但是,仍建议留个心眼,毕竟安全是第一位的小嘴滑稽

+++++++++++我是分割线++++++++++++

然后就是各主要项目的介绍及下载了

1、首先肯定是大名鼎鼎的lineage os了

主页:查看链接

lineage os

下载:查看链接

需要指出的是,lineage在国内有高校镜像站,比如中科大,清华的兔娜,还有北外的。

包括源代码和已编译好的ROM

如果原始地址访问困难,可以来这里下载

2.魔趣

魔趣

主页:查看链接
下载:查看链接

3.pixel experience简称PE

PE

主页和下载:
查看链接

它有两个版本:普通版和Plus版

普通和pixel手机的体验一致,没有自定义啥的。
plus则有少部分自定义设置。

4.dot OS

dotos

主页:查看链接

这个ROM很花里胡哨,叫类原生中的MIUI,应该没错受虐滑稽

然后还有
ancient,statix,aospa,还有那个东方相关的
........

太多了,你自己探索吧。

+++++++++++++分割线+++++++++++++

四、系统的安装(刷机)

前期准备:

首先,先安装好你手机的驱动,比如fastboot之类的,具体请自行百度,然后下载前面提到的sdk套件。

第二步,备份你的数据,这里推荐使用这个应用来备份app,一会儿刷完了会用到。
应用:
【应用备份和还原】
然后把app和重要的数据一同拷到电脑上。

第三步,解锁手机的bootloader,这一部分也是因机型而异,自己百度。

第三步,根据你要刷什么下载相应的东西。
比如,线刷包,卡刷包,第三方recovery等。

1.线刷
前面你已经知道了bootloader,也知道了Android的主要分区,现在就到了fastboot出场的时候了。

fastboot是之前adb工具包里的一个组件,它可以告诉bootloader,把要刷的镜像放到哪个分区。

所谓的线刷,其实就是通过fastboot,把这些镜像推送到指定的分区。

这里只说一下fastboot应该怎么用:

如果你解锁了bootloader,那你应该知道如何打开手机的adb 调试。

打开调试后,将手机连接到你的电脑

打开你下载的sdk目录

然后在上面的地址栏里输入:cmd

按回车
就会弹出一个黑色的控制台窗口

现在重启到bootloader或recovery
输入:
adb reboot bootloader

按回车,手机如果授权了,就会进入bootloader模式。

如果输入:

adb reboot recovery

则进入recovery模式

大佬们的工具,其实封装的也是这些命令。斗鸡眼滑稽

一般来说,正经的线刷包,都会提供一键刷入的脚本,毕竟那么多分区,总不能自己手动一个个刷吧受虐滑稽

因此,这里我只演示如何刷入一个第三方recovery。受虐滑稽

这里分两种情况:

对于Aonly的设备:
在刚才的控制台中,输入

fastboot flash recovery <你下载的recovery>

或者:

在输入fastboot flash recovery 后,直接把你下载的recovery.img拖进窗口

像这样

然后,按回车

这就是失败的,因为演示的这部机器分区是A/B构造的,没有独立的recovery分区。

同理,如果你要刷gsi,那gsi只有system分区,

那命令就是:

fastboot flash system <你的镜像>

fastboot是组件名
flash是这个组件里的命令
system是要刷入的分区名,boot,vendor都是同理。
最后就是你要刷入的文件

线刷就到这里了。
+++++++++++++++++++++++++++++++++

2.接下来就是卡刷

前面我们已经知道了什么是recovery,以及一个刷机包里都有啥,也知道了一个刷机包是可以被签名的。

其实,recovery的主要功能和fastboot一样,都是把指定的文件放入到指定的位置。

既然手机里有recovery,那为啥还需要第三方recovery呢?

原因很简单,因为刷机包有签名。为了安全,官方的recovery只认厂商的签名,如果不一致,那recovery就会拒绝执行接下来的内容,也就刷不了第三方。

既然不能解决提出的问题,那就把提出问题的人解决掉受虐滑稽

这时候,第三方的recovery就出现了,它可以选择校验签名,也可以选择不校验,一切都取决于你,这样就解决了签名问题。

现在主流的第三方recovery主要有:
twrp
查看链接

橙狐(orange fox)
查看链接

shrp等
查看链接

注意:
recovery并不是通用的,需要严格的对应自己的机型,它和ROM一样,都是需要适配自己机型的。

至于如何去找,就需要你自己爬机型的论坛了。

那如何刷入第三方recovery?

首先是Aonly:

因为有独立的recovery分区,因此它可以一直保留下来。

具体的刷入,上一节已经说了。

bootloader模式下用fastboot flash 命令直接刷入

成功以后,直接输入

fastboot reboot recovery

就可以重启到新的recovery里了。

++++++++++我是分割线++++++++++

现在重点说一下A/B分区的:

前面已经说到,这类机器没有独立的recovery分区,那怎么办呢?

先说一下双分区机型recovery的工作方式吧。

比如说,你现在处于slot A,就是A分区处于激活状态,那安装系统时,系统会被装到未被激活的B分区,反之亦然。

那就有两个选择
选择一:
直接使用fastboot boot命令。

通过fastboot直接启动下载的recovery镜像,而不写入到手机的闪存中。

具体的命令就是
fastboot boot <你的recovery镜像>

回车确认后,手机会自动进入recovery模式
然后进入你的第三方recovery里。

命令

执行后的反馈

手机端的反应

设置中文

允许修改

twrp的主界面

你可能会问,我刷完以后,如何切换分区呢?

点击

重启

可以看到
当前我们处于B分区,那就点击分区A

可以看到已经激活A了

这时候,再重启就是A分区处于活跃状态了。
如果刚才你已经安装了系统,并格式化了data,这时候你选择重启系统,那应该就可以进入新系统了。

注意,因为是使用的boot命令,recovery并没有写到手机里,这时候重启,recovery会直接消失。

如果你需要刷写另一个分区,在激活A分区以后,点击返回。

选择重启到bootloader,然后重复以上步骤即可。

再重复一遍

recovery下的系统安装啥的操作,A/B和Aonly都是一样的。
你只需要搞清楚哪个分区是出于活跃状态即可。

另一种方法:

还记得前面说过,双分区机器的boot和recovery分区是合在一起的吗?

那就直接把recovery镜像刷到boot分区里,这时,启动就会直接进入recovery受虐滑稽

原理和方法一一样。

+++++++++++++++++++++++++

3、recovery下,刷机包的刷入方式

这一部分,A/B分区和Aonly都是一样的,故一起介绍。

首先,recovery的功能大致都是这样的,我这个是twrp,还有一些更好看的,功能上大同小异。

twrp

安装,不必多说

如果你的recovery支持解密,看到的就是上面的内容。
如果是一片乱码,那也不要慌,后面有办法解决。

然后是清除

清除

注意,清除和格式化是不一样的。二者虽然都会丢数据,但格式化是重建文件系统。

备份和恢复的话,主要是备份相关分区的内容。

挂载是Linux里的名词,你要对某一个文件系统操作,首先要安装它。

高级里,就是一些特殊的配置之类的

高级

了解完了,那我们就开搞了。

5、刷入

还记得你之前下载的刷机包吗?
如果你的recovery可以正常解密,并且当时也是使用手机下载的话,那就可以直接在“安装”选项中,找到你的刷机包。

我的刷机包文件

选择以后

滑动按钮,确定刷入

等待即可 也可以看到,当前系统正在安装到B分区

完成以后,返回主页,点清除,选择格式化data分区

输入yes

我就不搞了,要数据受虐滑稽受虐滑稽受虐滑稽

到这里,如果你是Aonly的机器,在格式化完成以后,就直接可以重启进入新系统了。

如果是A/B,刚才也看到了,我们把系统装在了B分区,但当前却是A分区,如果你直接重启,那就会出现recovery什么也没做的假象受虐滑稽

因此需要在重启里,将活跃分区设为B

当前为A,现在需要改成B

最后重启系统,完成受虐滑稽

五、root及面具的介绍

Root —— 玩家与厂商间的博弈

Android 从诞生之日起就高举着开源的大旗,这也是它成功的原因之一。而它的开放性也成功的吸引到了一大批爱折腾的人,从而诞生出了 root(此处特制 Android 中的 root)。

根据 Wikipedia 的释义,root 指的是使用户取得 Android 操作系统的超级用户(Super User)许可权的技术。用户通过 root,可以越过手机制造商的限制,卸载手机制造商预装在手机中某些应用,以及运行一些需要超级用户权限的应用程序。同时,root 也可能会让手机变得“不安全”(并不是说 root 使手机变得不安全,而是一些用户的使用习惯会使 root 后的手机变得危险)。

但是从棉花糖(Android 6.0)开始,Google 基本阻止了以前版本中最流行的 root 方法 —— 即,将 su守护程序 放置到 /system 分区,并在启动时取得所需的权限。道高一尺,魔高一丈,于是就出现了 systemless 的 root 方式,因为它不采取任何方式修改 /system 分区。

出于增加安全性的考虑,Google 推出了 SafetyNet 这样的检测,以确保 Android Pay 等一些 App 的安全运行,玩家不得不在 root 权限和一些有价值的 App 之间作出选择。

这个时候 Magisk 诞生了。

Magisk

什么是 Magisk

Magisk 是出自一位台湾学生 @topjohnwu 开发的 Android 框架,是一个通用的第三方 systemless 接口,通过这样的方式实现一些较强大的功能。

看似很简单的一个框架,甚至与大名鼎鼎的 Xposed 框架在功能性上有点重复。很多人批评 Magisk的模块太少了,想替代 Xposed 根本不可能(在那个 Xposed Framework for Android 7.0 难产的时代,很多人将 Magisk 看是做是 Xposed 的替代品)。这是不正确的,因为 Magisk 从来没有想过要代替 Xposed ,Magisk 与 Xposed 是可以互相兼容的,你甚至可以通过 Magisk 来安装 Xposed(安装 Xposed 后就不能绕过 SafetyNet 了)。

Magisk 的厉害之处在于它实现了一种绕过 SafetyNet 使用 root 的方法。

实现原理:由于它是通过启动时在 boot 中创建钩子,把 /data/magisk.img 挂载到 /magisk,构建出一个在 system 基础上能够自定义替换,增加以及删除的文件系统,所有操作都在启动的时候完成,实际上并没有对 /system 分区进行修改(即 systemless 接口,以不触动 /system 的方式修改 /system)。

刷入方式:

首先下载最新的面具安装包,现在已经实现了一个包解决安装和管理的安装。

下载地址:
最新的已经是23.0了

查看链接

下载的apk直接丢进recovery里安装即可。

2.谷歌框架的安装
这里使用opengapps
下载链接:
查看链接

Android 11的
查看链接

选择你的安卓版本,芯片架构,现在新的设备一般都是arm64了吧。

stock包含的内容和谷歌手机一致。
不是深度用户,一般nano就够了。

压缩包的安装方法与前面的系统安装一样。

六、杂项配置

原生安卓的后台管理属于放养式,无法适应国内的软件环境,因此需要辅助一下。受虐滑稽

后台管理我一般使用黑域

其它的功能你自己慢慢探索吧受虐滑稽受虐滑稽受虐滑稽

就到这儿吧,不想写了受虐滑稽

有问题欢迎评论区留言。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多