Skip to content

刷机与安装Magisk,工具与流程,雏鹰起飞,一条龙手把手式文档

Magisk出现的背景

选择Android手机的同时,也选择了一种无限的可能,终究还是时势造英雄

  • 为了突破OEMOriginal Equipment Manufacturer,代工生产)定制应用的机型限制,给Android插上一双翅膀
  • 为了解决NetflixGoogle Play等一众应用不能在已经root的手机上正常运行
  • 为了解决改动过的系统文件的ROM(硬盘存储)不能通过OEM渠道进行正常的OTA升级(Over-the-Air Technology, 在线升级手机系统)

Magisk做了什么

通过挂载一个与系统文件相隔离的文件系统来加载自定义内容,为系统分区打开了一个通往平行世界的入口,所有改动在那个世界(Magisk 分区)里发生,在必要的时候却又可以被认为是(从系统分区的角度而言)没有发生过

达到的效果

  • 不破坏或更改原有系统的完整性,系统处于一个非root状态,但是Magisk内部运行的模块可以获取到root权限

  • 当被挂载的 Magisk 分区被隐藏甚至被取消挂载时,原有系统分区的完整性丝毫未损

  • 可以运行需要 root 验证的程序

  • 可以运行对设备认证状态有要求的应用

  • 可以进行需要验证系统完整性的 OTA 更新

  • Magisk可以被看作是一种挂载文件系统,这种文件系统通过巧妙的实现方式避开了对系统文件的直接修改,从稳定性上来看要优于以往任何一种系统框架

Magisk项目信息

官方项目地址

https://github.com/topjohnwu/Magisk
https://github.com/topjohnwu/Magisk

release包信息

https://github.com/topjohnwu/Magisk/releases
https://github.com/topjohnwu/Magisk/releases

需要在release模块下载一个release apk包,目前最新的是Magisk-v26.1.apk,后续如果有更新的就先尝试下载更新的包,下载完成之后把文件名称改一下,后缀改成zip,改成Magisk.zip

本机测试的时候可能由于机型比较旧,Magisk安装完成之后点击Android图标无反应,所以就降版本到Magisk-v25.2.apk之后再次安装才成功

前提知识

手机刷机rootunlockBootloader的对比

  • 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/
https://tutorials.how/android/boot-into-fastboot-mode/

其他手机进入到recovery界面,参考

https://www.xda-developers.com/how-to-boot-to-recovery/?newsletter_popup=1
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

打开开发者选项,点击进入设备解锁状态,然后会看到官方的设备解锁操作流程,按照其流程操作

OEM_unblock

  1. 一般是插入SIM卡之后,绑定完成小米账号

  2. 从小米的官网获取到解锁工具地址,在windows系统上,下载安装解锁工具,访问地址 http://www.miui.com/unlock/index.html进行下载,下载之后运行压缩包里面的miflash_unlock.exe,这时需要再次登录小米账号(如果显示miflash有更新,一定要选择更新

  3. 之后使用usb数据线连接手机与电脑,同时手机需要打开USB调试模式,配置USB可传输文件方式OEM_unlock_usb_file

  4. windows上打开设备管理器,在其他设备选项下面会有一个Android Phone的选项,点击更新驱动,选择浏览计算机以查找驱动程序软件(R),选择从http://www.miui.com/unlock/index.htmlmiui下载的解锁工具解压出来的driver文件夹进行驱动更新(旧版本的解锁工具是没有driver文件夹的,所以在运行解锁工具的时候有更新提示,一定要更新,目前下载的版本是miflash_unlock-6.5.406.31,解压出来会有个driver文件夹)

  5. 更新完成之后查看电脑端解锁工具,依据提示操作手机

    OEM_unlock_windows

  6. 操作手机进入到bootloader模式,该模式有点类似与PC装机时候经常看到的BIOS模式

    phone_bootloader

  7. 最后windows上的解锁工具检测到设备之后点击解锁

    重启手机,进入开发者模式,看到如下信息,表示手机unlock成功

    OEM_unlock_result

Android platform tools安装

官方下载访问地址

https://developer.android.com/tools/releases/platform-tools
https://developer.android.com/tools/releases/platform-tools

Ubuntu系统安装ADBfastboot

shell
$ sudo apt install android-tools-adb android-tools-fastboot
$ sudo apt install android-tools-adb android-tools-fastboot

ADB工具(Android Debug Bridge)

一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问

主要功能

  • 在设备上运行Shell命令
  • 将本地apk软件安装至模拟器或Android设备
  • 管理设备或手机模拟器上的预定端口
  • 在设备或手机模拟器上复制或粘贴文件

adb 命令的基本语法

shell
$ 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 命令获取

查看已经连接的设备

shell
$ adb devices
List of devices attached
$ adb devices
List of devices attached

手机使用数据线连接电脑的时候,打开手机开发者选项-USB调试模式,会弹出手机与计算机RSA密钥指纹匹配的确认按钮,之后再次执行查看已经连接设备,如下表示手机与电脑之间的调试连接成功

shell
$ adb devices
List of devices attached
5ba7ca2f	device
$ adb devices
List of devices attached
5ba7ca2f	device

通过adb进入到手机的shell环境,前缀violet是红米note 7 Pro的版本代号

shell
$ 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模式的时候也可以使用该操作)

shell
$ adb push test.txt /sdcard
$ adb push test.txt /sdcard

或者也可以直接推送到根路径下

shell
$ adb push test.txt /
$ adb push test.txt /

重启手机

shell
$ adb reboot
$ adb reboot

重启手机到recovery模式

shell
$ adb reboot recovery
$ adb reboot recovery

重启手机到fastboot/bootloader模式

