实操手册 · 一步一步跟着做
每一步都标清楚了是在手机上操作还是在电脑上操作。手机端配的是本机真机截图,照着点就行;电脑端给的是实际命令和真实输出,直接复制粘贴。
开始之前两条线怎么配合
整个活儿分两条线:电脑负责刷机和传文件,手机负责点按和授权。两边交替进行,顺序不能乱。
电脑端要做 10 件事
- 装 adb 工具
- 确认电脑认到手机
- 跑解锁工具
- 从固件里取出 boot.img
- 把 boot.img 推进手机
- 取回修补好的镜像
- fastboot 刷入
- 验证 root
- 装 AdAway
- 查 hosts 是否真的写入
手机端要做 9 件事
- 打开开发者选项
- 开 OEM 解锁 / USB 调试
- 允许 USB 调试授权
- 关掉「查找手机」
- 用 Magisk 修补 boot.img
- 配 Zygisk 和排除列表
- 装三个模块
- 把 AdAway 设成 root 模式
- 更新规则、加域名、配 DNS
两个必须先知道的前提
一、解锁会清空手机全部数据。照片、微信聊天记录、应用数据全没。做之前先备份,微信单独用「聊天记录迁移」搬到另一台设备或电脑。
二、解锁要等 168 小时。小米账号和设备绑定满 7 天才能解锁,这是小米的限制,绕不过去。所以流程第一步就去绑账号、关查找手机,然后等,等待期间把后面的准备都做完。
下面从第一步开始。如果手机已经 root 好了、只想看 AdAway 部分,直接跳到第 14 步。
这篇分五段,可以按需跳
- 准备:把电脑和手机接上(第 1–5 步)
- 拿到 root:修补 boot 并刷入(第 6–11 步)
- 配 Magisk:Zygisk、排除列表、三个模块(第 12–13 步)
- AdAway:把广告真正拦掉(第 14–19 步,只想看拦截从这跳)
- 日常维护:更新、白名单、升级前注意(第 20–22 步)
第一阶段准备:把电脑和手机接上
装好 adb 工具
去 Google 官方页面下载 SDK Platform-Tools,解压到一个路径里没有中文、没有空格的目录,比如 D:\adb。解压完应该是这样:
D:\adb\platform-tools\
adb.exe
fastboot.exe
AdbWinApi.dll
AdbWinUsbApi.dll
验证一下能不能用:在 platform-tools 文件夹的地址栏里输入 cmd 回车,会直接在这个目录打开命令行,然后敲:
C:\> adb version
Android Debug Bridge version 1.0.41
Version 37.0.1-15733141
Running on Windows 10.0.19044
做完你会看到:能打印出版本号就说明工具正常。如果提示「不是内部或外部命令」,说明你不在这个目录里,或者路径写错了。
打开开发者选项
打开三个关键开关
连上手机,确认认到了
用数据线把手机连电脑。线要选能传数据的,很多充电线只有电源针脚,插上去电脑一点反应都没有。插好后手机通知栏会冒出一条「已连接到 USB 调试」。
电脑上敲:
C:\> adb devices
List of devices attached
lj6lbus8sorscazx device
第一次连会弹一个手机上的对话框「是否允许 USB 调试」,勾上「一律允许使用这台计算机进行调试」,再点「允许」。不点的话电脑这边会一直显示 unauthorized。
做完你会看到:设备后面跟的是 device 就对了。如果是 unauthorized,去手机上把那个授权弹窗点掉;如果列表是空的,换根线、换个 USB 口(优先插主板后面的口)。
解锁前必须做的两件事
手机这边:关掉「查找手机」。路径是 设置 → 点最上面的小米账号 → 云服务 → 查找手机 → 关闭。不关这个,解锁工具会直接拒绝,提示设备被锁定。
手机这边:登录小米账号,然后把设备绑上去。解锁工具要求手机和电脑登录同一个账号,而且这个账号在这台设备上要登录满 168 小时(7 天)。所以这一步越早做越好,做完就开始等。
电脑这边:下载小米官方解锁工具 MiFlashUnlock。解压后运行 miflash_unlock.exe,登录同一个小米账号,手机进 fastboot 再插上,工具里点「解锁」。
# 方法一:命令行 C:\> adb reboot bootloader # 方法二:手机关机后,同时按住「音量减 + 电源」直到出现兔子修安卓的图 # 确认进了 fastboot C:\> fastboot devices lj6lbus8sorscazx fastboot
解锁会清空全部数据,而且开机第一屏会多一行「unlocked」小字,属于正常现象,去不掉。解锁完成后手机自动重启并恢复出厂状态,此时 root 还没到手,只是 BL 开了。
做完你会看到:开机时屏幕顶部出现解锁标志,或者 adb shell getprop ro.boot.verifiedbootstate 返回 orange。
第二阶段拿到 root:修补 boot 并刷入
原理一句话:Magisk 不替换系统文件,它把原版 boot 分区镜像改一点点,让你刷回去。所以顺序必须是「取原厂 boot → Magisk 改 → 刷回去」。改过的那份叫 patched boot。
从官方固件里取出 boot.img
关键是版本必须和手机当前系统完全一致。手机上 设置 → 我的设备 → 全部参数与信息,记下「OS 版本」那串,本机是 OS2.0.20.0.UMOCNXM,代号 ruby。版本对不上,刷完会卡开机。
下载同版本官方固件(线刷包 tgz),解压后有两种情况:
ruby_images_OS2.0.20.0.UMOCNXM_2025xxxx.tgz
└─ ruby_images_.../
images/
boot.img ← 就是这个
recovery.img
...
# 装 payload_dumper(Python 工具),然后把 payload.bin 放同一目录 C:\> python payload_dumper.py payload.bin --out output Processing boot partition... Done. Extracted: boot.img
做完你会看到:手上有一个几十 MB 的 boot.img。先把它复制一份留底,命名为 boot_原版_备份.img,以后救砖、还原系统都靠它。
把 boot.img 推进手机
手机正常开机、连着电脑的情况下:
C:\> adb push boot.img /sdcard/Download/
boot.img: 1 file pushed, 0 skipped. 30.2 MB/s (100663296 bytes in 3.185s)
做完你会看到:手机的「文件管理 → 手机存储 → Download」里能看到 boot.img。
用 Magisk 修补这个镜像
手机上装好 Magisk App(官方 GitHub 下 apk,直接点安装即可)。打开后主页最上面的 Magisk 卡片右边有个「安装」按钮,点它。

