刷机与安装Magisk,工具与流程,雏鹰起飞,一条龙手把手式文档
Magisk出现的背景
选择Android手机的同时,也选择了一种无限的可能,终究还是时势造英雄
- 为了突破
OEM(Original Equipment Manufacturer,代工生产)定制应用的机型限制,给Android插上一双翅膀 - 为了解决
Netflix,Google Play等一众应用不能在已经root的手机上正常运行 - 为了解决改动过的系统文件的
ROM(硬盘存储)不能通过OEM渠道进行正常的OTA升级(Over-the-Air Technology, 在线升级手机系统)
Magisk做了什么
通过挂载一个与系统文件相隔离的文件系统来加载自定义内容,为系统分区打开了一个通往平行世界的入口,所有改动在那个世界(Magisk 分区)里发生,在必要的时候却又可以被认为是(从系统分区的角度而言)没有发生过
达到的效果
不破坏或更改原有系统的完整性,系统处于一个非
root状态,但是Magisk内部运行的模块可以获取到root权限当被挂载的
Magisk分区被隐藏甚至被取消挂载时,原有系统分区的完整性丝毫未损可以运行需要
root验证的程序可以运行对设备认证状态有要求的应用
可以进行需要验证系统完整性的
OTA更新Magisk可以被看作是一种挂载文件系统,这种文件系统通过巧妙的实现方式避开了对系统文件的直接修改,从稳定性上来看要优于以往任何一种系统框架
Magisk项目信息
官方项目地址
https://github.com/topjohnwu/Magiskhttps://github.com/topjohnwu/Magiskrelease包信息
https://github.com/topjohnwu/Magisk/releaseshttps://github.com/topjohnwu/Magisk/releases需要在release模块下载一个release apk包,目前最新的是Magisk-v26.1.apk,后续如果有更新的就先尝试下载更新的包,下载完成之后把文件名称改一下,后缀改成zip,改成Magisk.zip
本机测试的时候可能由于机型比较旧,Magisk安装完成之后点击Android图标无反应,所以就降版本到Magisk-v25.2.apk之后再次安装才成功
前提知识
手机刷机root和unlockBootloader的对比
root手机是取得了系统的最高权限,使用该账号可以读写以及执行系统的任意文件UnlockBootloader是解除系统启动加载器Bootloader的原厂限制,让用户可以进行更多操作(刷新内核,刷ROM),bootloader/fastboot模式处于设备上电开机到进入系统前的一个阶段或者模式,实现刷机是在bootloader阶段之后的recovery模式
Android分区与模式
Android设备有3个重要分区: 启动加载程序(Boot loader)、恢复(Recovery)和 手机系统(Android ROM)Boot loader最先加载并决定要加载的下一个分区,此分区通常是Android ROMRecovery模式是一个小型Linux操作系统, 用于安装Android ROM分区更新的模式, 在对手机恢复出厂设置时也会使用Recovery模式Fastboot是一种协议,可用于通过USB从计算机连接到设备,并向设备的分区发出更新fastboot模式是android sdk附带的工具,可以用来re-flash设备的分区,可以安装recovery image
进入到不同的模式
每个手机进入到fastboot界面和recovery的按钮操作是不同的
小米手机是按住
电源键+音量下键进入到fastboot界面小米手机在启动的时候,按住
电源键+音量上键,当出现小米logo界面,松开电源键,出现recovery界面的时候才能松开音量上键
其他手机进入到fastboot界面,参考
https://tutorials.how/android/boot-into-fastboot-mode/https://tutorials.how/android/boot-into-fastboot-mode/其他手机进入到recovery界面,参考
https://www.xda-developers.com/how-to-boot-to-recovery/?newsletter_popup=1https://www.xda-developers.com/how-to-boot-to-recovery/?newsletter_popup=1实验设备信息
Xiaomi Redmi note 7 Pro
小米/一加等手机官方支持unlock Bootloader ,操作起来会比较方便
最后要做好思想准备,实验手机上的所有数据即使全部丢失也没关系,当手机启动的时候界面弹出your system has been destroyed然后只能关机的时候也不要慌张(这个情况下虽然不能进入到手机系统,但是还是可以进入到bootloader界面,可以进入到recovery模式刷机解决)
手机刷机必要步骤
unlock bootloader- 配置手机的密码解锁(输入字符的)以及图案密码,如果有指纹解锁,也配置一下,如果不配置可能影响到后面手机进入
recovery模式时候的操作,手机进入到recovery模式正常的时候是需要输入一下密码的,该密码就是配置的手机解锁密码 - 开启手机
USB调试模式,手机刷机过程中,重启之后USB调试模式可能会被关闭,所以每次开机完成之后尽量检查一下该模式
解锁bootloader
打开开发者选项,点击进入设备解锁状态,然后会看到官方的设备解锁操作流程,按照其流程操作

