解决 Android 手机在中国不能连上 NTP 服务和 Captive Portal URL 的问题

Pixel 手机(以及在海外销售的 Android 手机)默认的网络连通性检测 HTTPS URL 以及 NTP 服务器在中国不能使用。可以用 ADB 命令更改。Shizuku 的出现免除了 USB 调试的需要。

使用 Shizuku 执行 adb 命令所需要的步骤:

导出 rish 和 .dex 文件并作出更改后,在 Termux 执行命令 termux-setup-storage 后点击允许。cd 到下载文件夹 cd ~/storage/downloads 后可输入 sh rish 进入调试环境。之后输入的 adb 命令应该省去 adb shell

查看和更改 NTP 服务器

NTP 服务器用来自动确定日期和时间。在 Pixel 手机上,默认 NTP 服务器是 Google Public NTP(time.android.com)。当 NTP 服务器不能连接,长时间断电后重新开机将会导致日期不能自动更新,连带让很多网络服务不能使用。

查看当前的 NTP 服务器:

settings get global ntp_server

更改服务器的命令:

settings put global ntp_server pool.ntp.org

其中 pool.ntp.org 是一个能在中国访问的 NTP 服务器,目前在中国会解析到 time.cloudflare.com。改好后可运行上一段命令做验证。

触发同步:

进入手机的 设置 > 系统 > 日期和时间,关闭再打开一次 “自动设置日期和时间”。可以看到日期被自动设置了。

更改网络连通性(Captive Portal)验证 URL

Android 默认的 URL:

HTTPS URL(首选)https://www.google.com/generate_204

HTTP URL(备用)
http://connectivitycheck.gstatic.com/generate_204

其中 HTTP URL 的主要用途是在公共 WiFi 需要登录的情况下,如果访问 HTTPS URL 失败(比如证书错误)就会尝试 HTTP URL 并且被跳转到 WiFi 的登录页面。

中国的网络状况下 HTTP URL 可以联通(会解析到中国 IP 地址),在连接公共 WiFi 时可以自动跳转到登录页。但是 HTTPS URL 不能访问。结果是 WiFi 连接后会提示“无网络”。有时候这会导致一些已知 WiFi 不能自动连上。

更改连通性验证 URL 的思路是把 HTTPS URL 也更改为使用 gstatic.com 的那个连通性测试域名。可以输入以下命令,

settings put global captive_portal_https_url https://connectivitycheck.gstatic.com/generate_204

settings put global captive_portal_http_url http://connectivitycheck.gstatic.com/generate_204

之后就会发现连接中国的 WiFi 网络不会报错“无网络”了。


Discover more from Poison Ivy

Subscribe to get the latest posts sent to your email.

Leave a Reply