弹出的菜单里选「选择并修补一个文件」,然后到 Download 目录里选刚才推进来的 boot.img,点「开始」。
跑完最后一行会显示输出路径,长这样:
Output file: /sdcard/Download/magisk_patched-30700_ab12c.img
别选错:第二个选项「直接安装(推荐)」是把 Magisk 直接刷进当前 boot 分区,看着省事,但一旦失败手机就开不了机,而且你没有原版镜像能救。老老实实用「选择并修补一个文件」。
做完你会看到:Download 目录里多出一个 magisk_patched-30700_xxxxx.img。
把修补好的镜像取回电脑
C:\> adb pull /sdcard/Download/magisk_patched-30700_ab12c.img .
/sdcard/Download/magisk_patched-30700_ab12c.img: 1 file pulled, 0 skipped.
文件名按你手机上实际显示的那个填,中间的随机串每个人都不一样。
刷进去
手机进 fastboot(关机后按住音量减 + 电源,或者命令行 adb reboot bootloader),然后依次执行:
C:\> fastboot devices lj6lbus8sorscazx fastboot C:\> fastboot flash boot_a magisk_patched-30700_ab12c.img Sending 'boot_a' (98304 KB) OKAY [ 2.271s] Writing 'boot_a' OKAY [ 0.152s] Finished. Total time: 2.436s C:\> fastboot reboot
注意刷的是 boot_a 不是 boot。这台机器是 A/B 分区,当前活动槽位是 a,刷错槽位等于没刷。
如果卡在开机动画超过 5 分钟,长按电源键强制关机,重新进 fastboot,刷回 boot_原版_备份.img,手机就能正常开机,然后回头检查是不是 boot.img 版本和系统不一致。
做完你会看到:手机正常开机进桌面。
确认 root 到手
第三阶段把 Magisk 配好
开 Zygisk,配排除列表
Magisk 主页右上角齿轮进设置,往下翻到 Magisk 这个分组,四行要按下面这样设:
| 项目 | 设成 | 为什么 |
|---|---|---|
| Systemless hosts | 开 | AdAway 靠它写 hosts,装上 Systemless Hosts 模块后它会自动变成开 |
| Zygisk | 开 | Shamiko 和 PIF 都要靠它,关了这两个模块就废了 |
| 遵守排除列表 | 关 | 装了 Shamiko 就必须关,让 Shamiko 接管屏蔽逻辑 |
| 配置排除列表 | 点进去勾应用 | 把要瞒过 root 检测的 App 勾上 |