一般是插入
SIM卡之后,绑定完成小米账号从小米的官网获取到解锁工具地址,在
windows系统上,下载安装解锁工具,访问地址http://www.miui.com/unlock/index.html进行下载,下载之后运行压缩包里面的miflash_unlock.exe,这时需要再次登录小米账号(如果显示miflash有更新,一定要选择更新)之后使用
usb数据线连接手机与电脑,同时手机需要打开USB调试模式,配置USB可传输文件方式
在
windows上打开设备管理器,在其他设备选项下面会有一个Android Phone的选项,点击更新驱动,选择浏览计算机以查找驱动程序软件(R),选择从http://www.miui.com/unlock/index.html的miui下载的解锁工具解压出来的driver文件夹进行驱动更新(旧版本的解锁工具是没有driver文件夹的,所以在运行解锁工具的时候有更新提示,一定要更新,目前下载的版本是miflash_unlock-6.5.406.31,解压出来会有个driver文件夹)更新完成之后查看电脑端解锁工具,依据提示操作手机

操作手机进入到
bootloader模式,该模式有点类似与PC装机时候经常看到的BIOS模式
最后
windows上的解锁工具检测到设备之后点击解锁重启手机,进入开发者模式,看到如下信息,表示手机
unlock成功
Android platform tools安装
官方下载访问地址
https://developer.android.com/tools/releases/platform-toolshttps://developer.android.com/tools/releases/platform-tools在Ubuntu系统安装ADB与fastboot
$ sudo apt install android-tools-adb android-tools-fastboot$ sudo apt install android-tools-adb android-tools-fastbootADB工具(Android Debug Bridge)
一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问
主要功能
- 在设备上运行
Shell命令 - 将本地
apk软件安装至模拟器或Android设备 - 管理设备或手机模拟器上的预定端口
- 在设备或手机模拟器上复制或粘贴文件
adb 命令的基本语法
$ adb [-d|-e|-s <serial-number>] <command>$ adb [-d|-e|-s <serial-number>] <command>参数解释
-d指定当前唯一通过USB连接的 Android 设备为命令目标-e指定当前唯一运行的模拟器为命令目标-s <serial-number>指定相应设备序列号的设备/模拟器为命令目标
如果只有一个设备/模拟器连接时,可以省略掉 [-d|-e|-s <serial-number>] 这一部分,直接使用 adb <command>
在多个设备/模拟器连接的情况下较常用的是 -s <serial-number> 参数,serial-number是指设备的设备序列号,可以通过 adb devices 命令获取
查看已经连接的设备
$ adb devices
List of devices attached$ adb devices
List of devices attached手机使用数据线连接电脑的时候,打开手机开发者选项-USB调试模式,会弹出手机与计算机RSA密钥指纹匹配的确认按钮,之后再次执行查看已经连接设备,如下表示手机与电脑之间的调试连接成功
$ adb devices
List of devices attached
5ba7ca2f device$ adb devices
List of devices attached
5ba7ca2f device通过adb进入到手机的shell环境,前缀violet是红米note 7 Pro的版本代号
$ adb shell
violet:/ $ pwd
/
violet:/ $ ls
acct charger debug_ramdisk mnt product_services sys
apex config default.prop odm res system
bin cust dev oem sbin vendor
bugreports d etc proc sdcard
cache data lost+found product storage$ adb shell
violet:/ $ pwd
/
violet:/ $ ls
acct charger debug_ramdisk mnt product_services sys
apex config default.prop odm res system
bin cust dev oem sbin vendor
bugreports d etc proc sdcard
cache data lost+found product storage把电脑端的某个文件推送到手机,假设电脑端当前路径存在一个文件test.txt,推送到手机路径为/sdcard/test.txt位置(在手机处于recovery模式的时候也可以使用该操作)
$ adb push test.txt /sdcard$ adb push test.txt /sdcard或者也可以直接推送到根路径下
$ adb push test.txt /$ adb push test.txt /重启手机
$ adb reboot$ adb reboot重启手机到recovery模式
$ adb reboot recovery$ adb reboot recovery重启手机到fastboot/bootloader模式
$ adb reboot bootloader$ adb reboot bootloader更多使用请参考
https://juejin.cn/post/6844903645289398280https://juejin.cn/post/6844903645289398280fastboot工具与模式
fastboot意思是快速启动,在安卓手机中fastboot是一种比recovery更底层的刷机模式,使用USB数据线,连接电脑的一种刷机模式,通常称为“线刷”刷机,当手机不能进入到系统或者不能进入到recovery模式的时候,如果还能进入到fastboot模式,手机还能拯救,如果不能进入到fastboot,则彻底变砖了
当手机进入到fastboot模式的时候,adb工具就不能使用了,只能使用fastboot工具
主要功能有
- 完成分区镜像烧录
- 分区擦除
- 设备重启
- 获取设备状态信息
当手机和电脑端使用数据线连接的时候(之前执行了adb绑定手机与电脑)
重启设备操作
$ fastboot reboot$ fastboot reboot假设电脑当前shell路径下存在一个文件twrp.img,把该文件刷到手机recovery分区
$ fastboot flash recovery twrp.img$ fastboot flash recovery twrp.imgTWRP recovery镜像
twrp(Team Win Recovery Project)是一款第三方刷机软件,是一个recovery image,在recovery模式下使用
官网地址
https://twrp.me/https://twrp.me/不同设备选择镜像地址,每个设备都有对应的镜像
https://twrp.me/Devices/https://twrp.me/Devices/Xiaomi Redmi Note 7 Pro选择镜像如下
https://twrp.me/xiaomi/xiaomiredminote7pro.htmlhttps://twrp.me/xiaomi/xiaomiredminote7pro.html

