
- 首先需要在开发者模式(Developer options)中开启USB调试(USB debugging)。原生Android开启开发者模式的方法为在“关于手机”中快速点击“版本号”(Build number)7次即可。
- 另外需要安装好对应手机的驱动,一般在Windows 10下连接上手机即可自动安装好驱动,如果没有装好,请自行Google或等待博主不知道什么时候才会有的下一篇博文。→_→
- 准备好adb工具。没有的朋友可以在这里下载——Google Drive分享链接,下载好后解压出来,然后将命令提示符(cmd)定位到adb.exe所在文件夹即可。
- 然后将手机连接到电脑上
Android 8.0/7.1.x去除感叹号/叉号
为什么会有感叹号/叉号
从Android 5.0开始,Google为它添加了一个网络状况评测机制,这个机制的原理也非常简单粗暴——就是通过访问google.com域名下的一个地址,并通过访问情况来判断网络状况。然而由于众所周知的原因,google.com在大陆地区并不能很好的访问,所以Android就判断网络存在问题,因此就会一直显示着那个恼人的叹号/叉号,并且在该情况下,会增大电量的消耗。
准备工作
一个命令就搞定
准备工作看起来倒是挺多,但是实际操作只有一行命令而已。就是在cmd中执行如下命令:
adb shell settings put global captive_portal_https_url xxxxxxxx
虽然captive_portal_mode 命令也可以完全关闭android的检测功能,但是不推荐这么做。因为这个功能还有一个最棒的检测功能是直接按照204页面返回到wifi登录页面,适合需要登录的wifi使用。当然如果你仅仅在自家加密wifi上使用的话,我推荐直接屏蔽检测。因为服务器检测或多会少会有几率出错,因为就算是baidu之类站点也不是100%在线率。不过目前我的站点99%都是在线的除非是高防节点挂了,我的高防节点对于部分网络访问会差一点。因为没必要为204页面单独开一个服务器我也就不去关高防了没意义。
xxxxxxxx就是要更换的新的地址,下面列出一些可用的地址:
本站检测地址: http://tools.sxx1314.com/generate_204
https://tools.sxx1314.com/generate_204
- https://www.google.cn/generate_204 (注意是cn后缀)
- https://www.v2ex.com/generate_204
- https://www.noisyfox.cn/generate_204
- https://blog.imguan.com/generate_204
android app来自https://www.noisyfox.io 感谢狐狸的贡献
7.1.2
谷歌又玩我23333
自7.1.2(开始?),”captive_portal_detection_enabled”设置已被废弃,现在改为了”captive_portal_mode”选项,该选项可设置为以下3种值:
- 0:彻底禁用检测(Don’t attempt to detect captive portals.)
- 1:检测到需要登录则弹窗提醒(默认值)(When detecting a captive portal, display a notification that prompts the user to sign in.)
- 2:检测到需要登录则自动断开此热点并不再自动连接(When detecting a captive portal, immediately disconnect from the network and do not reconnect to that network in the future.)
叹号杀手已经更新以支持该版本。
但愿以后谷歌不要再乱改了233333
7.1.1
从7.1.1开始,检测用的服务器地址储存格式发生了变化,改为了:
private static String getCaptivePortalServerHttpsUrl(Context context) { return getSetting(context, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL, DEFAULT_HTTPS_URL);}
public static String getCaptivePortalServerHttpUrl(Context context) { return getSetting(context, Settings.Global.CAPTIVE_PORTAL_HTTP_URL, DEFAULT_HTTP_URL);}
以及
可以看到,系统不会自动加入”generate_204″的后缀了,这意味着url可以设计的更加灵活,同时也意味着在设置的时候需要填入完整的url:
adb shell "settings put global captive_portal_https_url https://www.noisyfox.cn/generate_204"
adb shell "settings put global captive_portal_use_https 0" adb shell "settings put global captive_portal_http_url http://www.noisyfox.cn/generate_204"
当然如果只有http的话,可以执行:
复原方法见下文。
7.0-7.1.0
需要服务器支持https。
或者使用命令
adb shell "settings put global captive_portal_use_https 0"
恢复可用禁用https即可。
adb shell "settings put global captive_portal_use_https 1"
adb shell "settings delete global captive_portal_use_https"
或者
5.0-6.0
升级了安卓5.0的同学们一定对网络图标上面的那个感叹号感到十分郁闷。安卓5.0引入了一种新的网络评估机制来评估网络状况,当你有网络请求时会自动选择网络连接条件最好的一个网络进行连接。该机制的代码实现如下:

