当前位置: 首页 > news >正文

Android16 Wifi打开到自动连接的主要日志过程分析介绍

Android16 Wifi打开到自动连接的主要日志过程分析介绍

文章目录

  • Android16 Wifi打开到自动连接的主要日志过程分析介绍
    • 一、前言
    • 二、主要过程的日志分析
      • 1、Wifi打开日志
      • 2、WiFi扫描
      • 3、WiFi选择+连接
      • 4、ip分配
      • 5、连接完成
      • 6、完整的主要信息
    • 三、其他
      • 1、小结
      • 2、wifi详细日志查看
      • 3、Android wifi开发调试总结
      • 4、 [Android 使用adb操作*WiFi*连接扫描等相关指令](https://blog.csdn.net/wenzhi20102321/article/details/140043930?ops_request_misc=%7B%22request%5Fid%22%3A%22b9bcdcd12b0e28b94f8dbb6db341b9c8%22%2C%22scm%22%3A%2220140713.130102334.pc%5Fblog.%22%7D&request_id=b9bcdcd12b0e28b94f8dbb6db341b9c8&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-3-140043930-null-null.nonecase&utm_term=wifi)

一、前言

本文简单介绍一下Android16 Wifi打开到自动连接Wifi的过程。

有啥用?

可以看看哪个过程出现问题吧,比如是否调用了Wifi开启;

查看哪个过程不完整,方便进一步定义问题原因。

主要过程有:WiFi打开,WiFi扫描,WiFi选择,WiFi连接,ip分配,连接完成。

有兴趣的可以收藏看看。

本文主要是基于Android16的日志进行查看。

二、主要过程的日志分析

1、Wifi打开日志

Wifi打开日志的关键字是:WifiService

主要标志是WifiService 的 setWifiEnabled ,里面包含哪个应用进行的操作。

下面数主要日志:

//Wifi打开的关键日志:
10-11 09:45:19.834   972  1588 I WifiService: setWifiEnabled package=com.skg.settings uid=1000 enable=true isPrivileged=true//Wifi打开完成的关键日志: //2表示正常打开,3表示打开完成
10-11 09:45:19.976   972  1588 I WifiService: getWifiEnabledState uid=1000 state=2
10-11 09:45:20.210   972  1587 I WifiService: getWifiEnabledState uid=10084 state=3//Wifi扫描日志:
10-11 09:45:20.213   972  1587 I WifiService: startScan uid=1000
10-11 09:45:20.252   972  1300 I WifiService: Receive onDriverCountryCodeChanged to US, update available channel list//Wifi获取到扫描列表日志:
10-11 09:45:24.460   972  1585 I WifiService: getScanResults uid=1000
10-11 09:45:24.461   972  1587 I WifiService: getScanResults uid=10084//获取到保存和连接的Wifi日志:
10-11 09:45:24.507   972  1588 I WifiService: getConfiguredNetworks uid=1000
10-11 09:45:24.521   972  1587 I WifiService: getConnectionInfo uid=10084

即使打开WiFi,未连接过WiFi的情况下,系统后台也是会不定时进行扫描WiFi,可以看到日志:getScanResults

2、WiFi扫描

主要搜索关键字是:WifiScan

主要标志是WifiScanningService的 开始监听Registering和结束监听Unregistering,里面包含哪个应用进行的监听。

//系统监听扫描回调
10-11 09:45:20.238   972  1310 I WifiScanningService: Registering listener= com.android.server.wifi.scanner.WifiScannerInternal$ScanListener@e00758 uid=1000 packageName=null workSource=WorkSource{1000}//开始扫描(系统调用)
10-11 09:45:20.238   972  1310 I WifiScanningService: start scan: ClientInfo[uid=1000, package=null, attributionTag=null, com.android.server.wifi.scanner.WifiScannerInternal$ScanListener@e00758] package null AttributionTag null//开始扫描(系统调用添加监听列表)
10-11 09:45:20.239   972  1310 I WifiScanningService: addSingleScanRequest: ClientInfo[uid=1000, package=null,...//开始扫描(com.skg.settings调用)
10-11 09:45:20.371   972  1310 I WifiScanningService: start scan: ClientInfo[uid=1000, package=com.skg.settings, attributionTag=null, com.android.server.wifi.scanner.WifiScannerInternal$ScanListener@c5f917] package com.skg.settings AttributionTag null
10-11 09:45:20.371   972  1310 I WifiScanningService: addSingleScanRequest: ClientInfo[uid=1000, package=com.skg.settings, ... //结束一次扫描(系统,已获取列表)
10-11 09:45:24.451   972  1310 I WifiScanningService: Unregistering listener= com.android.server.wifi.scanner.WifiScannerInternal$ScanListener@e00758 uid=1000 packageName=null workSource=WorkSource{1000}//结束一次扫描(com.skg.settings已获取列表)
10-11 09:45:24.451   972  1310 I WifiScanningService: Unregistering listener= com.android.server.wifi.scanner.WifiScannerInternal$ScanListener@c5f917 uid=1000 packageName=com.skg.settings workSource=WorkSource{1000}

packageName为null/android的情况,一般是系统framework的扫描监听。

WiFi列表如果要获取到,必须自己的进程监听才能获取;

所以应用扫描并获取WiFi列表的时候,系统framework也会先执行这个操作。

3、WiFi选择+连接

主要搜索关键字是:WifiNetworkSelector、WifiScoreCard、WifiConnectivityManager

可以同时监听上面三个关键字的日志:logcat | grep -E “WifiNetworkSelector|WifiScoreCard|WifiConnectivityManager”

不会很多,但是也不少,从打开到自动连接的过程,大概有上百行日志吧。

下面展示部分关键日志:

//筛选
10-11 09:45:24.479   972  1300 V WifiConnectivityManager: AllSingleScanListener onResults: start network selection
10-11 09:45:24.486   972  1300 D WifiNetworkSelector:   "xm5G":4 reason=NETWORK_SELECTION_DISABLED_NO_INTERNET_PERMANENT, count=3; //Wifi评分日志
10-11 09:45:24.498   972  1300 D ThroughputScorer: Score for candidate: SSID: "VPN" BSSID: f8:6f:b0:71:28:5f rssiScore: 48 throughputScore: 108 currentNetworkBoost: 0 securityAward: 40 unmeteredAward: 1000 savedNetworkAward: 500 trustedAward: 1000 notOemPaidAward: 500 notOemPrivateAward: 500 frequencyScore: 0 final score: 3696//正式选择+连接VPN的日志:
10-11 09:45:24.498   972  1300 V WifiConnectivityManager: AllSingleScanListener:  WNS candidate-"VPN"
10-11 09:45:24.498   972  1300 V WifiConnectivityManager: connectToNetwork(ConcreteClientModeManager{id=2684546 iface=wlan0 role=ROLE_CLIENT_PRIMARY}): Connect to "VPN" : f8:6f:b0:71:28:5f from Disconnected//wifi在不同状态的更新信息,主要保存上一次连接的wifi,下次打开wifi优先连接。
10-11 09:45:24.499   972  1300 D WifiScoreCard: network update CONNECTION_ATTEMPT "VPN" ID: 340087326 RSSI -43 txSpeed -1
10-11 09:45:24.855   972  1300 D WifiScoreCard: network update SIGNAL_POLL "VPN" ID: 340087326 RSSI -42 txSpeed -1
10-11 09:45:25.110   972  1300 D WifiScoreCard: network update IP_CONFIGURATION_SUCCESS "VPN" ID: 340087326 RSSI -42 txSpeed 270

4、ip分配

主要搜索关键字是:DHCP、DNS

//ip请求开始
10-11 09:45:24.901  1499  3454 D DhcpClient: Broadcasting DHCPREQUEST ciaddr=0.0.0.0 request=192.141.1.43 serverid=null
10-11 09:45:25.070  1499  3454 D DhcpClient: Received packet: d4:9c:dd:f4:f4:b0 ACK: your new IP /192.141.1.43, netmask /255.255.252.0, gateways [/192.141.1.1] DNS servers: /192.141.1.1 , lease time 7200, domain null10-11 09:45:25.075   972  1300 D WifiClientModeImpl[2684882:wlan0]: handleIPv4Success <DhcpResultsParcelable{baseConfiguration: IP address 192.141.1.43/22 Gateway 192.141.1.1  DNS servers: [ 192.141.1.1 ] Domains , leaseDuration: 7200, mtu: 0, serverAddress: 192.141.1.1, vendorInfo: null, serverHostName: , captivePortalApiUrl: null}>//获取到ip
10-11 09:45:25.075   972  1300 D WifiClientModeImpl[2684882:wlan0]: link address 192.141.1.43/22//分配系统网络id
10-11 09:45:25.101   972  1313 D DnsManager: sendDnsConfigurationForNetwork(ResolverParamsParcel{netId: 105,//wifi是否静态ip:DHCP 是普通ip
10-11 09:45:25.102   972  1300 V WifiNetworkSuggestionsManager:  mIsSendDhcpHostnameEnabled: true
10-11 09:45:25.102   972  1300 V WifiNetworkSuggestionsManager: IP assignment: DHCP

5、连接完成

主要搜索关键字是:WifiConnectivityManager、ConnectivityService

10-11 09:45:25.103   972  1300 V WifiConnectivityManager: handleConnectionStateChanged: state=connected10-11 09:45:25.112   972  1313 D ConnectivityService: [105 WIFI] EVENT_NETWORK_INFO_CHANGED, going from CONNECTING to CONNECTED
10-11 09:45:25.113   972  1313 W DnsManager: updatePrivateDns(105, PrivateDnsConfig{opportunistic:/[], dohName=, dohIps=[], dohPath=, dohPort=-1})
10-11 09:45:25.113   972  1313 D ConnectivityService: Setting DNS servers for network 105 to [/192.141.1.1]

6、完整的主要信息

//打开wifi
10-11 09:45:19.834   972  1588 I WifiService: setWifiEnabled package=com.skg.settings uid=1000 enable=true isPrivileged=true//Wifi打开完成:
10-11 09:45:20.210   972  1587 I WifiService: getWifiEnabledState uid=10084 state=3//扫描wifi
10-11 09:45:20.371   972  1310 I WifiScanningService: start scan: ClientInfo[uid=1000, package=com.skg.settings, ...//选择+连接wifi
10-11 09:45:24.498   972  1300 D ThroughputScorer: Score for candidate: SSID: "VPN" BSSID: f8:6f:b0:71:28:5f rssiScore: 48 throughputScore: 108 currentNetworkBoost: 0 
10-11 09:45:24.498   972  1300 V WifiConnectivityManager: connectToNetwork(ConcreteClientModeManager{id=2684546 iface=wlan0 role=ROLE_CLIENT_PRIMARY}): Connect to "VPN" : f8:6f:b0:71:28:5f from Disconnected//wifi的ip获取分配
10-11 09:45:24.901  1499  3454 D DhcpClient: Broadcasting DHCPREQUEST ciaddr=0.0.0.0 request=192.141.1.43 serverid=null
10-11 09:45:25.070  1499  3454 D DhcpClient: Received packet: d4:9c:dd:f4:f4:b0 ACK: your new IP /192.141.1.43, netmask /255.255.252.0, gateways [/192.141.1.1] DNS servers: /192.141.1.1 , lease time 7200, domain null//获取到ip
10-11 09:45:25.075   972  1300 D WifiClientModeImpl[2684882:wlan0]: link address 192.141.1.43/22//连接完成
10-11 09:45:25.103   972  1300 V WifiConnectivityManager: handleConnectionStateChanged: state=connected
10-11 09:45:25.112   972  1313 D ConnectivityService: [105 WIFI] EVENT_NETWORK_INFO_CHANGED, going from CONNECTING to CONNECTED

可以看到上面的关键字主要包括:wifi、DHCP、DNS、wifi名称、wlan0

整个过程设置到的主要相关类:

//wifi开启
// 1. 用户触发开启 WiFi(如点击开关)
WifiService、WifiController//wifi扫描
WifiService、WifiScanRequestProxy、WifiHAL
// 2. 扫描完成,获取结果
WifiScanner、WifiScanResults//wifi选择+准备连接
ThroughputScorer、WifiConnectivityManager、WifiConfigManager// 2. 准备连接(加载配置,如密码)
WifiConnectivityManager、WifiConfigManager:、WifiStateMachine// 1. 开始连接,状态从 Disconnected 切换到 Connecting
WifiStateMachine、WifiNative// 2. 认证阶段(验证密码)、4次握手
SupplicantStateTracker、wpa_supplicant、SupplicantStateTracker、WifiStateMachine// 启动 DHCP 客户端、分配ip
DhcpClient//网络状态变为可用
WifiStateMachine、ConnectivityService//  通知连接成功
WifiService、ConnectivityManager

上面只是部分相关的,肯定还有很多其他的,具体的可以从日志中查看。

三、其他

1、小结

wifi日志主要的关键字主要包括:wifi、DHCP、DNS、wifi名称、wlan0

WifiService:包含wifi开关日志;
WifiScanningService:包含wifi扫描日志;
WifiConnectivityManager:包含wifi连接日志;
DhcpClient:包含ip分配日志。

上面只是包含主要上层日志,如果需要更加详细的过程日志可以打开“启动WLAN详细日志记录功能“;

2、wifi详细日志查看

Android 如果遇到wifi问题,比如无法联网,连接wifi失败,热点异常等问题;

如果查看wifi相关日志未发现具体异常,可以通过更加详细的wifi日志,

查看wifi具体过程,可以使用“启动WLAN详细日志记录功能:

https://blog.csdn.net/wenzhi20102321/article/details/151860143

3、Android wifi开发调试总结

如果开发wifi相关功能,必须先掌握基本api知识和相关广播的监听;

wifi调用的功能基本都是系统签名权限的系统应用,比如Settings;

本简单介绍wifi开发基本知识,有兴趣的可以看看:

https://blog.csdn.net/wenzhi20102321/article/details/147595608

4、 Android 使用adb操作WiFi连接扫描等相关指令

这里记录下平时使用的cmd wifi 相关指令。

系统初期开发或者定位一下wifi、热点问题会比较有用。

本文不仅详细介绍cmd wifi相关用法,并且后续有介绍系统Java代码中具体控制位置,

如果有特殊需求可以对命令进行扩展定制。

https://blog.csdn.net/wenzhi20102321/article/details/140043930

http://www.dtcms.com/a/523557.html

相关文章:

  • 背包dp——动态规划
  • 找做柜子的网站中国芯片制造最新消息
  • 甘肃省临夏州建设局网站wordpress 未分类
  • 用 Excalidraw+cpolar 做会议协作,像素级还原实体白板体验
  • 使用C++开发Android .so库的优势与实践指南
  • Spring AOP:注解配置与XML配置双实战
  • 基于YOLO11深度学习的半导体晶圆外观缺陷检测系统【Python源码+Pyqt5界面+数据集+安装使用教程+训练代码】【附下载链接】
  • 笔记本电脑待机、睡眠与休眠模式的技术差异解析
  • 2025丨时间很快,又来到1024
  • 基于python人脸识别系统 人脸检测 实时检测 深度学习 Dlib库 ResNet深度卷积神经网络 pyqt设计 大数据(源码)✅
  • 【C + +】unordered_set 和 unordered_map 的用法、区别、性能全解析
  • 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-31- 操作日历时间控件-上篇(详细教程)
  • 电子商城网站建设与维护怎么建设淘客自己的网站_
  • 基于 Vue3 + WebSocket 实现的平板控制端与大屏展示端联动方案
  • 提高自己的网站网站 利润
  • 外贸seo软文发布平台上海百度推广优化排名
  • Qt 图像与定时器实战:实现动态图片轮播效果
  • C++ 模板初阶:从函数重载到泛型编程的优雅过渡
  • 第 01 天:Linux 是什么?内核、发行版及其生态系统
  • Docker 安装 MongoDB 完整指南:从入门到实战
  • Docker 离线安装
  • CUDA和cuDNN安装
  • 一篇初识什么是容器,引出 Docker
  • HTML 理论笔记
  • 《Linux系统编程之入门基础》【权限管理】
  • ELK(Elasticsearch + Logstash + Kibana + Filebeat)采集方案
  • 网站建设金手指排名霸屏主机类型wordpress
  • uniapp微信小程序简单表格展示
  • 【html】每日打卡页面
  • Server 15 ,VMware ESXi 实战指南:Ubuntu 20.04.6 版本虚拟机静态 IP 配置、分辨率固定及远程访问实践