recovery模式安装Magisk
在手机处于fastboot模式的时候,电脑端执行命令(演示需要,在下载完成twrp镜像之后把名称统一修改为twrp.img),把第三方的recovery image刷入手机的recovery分区,替换掉系统厂商自带的recovery,有些手机重启之后第三方的recovery image可能会被系统自带的recovery image还原,重新刷入第三方recovery image即可
$ fastboot flash recovery twrp.img$ fastboot flash recovery twrp.img之后执行命令重启手机
$ fastboot reboot$ fastboot reboot在手机重启的一瞬间,要按照不同手机的按键操作,保证后面进入recovery模式
进入到recovery分区之后需要输入开机密码,如果没有弹出开机密码输入框,后续安装Magisk的时候报错Operation not permitted可能与这个有关(从recovery模式启动阶段输出的日志来看,开机密码输入之后,密码参数可能是解密某些区域数据的一个解密参数,如果缺失该参数,加密数据未被解密,就会导致安装magisk的时候报错operation not permitted)
格式化手机data分区
该步骤不是必须的,如果安装Magisk不成功,可以尝试本步骤
该步骤会清空手机系统保存的用户数据信息,下载安装的软件,相当于恢复出厂设置
进入到recovery模式之后点击选择Wipe模块,再点击Format Data,最后在弹出的确认框输入yes
安装Magisk
在recovery模式adb工具是可用的
电脑端操作发送之前下载好的Magisk.zip到手机根路径
$ adb push Magisk.zip /
Magisk.zip: 1 file pushed. 34.0 MB/s (11278270 bytes in 0.317s)$ adb push Magisk.zip /
Magisk.zip: 1 file pushed. 34.0 MB/s (11278270 bytes in 0.317s)手机操作,点击Install模块,文件夹操作找到根路径下的Magisk.zip文件,点击选择之后,滑动图标Swipe to confirm Flash确认安装,查看安装终端日志输出无报错之后点击Reboot System按钮重启系统(如果系统卡住不能进入系统,直接按住电源键强制关机再启动)
进入系统后续操作
首先看到的是Magisk的App,缺少图片素材版本的,点击图标弹出一个提示框,Magisk需要下载完整版Magisk才能正常运行,后面查看Magisk版本信息发现是1.0版本,按照提示点击确认之后发现没什么反应,是因为Magisk更新的时候请求的地址需要科学解决
此处推荐v2ray项目
https://github.com/v2fly/v2ray-core
https://www.v2fly.org/https://github.com/v2fly/v2ray-core
https://www.v2fly.org/手机端可以安装Android版本应用
https://github.com/2dust/v2rayNGhttps://github.com/2dust/v2rayNG科学完成之后,再次点击Magisk图标进行更新
之后进入Magisk界面查看,注意看到版本号位置是有参数的,同时超级用户和模块位置是可以点击的(如果Magisk这三块地方异常,可能就不是通过recovery模式安装的Magisk,可能是直接在系统运行之后安装Magisk,这样的话就不能使用到Magisk的魔法了)