简要来说就是,如果该网络是VPN,那么直接使用这个网络进行连接,否则调用 isCaptivePortal() 函数进行网络状况的判定,再根据判定结果决定是否选用此网络。 而罪魁祸首就是这个 isCaptivePortal() 函数,它会访问 clients3.google.com/generate_204 并根据返回结果来判断网络联通状况。正是这个google的网址被墙导致安卓没有办法评估网络,这样就导致了那个蛋碎的感叹号一直存在,以及wifi用着用着突然自动连回数据连接了。
本来我想直接把 isCaptivePortal() 函数给屏蔽掉,让他一直返回成功,但是看了下google的代码,发现这个函数是非常有用处的,为什么呢?这个函数有个非常重要的作用,那就是判断当前网络是否需要登录。
想必大家都连接过那些需要验证才能使用的wifi热点吧,当你们连接这些热点的时候,android会自动弹出提示询问你是否需要登录。而这个功能就是依靠了 isCaptivePortal() 这个函数才得以实现,具体原理如下:

安卓先访问 clients3.google.com/generate_204 这个网址,而这个网址如字面所说,会产生一个 http 204 返回值。204返回值的意思就是空内容。如果当前wifi是需要登录才可以连接,那么当试图访问google的服务器的时候,wifi的验证机制一定会自动跳转到一个登录页面,这个时候http请求的返回值就必然不是204了。就是通过这一机制,便可以区分当前wifi是否需要验证,不得不佩服想出这个办法的人来。
然而这就导致了如果简单的屏蔽掉这个函数的功能,那么就没有办法自动提示登录了,但是如果不屏蔽掉那么这个网址被墙掉了,因此会有一个难看的感叹号。想来想去我想到了一个曲线救国的办法,那就是我们把这个网址改成国内的网址不就可以了?我们自己搭一个服务器,来产生这个204返回值给它,问题不就迎刃而解了吗?
那么下面就给出解决方法(无需root):
1.完全屏蔽网络检查功能,最简单快速,但是就没有办法提示wifi登录:
adb shell "settings put global captive_portal_detection_enabled 0"
adb shell "settings put global captive_portal_server noisyfox.cn"
2.用国内的服务器替换掉google的服务器:
这个服务器是我自己建的,也就是本站:http://noisyfox.cn/ 我在服务器上写了个简单的204页面,网址是 http://noisyfox.cn/generate_204 只要用这个网址替换掉google的网址,就可以正常访问并检测网络状态了。不过由于本人的服务器速度并不快,所以感叹号还是会显示一小会儿的,不过应该很快就会消失。
3.恢复默认值
对于第一条指令,恢复默认只需要执行:
adb shell "settings put global captive_portal_detection_enabled 1"
adb shell "settings delete global captive_portal_detection_enabled"
或者
第二条指令的恢复直接delete即可:
adb shell "settings delete global captive_portal_server"
如果你对本站提供的服务速度不满意,可以在文末找到网友提供的其它服务地址。
是不是看着很舒服呢?烦人的感叹号没有了~
经过靠谱的确认,该修改方式具有持久性,重启依旧有效,除非刷机或者清除数据。
如何建立自己的服务器
1. 对于apache服务器,如果你的服务器安装了rewrite模块,那么只需要在网站的.htaccess中加入以下代码:
RewriteEngine On
RewriteCond %{REQUEST_URI} /generate_204$
RewriteRule $ / [R=204]
2. 对于nginx,直接加入以下设置即可:
location /generate_204 { return 204; }
3. 如果以上方法都无效,那么就要利用代码中的一个小trick来完成,直接在网站的根目录下建立一个叫做“generate_204”的空文件即可,因为安卓的源码中写了如果返回的内容为空那么也会当成204(毕竟一个空的页面怎么想都不可能是登录页面嘛!)。
一键设置工具(需要root)
锵锵锵!由于有些人不太熟悉adb之类的操作,因此就做了一个小工具方便大家直接在手机上设置!

- 下载密码
-
以下是评论可见内容(未评论)此处内容已隐藏,评论刷新一下可见!


相关文章本文地址:https://blog.sxx1314.com/sdk-android/540.html
版权声明:若无注明,本文皆为“unix 软硬件 技术宅 ”原创,转载请保留文章出处。百度已收录








Nokia
Google Chrome 66.0.3359.158
Android 8.0.0