点「配置排除列表」,在列表里找到下面这些应用,每一个都点一下勾上(应用名右边出现勾选就对了):
- 支付宝、淘宝、微信、QQ —— 国内大厂都会查 root
- 各大银行 App、云闪付 —— 金融类查得最狠
- 江西赣政通、交管 12123 —— 政务类会直接检测,不勾就闪退
- Google Play 服务 —— 勾上顺便过 Play Integrity
做完你会看到:配置排除列表顶部出现一个数量(本机是 10 个)。之后这些 App 就能正常打开,不会再因为 root 闪退了。
这里最容易搞反:「遵守排除列表」到底是开还是关,取决于你装没装 Shamiko。装了 → 关;没装 → 开。两个都开着,Shamiko 不生效;两个都关着,什么都不会被隐藏。
装三个模块
Magisk 底部点「模块」,右上「从本地安装」,把这三个 zip 依次装上(装完一个会自动提示重启,全部装完再统一重启):
- Shamiko —— 把 root 藏起来,配合上面那个关着的「遵守排除列表」用
- Play Integrity Fix(PIF)—— 让 Google 服务认为设备没被改过
- Systemless Hosts —— 装 AdAway 时会自动装;如果没自动装,手动装一个

做完你会看到:模块列表里三个名字都在,每个下面写着版本号和作者。Zygisk 没开的话 Shamiko 会标红提示「未启用」。
第四阶段AdAway:把广告真正拦掉
安装 AdAway
两条路,任选一条。
手机直接装:浏览器打开 AdAway 官方站或 F-Droid,下载 6.x 的 apk,点开安装,允许「安装未知应用」。
电脑推着装:apk 放到电脑上,然后:
C:\> adb install -r AdAway-6.1.4.apk
Performing Streamed Install
Success
如果提示 INSTALL_FAILED_USER_RESTRICTED,是小米的安装拦截。去开发者选项里确认「USB 安装」是开的,或者改用手机直接装。
做完你会看到:桌面上出现 AdAway 图标(白鸽子)。
设成 root 模式并授权
第一次打开 AdAway 会弹 root 授权,点「允许」(勾上「记住选择」,以后不再问)。

然后点主页左下角那三条横杠,底部会弹出菜单,只有两项,选「首选项」:
在「广告屏蔽」分组里,点「基于 root 的广告拦截器」,按提示允许 root。这一项决定 AdAway 用哪种方式拦广告:
- 基于 root —— 要的就是这个。改系统 hosts 文件,全系统生效、不额外耗电、不用常驻 VPN
- 基于 VPN —— 不要选。两个不能同时用,而且 VPN 模式会跟 E路通、赣政通这类自己要用 VPN 的 App 抢通道,抢输了就整机断网
- 启用 IPv6 支持 —— 可开可不开,开了对 IPv6 的广告域名也拦
做完你会看到:返回主页,最下面那个红色圆形按钮是两条竖线(暂停图标),说明屏蔽正在跑。它要是显示三角形播放图标,说明被暂停了,点一下恢复。
更新规则,让 hosts 真的写进去
回主页,点右边那个向下箭头(「更新 hosts」)。第一次要跑一两分钟,屏幕别关,等它跑完。