Operation not permitted报错
该报错是redmi note 7 pro的报错,miui论坛发现有很多redmi note系列的都会有这个报错
在安装Magisk过程中,报错操作未被允许,该错误可能和twrp的recovery image有关,所以决定换另外一个三方的镜像
解决方案参考
https://xiaomi.eu/community/threads/rn8-problems-with-twrp-recovery.58846/https://xiaomi.eu/community/threads/rn8-problems-with-twrp-recovery.58846/redme note 7 pro解决方案镜像下载地址
https://www.mediafire.com/file/9g239qv3wk6sz5k/violet01-01-2021test.img/filehttps://www.mediafire.com/file/9g239qv3wk6sz5k/violet01-01-2021test.img/file后续操作按照前面章节刷入recovery image操作
最后安装成功界面如下

your system has been destroyed解决方案
手机开机的时候出现这个界面,不要慌,这个情况还能补救,每个人遇到这个界面的情况可能千奇百怪,我这边是进入到recovery的时候格式化了一些分区,手抖了一下意外的把system分区都格式化了
解决方案参考
https://droidwin.com/the-system-has-been-destroyed-error-on-xioami-fix/https://droidwin.com/the-system-has-been-destroyed-error-on-xioami-fix/小米手机可以访问https://xiaomifirmwareupdater.com/下载对应手机型号的fastboot rom,其他手机搜索fastboot rom
我的手机是选择了如下版本,china发行版本,stable, fastboot模式的,比较新的一个版本(事实上我是看这个文件又大又新还是stable才选择这个的)

下载完成压缩包后解压,解压出来的文件夹内包含flash_all.sh相关文件
保持数据线连接到手机,手机进入到fastboot模式,执行命令如下(PS:有些人可能会觉得只需要刷入一点vbmeta.img或者一些boot.img之后再启动系统,可以最大限度的保留数据,但是我的实际经历表示,手机都快变砖了,数据什么都无所谓了,能够正常开机进入系统才是我唯一在乎的)
$ ./flash_all.sh$ ./flash_all.shMagisk模块介绍与安装
Magisk就像是一个docker技术,是一个平台,Magisk modules是平台上用户实际使用的东西,就像是一个个运行的docker容器
优秀Magisk模块推荐与安装参考文章
https://www.xda-developers.com/best-magisk-modules/https://www.xda-developers.com/best-magisk-modules/Magisk开发者文档参考
https://topjohnwu.github.io/Magisk/guides.htmlhttps://topjohnwu.github.io/Magisk/guides.html安装模块选择一个高级充电控制的Magisk Module项目,模块安装可以使用Magisk App点击安装,也可以选择使用adb安装
充电控制项目仓库地址
https://github.com/VR-25/acchttps://github.com/VR-25/acc选择一个release的zip版本下载
目前选择的版本是acc_v2022.7.30-dev_202207300_2206.zip
下载之后使用压缩包管理器查看里面的文件,注意看压缩包里面的根路径的位置,Magisk在解压压缩包的时候默认提取完成之后install.sh等文件就是在当前路径,而不是还要去某个文件夹访问

