AdAway 中文文档 下载 App

每次打开 AdAway 都显示"已禁用" —— 检查 root 权限和 system 分区写入

症状

每次打开 AdAway 都显示灰色"已禁用"状态,hosts 文件重置回系统默认的只有 localhost 那一行。需要重新手动应用才生效——但过一会又没了。

核心原因(AdAway Wiki 明确说明)

AdAway 自身不会"保持启用"——它的启用状态完全取决于 hosts 文件是否有完整内容。所以"每次打开都禁用" = hosts 文件被重置了。

hosts 文件被重置的可能原因:

  1. Root 权限不完整——AdAway 无法写入 /system/etc/hosts,应用后重启就恢复默认
  2. Magisk Systemless Hosts 没正确启用——你以为用了 Systemless Hosts 其实没有
  3. HTC 设备 S-ON 状态——HTC 的 S-ON 保护让 system 分区无法永久写入
  4. A/B 分区只刷了一侧 Magisk——另一侧的 hosts 没更新,重启时切换到旧分区
  5. 自定义 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 保护:

用 adb shell getprop ro.boot.verifiedbootstate 检查:

如果是 S-ON,Magisk Systemless Hosts 是唯一解决方案——它不碰 /system,只在 Magisk 分区维护 hosts。

第六步:自定义 ROM 内置 hosts 管理

某些 ROM (比如 MIUI 早期、LineageOS 某些版本)自带广告拦截功能,会在启动时重置 hosts 文件。关掉 ROM 的内置拦截再试。

VPN 模式用户的特别情况

非 root 设备用 VPN 模式:

每次开 AdAway 都显示禁用 + 广告回来 → VPN 进程被杀了。

检查:

  1. AdAway 的前台服务通知还在不在
  2. 电池优化里 AdAway 是否被设为"无限制"
  3. 小米/三星/华为 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、分区状态。