数字到七万多、状态行显示「暂无更新」,就说明 hosts 真的写进系统了。点那张来源卡,能看到具体用了哪几个规则源:

这三个默认源都是国外的,覆盖的是国际广告联盟。国内的联盟得自己加,见下一步。
电脑端可以验证 hosts 是不是真的落到系统里了:
C:\> adb shell su -c "wc -l /data/adb/modules/hosts/system/etc/hosts" 143027 /data/adb/modules/hosts/system/etc/hosts # 随便查一个被拦的域名,返回 0.0.0.0 就对了 C:\> adb shell ping -c 1 doubleclick.net PING doubleclick.net (0.0.0.0) 56(84) bytes of data.
做完你会看到:行数是六位数(本机 14 万行左右)。如果只有几十行,说明模块没挂上,回第 13 步检查 Systemless Hosts。
加国内联盟域名
国内 App 里的信息流原生广告,走的是穿山甲、优量汇、快手联盟、百度的广告 SDK。这些域名国外的规则源不会收录,得手动加。
入口:主页点左边那个大数字(就是「74497 阻止」),进入「用户列表」,再点右下角「添加 host」。
一条一条加下面这 13 个(只填域名,前面不要加 http://,也不要加 0.0.0.0):
gromore.pangolin-sdk-toutiao.com api-access.pangolin-sdk-toutiao.com gromore.pangolin-sdk-toutiao-b.com gdt.qq.com api.e.qq.com win.gdt.qq.com pgdt.gtimg.cn kuaishouzt.com open.kuaishouzt.com mobads.baidu.com cbjs.baidu.com tanx.com atanx.alicdn.com
加完回主页,再点一次「更新 hosts」,让新加的域名真正写进文件。
三种千万别加:kwaicdn.com(快手视频 CDN,加了快手就刷不出视频)、alimama.com(淘宝商家后台,加了千牛打不开)、还有各种 *.pangolin-sdk-toutiao.com 的其它子域——大部分本来就返回 NXDOMAIN,加了白占位置。
做完你会看到:用户列表里多出这 13 条,主页拦截数字会涨一点。
备份规则,别偷懒
配私人 DNS(让 DNS 也干净)
hosts 拦得住域名,但拦不住 App 直连 IP 的请求,所以再配一个会过滤广告的 DNS,两层一起上。
路径:设置 → 更多连接 → 专用DNS。
三种选项怎么选,一句话说清:
| 选项 | 什么时候用 |
|---|---|
| 已关闭 | 不用,等于放弃这一层 |
| 自动 | 推荐。能用加密 DNS 就用,被打断时自动回退普通 DNS,不会让整机断网 |
| 专用 DNS 提供商主机名 | 想强制走指定服务器时用,但一旦 VPN 抢占或服务器超时,整机 DNS 会全挂,上网全断 |
这是本机踩过的坑:之前把主机名填成 dot.pub 选了严格模式,结果一开 VPN(E路通),853 端口被抢,整机 DNS 直接失效,什么网都上不了。改成「自动」后就正常了。
做完你会看到:「自动」后面出现勾。用 ping 随便测个域名能通,就说明 DNS 没坏。
第五阶段日常维护
每周点一次更新
AdAway 主页那个向下箭头,每周点一次。规则源每天都在加新域名,不更新就会漏。
首选项里的「自动更新」可以打开,它会自己定时拉规则,但小米的后台管理经常把它的定时任务掐掉,所以还是手动点比较靠谱。
做完你会看到:主页状态变成「已成功更新 hosts 文件」,日期是最新的。
某个 App 用不了了怎么办
九成是把它的域名误拦了。判断和修法:
- AdAway 主页点底部那个红色圆按钮暂停屏蔽,再打开那个 App
- 能用了 → 确认是 AdAway 拦的;还是不能用 → 是 root 检测或别的问题,跳过下面
- 回 AdAway,进用户列表,底部切到「允许」标签,点「添加 host」,把那个 App 的域名加进白名单
- 重新「更新 hosts」,再恢复屏蔽
做完你会看到:App 恢复正常,同时其它广告照样被拦。
系统升级前必看
直接 OTA 升级 → root 会丢。升级会覆盖 boot 分区,Magisk 就没了。而且升级后系统版本变了,旧的 patched boot 不能再用。
正确顺序:
- 升级前先在 Magisk 里「卸载 Magisk → 恢复原厂镜像」,或者干脆不管它
- 完成 OTA,重启进新系统
- 重新下载新版本固件,取新的 boot.img
- 回到第 7 步,重新修补、重新刷
- AdAway 里点「备份/还原屏蔽规则 → 还原」,把域名清单导回来
升级后 hosts 会失效,因为 Systemless Hosts 模块跟着 boot 一起没了。重新装一次模块再更新 hosts 就行。
附录速查
命令速查表
| 要干什么 | 命令 |
|---|---|
| 看手机连上没 | adb devices |
| 看 fastboot 连上没 | fastboot devices |
| 进 fastboot | adb reboot bootloader |
| 推文件到手机 | adb push 文件名 /sdcard/Download/ |
| 从手机取文件 | adb pull /sdcard/Download/文件名 . |
| 刷 boot | fastboot flash boot_a magisk_patched.img |
| 验证 root | adb shell su -c id |
| 看 hosts 行数 | adb shell su -c "wc -l /data/adb/modules/hosts/system/etc/hosts" |
| 看排除列表内容 | adb shell su -c "magisk --denylist ls" |
| 往排除列表加 App | adb shell su -c "magisk --denylist add 包名" |
| 设备掉线重连 | adb kill-server 然后 adb devices |
这些文件必须留底
- boot_原版_备份.img —— 原厂 boot,救砖唯一靠山
- magisk_patched-30700_xxxxx.img —— 当前生效的补丁镜像
- 同版本官方固件 tgz —— 实在不行整个刷回去
- AdAway 备份 json —— 你的域名清单
- Shamiko.zip / PIF.zip / Magisk.apk —— 重装时不用再到处找
常见故障对照
| 现象 | 原因 | 怎么修 |
|---|---|---|
设备一直 unauthorized | 手机没点授权弹窗 | 拔线重插,手机下拉通知栏点「USB 调试已连接」,勾「一律允许」 |
devices 列表空的 | 线是纯充电线 / 口坏了 | 换线,换主板后面的 USB 口 |
| 刷完卡开机动画 | boot.img 和系统版本不匹配 | 进 fastboot 刷回原版备份 |
| Magisk 里 Zygisk 是「否」 | 没开 Zygisk 或没重启 | 设置里打开 Zygisk,重启手机 |
| Shamiko 显示未启用 | Zygisk 没开 | 开 Zygisk 重启,再进模块页看 |
| 赣政通/银行 App 闪退 | 没用排除列表藏 root | 配置排除列表里勾上这个 App,重启 |
| AdAway 数字不动 | root 模式没勾 / hosts 没写入 | 首选项勾 root 模式,重新更新 hosts |
| 开 VPN 后全网断 | 私人 DNS 设了严格主机名 | 改成「自动」 |
和站内另一篇「安卓去广告」的区别
站内已有一篇 《GKD:写几条规则,让安卓自己跳过开屏广告》,讲的是界面层的办法:靠无障碍服务模拟点击,把开屏广告的「跳过」替你按掉,不需要 root。本篇走的是系统层:改 hosts 让广告域名解析到 0.0.0.0,从请求这一端掐断,能管到信息流里的原生广告,但代价是要解锁 BL、刷 Magisk,而且解锁会清空数据。两者不冲突,可以先看那篇判断要不要折腾 root。
本文档基于真机操作整理:Redmi Note 12 Pro(ruby / 22101316C),澎湃OS 2.0.20.0.UMOCNXM,Android 14,Magisk 30.7 (30700),AdAway 6.1.4。
手机端截图全部来自本机实拍;电脑端为便于复制,用命令行卡片呈现实际执行的命令与输出。
甄宝园