shell
$ adb reboot bootloader
$ adb reboot bootloader

更多使用请参考

https://juejin.cn/post/6844903645289398280
https://juejin.cn/post/6844903645289398280

fastboot工具与模式

fastboot意思是快速启动,在安卓手机中fastboot是一种比recovery更底层的刷机模式,使用USB数据线,连接电脑的一种刷机模式,通常称为“线刷”刷机,当手机不能进入到系统或者不能进入到recovery模式的时候,如果还能进入到fastboot模式,手机还能拯救,如果不能进入到fastboot,则彻底变砖了

当手机进入到fastboot模式的时候,adb工具就不能使用了,只能使用fastboot工具

主要功能有

  • 完成分区镜像烧录
  • 分区擦除
  • 设备重启
  • 获取设备状态信息

当手机和电脑端使用数据线连接的时候(之前执行了adb绑定手机与电脑)

重启设备操作

shell
$ fastboot reboot
$ fastboot reboot

假设电脑当前shell路径下存在一个文件twrp.img,把该文件刷到手机recovery分区

shell
$ fastboot flash recovery twrp.img
$ fastboot flash recovery twrp.img

TWRP 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.html
https://twrp.me/xiaomi/xiaomiredminote7pro.html

twrp_note7_image_choose

twrp_note7_image

recovery模式安装Magisk

在手机处于fastboot模式的时候,电脑端执行命令(演示需要,在下载完成twrp镜像之后把名称统一修改为twrp.img),把第三方的recovery image刷入手机的recovery分区,替换掉系统厂商自带的recovery,有些手机重启之后第三方的recovery image可能会被系统自带的recovery image还原,重新刷入第三方recovery image即可

shell
$ fastboot flash recovery twrp.img
$ fastboot flash recovery twrp.img

之后执行命令重启手机

shell
$ 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到手机根路径

shell
$ 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按钮重启系统(如果系统卡住不能进入系统,直接按住电源键强制关机再启动)

进入系统后续操作

首先看到的是MagiskApp,缺少图片素材版本的,点击图标弹出一个提示框,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/v2rayNG
https://github.com/2dust/v2rayNG

科学完成之后,再次点击Magisk图标进行更新

之后进入Magisk界面查看,注意看到版本号位置是有参数的,同时超级用户模块位置是可以点击的(如果Magisk这三块地方异常,可能就不是通过recovery模式安装的Magisk,可能是直接在系统运行之后安装Magisk,这样的话就不能使用到Magisk的魔法了)

magisk_app_home

Operation not permitted报错

该报错是redmi note 7 pro的报错,miui论坛发现有很多redmi note系列的都会有这个报错

在安装Magisk过程中,报错操作未被允许,该错误可能和twrprecovery 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/file
https://www.mediafire.com/file/9g239qv3wk6sz5k/violet01-01-2021test.img/file

后续操作按照前面章节刷入recovery image操作

最后安装成功界面如下

magisk_recovery_install_success

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才选择这个的)

redmi_fastboot_img

下载完成压缩包后解压,解压出来的文件夹内包含flash_all.sh相关文件

保持数据线连接到手机,手机进入到fastboot模式,执行命令如下(PS:有些人可能会觉得只需要刷入一点vbmeta.img或者一些boot.img之后再启动系统,可以最大限度的保留数据,但是我的实际经历表示,手机都快变砖了,数据什么都无所谓了,能够正常开机进入系统才是我唯一在乎的)

shell
$ ./flash_all.sh
$ ./flash_all.sh

Magisk模块介绍与安装

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.html
https://topjohnwu.github.io/Magisk/guides.html

安装模块选择一个高级充电控制的Magisk Module项目,模块安装可以使用Magisk App点击安装,也可以选择使用adb安装

充电控制项目仓库地址

https://github.com/VR-25/acc
https://github.com/VR-25/acc

选择一个releasezip版本下载

目前选择的版本是acc_v2022.7.30-dev_202207300_2206.zip

下载之后使用压缩包管理器查看里面的文件,注意看压缩包里面的根路径的位置,Magisk在解压压缩包的时候默认提取完成之后install.sh等文件就是在当前路径,而不是还要去某个文件夹访问

magisk_module_zip_struct

假设现在有个temp文件夹,需要打包压缩为zip

可以在文件夹外面执行命令,这个是最常见的方法

shell
$ zip -r temp.zip temp/
$ zip -r temp.zip temp/

也可以进入到temp文件夹里面执行命令,两个命令产生的压缩包的文件根路径是不一样的,Magisk module要求的就是zip包里面的文件根路径就是/,否则安装模块的时候会报错Unzip error

shell
$ zip -r temp.zip *
$ zip -r temp.zip *

为方便演示,此处使用adb方式安装模块

查看adb连接设备信息,如果是像下面这样的输出,需要关闭手机USB调试模式,再次打开保证手机和电脑配对

shell
$ adb devices
List of devices attached
5ba7ca2f	unauthorized
$ adb devices
List of devices attached
5ba7ca2f	unauthorized

正常输出如下

shell
$ adb devices
List of devices attached
5ba7ca2f	unauthorized
$ adb devices
List of devices attached
5ba7ca2f	unauthorized

把模块压缩推送到手机/sdcard位置(如果该位置不存在,可以直接把文件推送到/路径)

shell
$ 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环境

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,点击选择模块按钮,就可以看到安装好的模块

magisk_installed_module

参考阅读

每个 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

Boot any Android Device into Fastboot Mode

ADB 操作命令详解及用法大全

Android 调试桥 (adb)

Best Magisk modules

Magisk Developer Guides

Last updated:

Released under the MIT License.