刷机与安装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/Magisk
release
包信息
https://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 ROM
Recovery
模式是一个小型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/
其他手机进入到recovery
界面,参考
https://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-tools
在Ubuntu
系统安装ADB
与fastboot
$ sudo apt install android-tools-adb android-tools-fastboot
ADB
工具(Android Debug Bridge
)
一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell
(可用来在模拟器或连接的设备上运行各种命令)的访问
主要功能
- 在设备上运行
Shell
命令 - 将本地
apk
软件安装至模拟器或Android设备 - 管理设备或手机模拟器上的预定端口
- 在设备或手机模拟器上复制或粘贴文件
adb
命令的基本语法
$ adb [-d|-e|-s ]
参数解释
-d
指定当前唯一通过USB
连接的 Android 设备为命令目标-e
指定当前唯一运行的模拟器为命令目标-s
指定相应设备序列号的设备/模拟器为命令目标
如果只有一个设备/模拟器连接时,可以省略掉 [-d|-e|-s
这一部分,直接使用 adb
在多个设备/模拟器连接的情况下较常用的是 -s
参数,serial-number
是指设备的设备序列号,可以通过 adb devices
命令获取
查看已经连接的设备
$ adb devices
List of devices attached
手机使用数据线连接电脑的时候,打开手机开发者选项
-USB调试模式
,会弹出手机与计算机RSA
密钥指纹匹配的确认按钮,之后再次执行查看已经连接设备,如下表示手机与电脑之间的调试连接成功
$ 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
把电脑端的某个文件推送到手机,假设电脑端当前路径存在一个文件test.txt
,推送到手机路径为/sdcard/test.txt
位置(在手机处于recovery
模式的时候也可以使用该操作)
$ adb push test.txt /sdcard
或者也可以直接推送到根路径下
$ adb push test.txt /
重启手机
$ adb reboot
重启手机到recovery
模式
$ adb reboot recovery
重启手机到fastboot/bootloader
模式
$ adb reboot bootloader
更多使用请参考
https://juejin.cn/post/6844903645289398280
fastboot
工具与模式
fastboot
意思是快速启动,在安卓手机中fastboot
是一种比recovery
更底层的刷机模式,使用USB
数据线,连接电脑的一种刷机模式,通常称为“线刷”刷机,当手机不能进入到系统或者不能进入到recovery
模式的时候,如果还能进入到fastboot
模式,手机还能拯救,如果不能进入到fastboot
,则彻底变砖了
当手机进入到fastboot
模式的时候,adb
工具就不能使用了,只能使用fastboot
工具
主要功能有
- 完成分区镜像烧录
- 分区擦除
- 设备重启
- 获取设备状态信息
当手机和电脑端使用数据线连接的时候(之前执行了adb
绑定手机与电脑)
重启设备操作
$ fastboot reboot
假设电脑当前shell
路径下存在一个文件twrp.img
,把该文件刷到手机recovery
分区
$ fastboot flash recovery twrp.img
TWRP recovery
镜像
twrp(Team Win Recovery Project)
是一款第三方刷机软件,是一个recovery image
,在recovery
模式下使用
官网地址
https://twrp.me/
不同设备选择镜像地址,每个设备都有对应的镜像
https://twrp.me/Devices/
Xiaomi Redmi Note 7 Pro
选择镜像如下
https://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 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)
手机操作,点击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/
手机端可以安装Android
版本应用
https://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/
redme note 7 pro
解决方案镜像下载地址
https://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://xiaomifirmwareupdater.com/
下载对应手机型号的fastboot rom
,其他手机搜索fastboot rom
我的手机是选择了如下版本,china
发行版本,stable
, fastboot
模式的,比较新的一个版本(事实上我是看这个文件又大又新还是stable
才选择这个的)
下载完成压缩包后解压,解压出来的文件夹内包含flash_all.sh
相关文件
保持数据线连接到手机,手机进入到fastboot
模式,执行命令如下(PS:有些人可能会觉得只需要刷入一点vbmeta.img
或者一些boot.img
之后再启动系统,可以最大限度的保留数据,但是我的实际经历表示,手机都快变砖了,数据什么都无所谓了,能够正常开机进入系统才是我唯一在乎的)
$ ./flash_all.sh
Magisk
模块介绍与安装
Magisk
就像是一个docker
技术,是一个平台,Magisk modules
是平台上用户实际使用的东西,就像是一个个运行的docker
容器
优秀Magisk
模块推荐与安装参考文章
https://www.xda-developers.com/best-magisk-modules/
Magisk
开发者文档参考
https://topjohnwu.github.io/Magisk/guides.html
安装模块选择一个高级充电控制的Magisk Module
项目,模块安装可以使用Magisk App
点击安装,也可以选择使用adb
安装
充电控制项目仓库地址
https://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/
也可以进入到temp
文件夹里面执行命令,两个命令产生的压缩包的文件根路径是不一样的,Magisk module
要求的就是zip
包里面的文件根路径就是/
,否则安装模块的时候会报错Unzip error
$ zip -r temp.zip *
为方便演示,此处使用adb
方式安装模块
查看adb
连接设备信息,如果是像下面这样的输出,需要关闭手机USB调试模式
,再次打开保证手机和电脑配对
$ 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)
进入到手机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:/ #
一般安装模块之后是需要重启手机的,这个模块的安装信息显示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