每次打开 AdAway 都显示"已禁用" —— 检查 root 权限和 system 分区写入
症状
每次打开 AdAway 都显示灰色"已禁用"状态,hosts 文件重置回系统默认的只有 localhost 那一行。需要重新手动应用才生效——但过一会又没了。
核心原因(AdAway Wiki 明确说明)
AdAway 自身不会"保持启用"——它的启用状态完全取决于 hosts 文件是否有完整内容。所以"每次打开都禁用" = hosts 文件被重置了。
hosts 文件被重置的可能原因:
- Root 权限不完整——AdAway 无法写入
/system/etc/hosts,应用后重启就恢复默认 - Magisk Systemless Hosts 没正确启用——你以为用了 Systemless Hosts 其实没有
- HTC 设备 S-ON 状态——HTC 的 S-ON 保护让 system 分区无法永久写入
- A/B 分区只刷了一侧 Magisk——另一侧的 hosts 没更新,重启时切换到旧分区
- 自定义 ROM 自带 hosts 管理器——ROM 自己在维护 hosts,AdAway 写的内容被覆盖
排查步骤
第一步:直接看 hosts 文件里有什么
用 root 工具(Terminal Emulator 或 Magisk 自带的 Shell)执行:
su
cat /system/etc/hosts | head -20
如果输出只有:
127.0.0.1 localhost
::1 localhost
那确实是被重置了。 继续下一步。
第二步:测试能不能写 hosts
su
echo "127.0.0.1 test.123" >> /system/etc/hosts
cat /system/etc/hosts | grep test
如果第二行有输出 → 能写。问题在 AdAway 没正确应用。如果第二行没输出、或报错 Read-only file system → 不能写,是权限或分区问题。
第三步:检查 root 权限和 Magisk
su -c id
正常 root 设备应该看到 uid=0(root)。如果返回非 root 或报错,说明 root 权限有问题。
然后 Magisk Manager → 模块 → 看 Systemless Hosts 模块是否已启用。启用后必须重启设备。
第四步:检查 A/B 分区
A/B 分区设备在 Magisk Manager 里应该能看到两个分区都已刷 Magisk。只刷了一侧的话,重启时可能切换到未刷 Magisk 的一侧 → hosts 没被更新。
第五步:HTC 设备 S-ON / S-OFF
HTC 有特殊的 S-ON 保护:
- S-ON:
/system分区写入无法持久化 - S-OFF:完全 root,可以修改 system 分区
用 adb shell getprop ro.boot.verifiedbootstate 检查:
green= S-ON(默认,system 写不了)orange= S-OFF(可以写)
如果是 S-ON,Magisk Systemless Hosts 是唯一解决方案——它不碰 /system,只在 Magisk 分区维护 hosts。
第六步:自定义 ROM 内置 hosts 管理
某些 ROM (比如 MIUI 早期、LineageOS 某些版本)自带广告拦截功能,会在启动时重置 hosts 文件。关掉 ROM 的内置拦截再试。
VPN 模式用户的特别情况
非 root 设备用 VPN 模式:
每次开 AdAway 都显示禁用 + 广告回来 → VPN 进程被杀了。
检查:
- AdAway 的前台服务通知还在不在
- 电池优化里 AdAway 是否被设为"无限制"
- 小米/三星/华为 ROM 的自启动管理里 AdAway 是否已开启自启动 + 后台活动
修复后的验证
正确应用一次 hosts(在 AdAway 主界面点应用按钮),然后:
su
wc -l /system/etc/hosts
正常情况下应该有几千到几万行(取决于你启用的 hosts 源数量)。如果还是只有几十行 → 应用失败,回头检查 root / Magisk / 分区。
然后重启设备,再 cat /system/etc/hosts | head -5。如果重启后 hosts 还在 → 修复成功。
一句话总结
反复被禁用 = hosts 文件被重置 = AdAway 没有 root 权限写入 hosts,或写入被 ROM/分区设置覆盖。
用
su命令直接测试能不能写 hosts,然后逐层排查 root 权限、Magisk、分区状态。