介绍

几年前有名的华为封杀安卓事件。

华为要求中国政府封杀过一些竞争对手的网路服务,其中就包含 Google 系产品用于网路联通性检查的“connectivitycheck.gstatic.com/generate_204”。原生安卓系统的 DNS 与联通性检查网址都是硬编码到系统里的,用户不能通过正常手段进行更改。

如果在固定Wifi下使用,可以设置一下Wifi热点的captive_portal_url。安卓系统会优先使用路由器派发的联通性检查网址。

“受限”原因

自 Android 5.0 起,谷歌引入了「Captive Portal」的机制,用于检测 WiFi网络认证是否正常。

该机制默认检测访问的是谷歌服务器,需要科学才能正常访问谷歌服务器,如若没有 WiFi就会出现网络受限的情况,WiFi图标上会出现一个感叹号标志,导致系统误以为你的网络不好,从而使网络不稳定。

网络受限

解决办法

方式一(推荐):修改url

  1. 前往 Android Studio 官网,下载 adb工具

    adb工具下载链接:【点击跳转

  2. 下载好后,打开目录,并在目录下,在资源搜索栏中输入 CMD 打开命令行(无需root权限)。

    1
    2
    adb shell settings delete global captive_portal_https_url
    adb shell settings delete global captive_portal_http_url
  3. 输入信息的服务器信息

    1
    2
    adb shell settings put global captive_portal_http_url http://captive.v2ex.co/generate_204
    adb shell settings put global captive_portal_https_url https://captive.v2ex.co/generate_204

    补充:也可以用“小米”或者“华为”的 url。

    1
    2
    小米:http://connect.rom.miui.com/generate_204
    华为:http://connectivitycheck.platform.hicloud.com/generate_204
  4. 切换为飞行模式,再切换回来。

方式二:修改AOSP源码

推荐使用 MT管理器软件

在AOSP源码中禁用「Captive Portal」机制

  1. 在AOSP目录下检索“NetworkMonitor.java”文件
    AOSP 11.0.0_r41中文件在以下目录:
    packages/moudules/NetworkStuack/src/com/android/server/connectivity/NetworkMonitor.java
    部分版本中文件在以下目录:
    frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java

  2. 修改其中的代码。
    找到:

    1
    mIsCaptivePortalCheckEnabled = getIsCaptivePortalCheckEnabled();

    修改为:

    1
    mIsCaptivePortalCheckEnabled = false;