假设现在有个temp文件夹,需要打包压缩为zip
可以在文件夹外面执行命令,这个是最常见的方法
$ zip -r temp.zip temp/$ zip -r temp.zip temp/也可以进入到temp文件夹里面执行命令,两个命令产生的压缩包的文件根路径是不一样的,Magisk module要求的就是zip包里面的文件根路径就是/,否则安装模块的时候会报错Unzip error
$ zip -r temp.zip *$ zip -r temp.zip *为方便演示,此处使用adb方式安装模块
查看adb连接设备信息,如果是像下面这样的输出,需要关闭手机USB调试模式,再次打开保证手机和电脑配对
$ adb devices
List of devices attached
5ba7ca2f unauthorized$ adb devices
List of devices attached
5ba7ca2f unauthorized正常输出如下
$ adb devices
List of devices attached
5ba7ca2f unauthorized$ adb devices
List of devices attached
5ba7ca2f unauthorized把模块压缩推送到手机/sdcard位置(如果该位置不存在,可以直接把文件推送到/路径)
$ adb push acc_v2022.7.30-dev_202207300_2206.zip /sdcard
acc_v2022.7.30-dev_202207300_2206.zip:...hed. 3.7 MB/s (173493 bytes in 0.045s)$ adb push acc_v2022.7.30-dev_202207300_2206.zip /sdcard
acc_v2022.7.30-dev_202207300_2206.zip:...hed. 3.7 MB/s (173493 bytes in 0.045s)进入到手机shell环境
$ adb shell
# 检查对应位置是否有相关压缩包文件
violet:/ $ ls /sdcard/
Alarms Lark Pictures miad
Android MIUI Podcasts sogou
AppTimer Movies Ringtones
DCIM Music TWRP
Download Notifications acc_v2022.7.30-dev_202207300_2206.zip
# 获取到root权限,输入su,点击回车之后手机上会弹出一个确认框,点击确认即可
violet:/ $ su
# 开始安装模块
violet:/ # magisk --install-module /sdcard/acc_v2022.7.30-dev_202207300_2206.zip
- Device is system-as-root
...
Installing in /data/adb/modules/acc/...
- Done
LINKS
....
Rebooting is unnecessary.
- acc commands may require the /dev/.vr25/acc/ prefix (e.g., /dev/.vr25/acc/acc -v) until system is rebooted.
- Daemon started.
violet:/ #$ adb shell
# 检查对应位置是否有相关压缩包文件
violet:/ $ ls /sdcard/
Alarms Lark Pictures miad
Android MIUI Podcasts sogou
AppTimer Movies Ringtones
DCIM Music TWRP
Download Notifications acc_v2022.7.30-dev_202207300_2206.zip
# 获取到root权限,输入su,点击回车之后手机上会弹出一个确认框,点击确认即可
violet:/ $ su
# 开始安装模块
violet:/ # magisk --install-module /sdcard/acc_v2022.7.30-dev_202207300_2206.zip
- Device is system-as-root
...
Installing in /data/adb/modules/acc/...
- Done
LINKS
....
Rebooting is unnecessary.
- acc commands may require the /dev/.vr25/acc/ prefix (e.g., /dev/.vr25/acc/acc -v) until system is rebooted.
- Daemon started.
violet:/ #一般安装模块之后是需要重启手机的,这个模块的安装信息显示Rebooting is unnecessary
安装完成之后打开Magisk App,点击选择模块按钮,就可以看到安装好的模块

参考阅读
每个 Android 玩家都不可错过的神器(一):Magisk 初识与安装
The system has been destroyed error on Xiaomi: How to Fix
How to boot into recovery mode using button combos, ADB, and root apps