Android13分享热点设置安全性为wpa3
Android13分享热点设置安全性为wpa3
文章目录
- Android13分享热点设置安全性为wpa3
- 一、前言
- 热点WPA3加密类型是需要底层硬件支持的。
- Wifi WPA3 和 热点 WPA3 是不一样的
- 分享初衷
- 二、代码分析
- 1、应用代码中热点设置WPA3 加密格式
- 报错部分日志信息:
- 2、系统代码分析
- (1)热点重要工具类 ApConfigUtil.java
- (2)Wifi、热点服务实现具体逻辑类 WifiServiceImpl.java
- (3)继续热点重要工具类 ApConfigUtil.java
- (4)修改wifi相关res属性
- (5)WPA3 热点开启成功,但是其他设备无法连接日志
- (6)WPA1 热点开启成功,但是其他设备正常连接日志
- 三、Android加密类型介绍
- 1、Android11 网络加密类型
- 2、Android11 Wifi 加密类型代码中的定义
- 3、Android13 Wifi 加密类型代码中的定义
- 4、Android11 热点加密类型定义
- 5、Android13 热点加密类型定义
- 四、总结
- 1、热点开启流程
- 2、WPA3 热点加密类型系统上层适配
一、前言
Android 网络加密类型WPA3,比WPA和WPA2 安全性强一下;
有些客户强制要求支持WPA3,那么就需要系统进行一些适配了。
Android手机上热点分享显示的安全性部分手机可以选择WPA3,
比如红米12(Android12),一加Ace2(Android13);
但是其他很多手机都没有选择加密类型,比如Nova6(Android12)、红米(Android10),谷歌Piex4(Android13)。
从这里大致可以猜到:
热点WPA3加密类型是需要底层硬件支持的。
如果只是系统上层简单适配一下就行,估计大部分手机都是会支持WPA3热点的了。
并且热点WPA3 估计是Android11之后的系统才存在的加密类型,
查看了Android9的代码不存在相关属性的判断。
从Android11-13 系统Framework代码看,上层也是有相关属性需要适配,
但是发现上层适配后,可以打开WPA3加密类型的热点,
但是其他安卓设备无法连接这个WPA3加密类型的网络!
从日志看不出具体原因?底层/硬件需要如何适配也还不清楚。
Wifi WPA3 和 热点 WPA3 是不一样的
之前也有Wifi WPA3 加密类型相关分析:
https://blog.csdn.net/wenzhi20102321/article/details/126219495
这里大概介绍一下区别:
Wifi WPA3 : 指的是Android设备 支持连接WPA3 类型的Wifi 网络,这个只需要适配连接Wifi 的应用代码即可;这个功能在Android11 之后,系统原生Framework和原生Settings默认都是支持的。
热点 WPA3 :指的是热点开启的加密类型是WPA3,其他手机搜到这个热点,限制的加密类型是WPA3类型。这个适配要系统适配,有点麻烦。
分享初衷
在普通网址和CSDN上搜索了一下,暂时没有搜索到热点WPA3相关的分析,不管是上层的还是底层的相关适配都是空白的。
但是这些种种,不妨碍我分享一下关于热点WPA3上层开发的知识。
本文虽然不能完全分析到wpa3热点分享实现,但是对上层的开发和研究是有一定的价值的。
二、代码分析
1、应用代码中热点设置WPA3 加密格式
//构造热点信息对象
SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder();//热点名称configBuilder.setSsid(mHotspotName);//根据情况配置密码//加密情况才需要设置密码,如果热点不用密码不需要设置就行if (mSecurityType != 0) { //密码类型1:WPA,2:WPA3(过度),3:WPA3configBuilder.setPassphrase(mPassword, mSecurityType);}//设置信道和wifi类型,信道值可以根据情况设置if (mChanel != 0) {configBuilder.setChannel(mChanel, mBand);} else {configBuilder.setBand(mBand);}SoftApConfiguration softApConfiguration = configBuilder.build();//设置热点信息
mWifiManager.setSoftApConfiguration(softApConfiguration);//启动热点mConnectivityManager.startTethering(ConnectivityManager.TETHERING_WIFI, true,mOnStartTetheringCallback, new Handler(Looper.getMainLooper()));
通过demo 测试,发现 setPassphrase 设置热点密码类型 mSecurityType 设置 2和3都是无法打开热点的!
报错部分日志信息:
logcat -c;logcat | grep -i -E "SoftApManager|ApConfigUtil" //设置无密码加密格式,正常打开热点,日志
11-08 17:42:25.559 813 1073 D SoftApManager[ap0]: startSoftAp: band 2 iface ap0 country US
11-08 17:42:25.566 813 1073 E ApConfigUtil: Can not start softAp with band 6Ghz not supported. //这个不影响热点开启
11-08 17:42:25.578 813 1073 D SoftApManager[ap0]: Soft AP is started
11-08 17:42:25.578 813 1073 D SoftApManager[ap0]: SoftAp is ready for use//设置wap3加密格式,加密类型为3,无法正常打开热点,日志:
11-08 17:42:46.527 813 1073 D SoftApManager[ap0]: currentstate: StartedState
11-08 17:42:46.623 813 1073 D SoftApManager[ap0]: Soft AP is stopped
11-08 17:42:46.623 813 1073 D SoftApManager[ap0]: Timeout message canceled on ap0
11-08 17:42:46.624 813 1073 D SoftApManager[unknown]: SoftApInfo update null, isRemoved: false
11-08 17:42:49.673 813 1073 D SoftApManager[ap0]: startSoftAp: band 2 iface ap0 country US
11-08 17:42:49.685 813 1073 D ApConfigUtil: Error, SAE requires HAL support //热点打开失败关键,需要追一下 SoftApManager 和 ApConfigUtil 里面的代码
11-08 17:42:49.686 813 1073 D SoftApManager[ap0]: Unsupported Configuration detect! config = ssid = "AndroidAP_7983"
11-08 17:42:49.686 813 1073 D SoftApManager[ap0]: Passphrase = <non-empty>
11-08 17:42:49.686 813 1073 D SoftApManager[ap0]: HiddenSsid = false
11-08 17:42:49.686 813 1073 D SoftApManager[ap0]: Channels = {2=36}
11-08 17:42:49.686 813 1073 D SoftApManager[ap0]: SecurityType = 3 11-08 17:42:49.743 813 1073 D SoftApManager[ap0]: Soft AP is stopped
11-08 17:42:49.743 813 1073 E WifiActiveModeWarden: SoftApManager start failed!SoftApManager{id=6497707 iface=ap0 role=ROLE_SOFTAP_TETHERED}
设置加密类型2和3都是上面的报错!
重点报错信息:SAE requires HAL support,这也是导致WPA3 热点无法正常开启的原因!
了解过 wifi 加密类型都会知道 SAE 类型 就是 WPA3 网络加密类型。
2、系统代码分析
(1)热点重要工具类 ApConfigUtil.java
packages\modules\Wifi\service\java\com\android\server\wifi\util\ApConfigUtil.java
public static boolean checkSupportAllConfiguration(SoftApConfiguration config,SoftApCapability capability) {if (!capability.areFeaturesSupported(SoftApCapability.SOFTAP_FEATURE_WPA3_SAE)&& (config.getSecurityType()== SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION|| config.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_WPA3_SAE)) {Log.d(TAG, "Error, SAE requires HAL support"); //设置热点无法打开的关键!return false;}
。。。return true;
}
SECURITY_TYPE_WPA3_SAE_TRANSITION = 2;
SECURITY_TYPE_WPA3_SAE = 3;
config.getSecurityType() == 2 或者 3 ,并且 capability.areFeaturesSupported(SoftApCapability.SOFTAP_FEATURE_WPA3_SAE) 为false,就会触发这个条件。
所以重点是 capability 对象的分析,这个分析其实是有点复杂的,但是通过全局搜索+日志打印还是可以分析到的。
其实是 WifiServiceImpl.java 开启热点前会更新一下 相关数据。
关于系统代码怎么调用到 ApConfigUtil.checkSupportAllConfiguration,其实是热点开启的流程(最后总结有),SoftApManager.startSoftAp() 多个数据校验的时候调用的。
(2)Wifi、热点服务实现具体逻辑类 WifiServiceImpl.java
packages\modules\Wifi\service\java\com\android\server\wifi\WifiServiceImpl.java
public SoftApCapability getSoftApCapability() {synchronized (mLock) {if (mSoftApCapability == null) {mSoftApCapability = ApConfigUtil.updateCapabilityFromResource(mContext);// Default country codemSoftApCapability = updateSoftApCapabilityWithAvailableChannelList(mSoftApCapability, mCountryCode.getCountryCode());}return mSoftApCapability;}}
有N多个地方调用了 getSoftApCapability() 方法,详细流程可以自己摸索一下。
可以看到 SoftApCapability 对象有进行复制和修改
//主要分析这个:
mSoftApCapability = ApConfigUtil.updateCapabilityFromResource(mContext);
//这个往后的流程还有N多个,这里不展开分析
mSoftApCapability = updateSoftApCapabilityWithAvailableChannelList(mSoftApCapability, mCountryCode.getCountryCode());
(3)继续热点重要工具类 ApConfigUtil.java
下面追踪一下 ApConfigUtil.java 的代码
packages\modules\Wifi\service\java\com\android\server\wifi\util\ApConfigUtil.java
public static SoftApCapability updateCapabilityFromResource(@NonNull Context context) {long features = 0;if (isAcsSupported(context)) {Log.d(TAG, "Update Softap capability, add acs feature support");features |= SoftApCapability.SOFTAP_FEATURE_ACS_OFFLOAD;}if (isWpa3SaeSupported(context)) {Log.d(TAG, "Update Softap capability, add SAE feature support");features |= SoftApCapability.SOFTAP_FEATURE_WPA3_SAE;}
...return capability;}//看这里,终于看到了点有用的信息!一个res属性的判断!public static boolean isWpa3SaeSupported(@NonNull Context context) {return context.getResources().getBoolean(R.bool.config_wifi_softap_sae_supported);}
ApConfigUtil 这个热点工具类,是有封装了很多方法的,很多地方有调用到。
通过上面一顿分析,发现只要把 config_wifi_softap_sae_supported 设置成 true ,就可以在上层设置支持WPA3 热点功能。
(4)修改wifi相关res属性
packages\modules\Wifi\service\ServiceWifiResources\res\values\config.xml
修改属性内容:
<!-- Wifi driver supports WPA3 Simultaneous Authentication of Equals (WPA3-SAE) for softap --><bool translatable="false" name="config_wifi_softap_sae_supported">true</bool> //默认false
里面还有很多热点相关的属性,不清楚是否需要修改!但是这个属性是一定要修改的。
(5)WPA3 热点开启成功,但是其他设备无法连接日志
通过res属性修改后,wpa3热点开启成功,但是其他手机无法连接,自身设备(分享WPA3热点的设备)报错:
这里是过滤 ap0 节点关键字的日志信息。
11-09 08:57:11.415 806 1471 I EthernetTracker: interfaceLinkStateChanged, iface: ap0, up: true
11-09 08:57:11.419 806 1047 E EthernetNetworkFactoryExt: interfaceLinkStateChanged: iface = ap0, up = true
11-09 08:57:11.428 611 611 I wificond: New station fa:fb:73:72:8c:a5 connected to hotspot using interface ap0
11-09 08:57:11.428 611 611 I wificond: Sending notifications for station add event
11-09 08:57:11.482 611 611 I wificond: Station fa:fb:73:72:8c:a5 disassociated from hotspot
11-09 08:57:11.483 6379 6379 I hostapd : ap0: STA fa:fb:73:72:8c:a5 IEEE 802.11: disassociated
11-09 08:57:17.880 806 1471 I EthernetTracker: interfaceLinkStateChanged, iface: ap0, up: true
11-09 08:57:17.880 806 1047 E EthernetNetworkFactoryExt: interfaceLinkStateChanged: iface = ap0, up = true
11-09 08:57:17.978 611 611 I wificond: New station 18:87:40:31:22:e6 connected to hotspot using interface ap0
11-09 08:57:17.978 6379 6379 I hostapd : ap0: STA 18:87:40:31:22:e6 IEEE 802.11: associated
11-09 08:57:17.978 611 611 I wificond: Sending notifications for station add event
11-09 08:57:17.978 6379 6379 I hostapd : ap0: STA 18:87:40:31:22:e6 IEEE 802.11: associated
11-09 08:57:18.003 611 611 I wificond: Station 18:87:40:31:22:e6 disassociated from hotspot
01-01 08:08:26.998 0 0 I [4 T758 ..] [wlan][758]saaFsmRunEventRxDeauth: (SAA EVENT) ucRoleIdx 1, name ap0, ifindex 18, dev_addr0a:cf:89:a6:44:28
11-09 08:57:18.003 6379 6379 I hostapd : ap0: STA 18:87:40:31:22:e6 IEEE 802.11: disassociated
11-09 08:57:19.256 806 1478 I EthernetTracker: interfaceLinkStateChanged, iface: ap0, up: true
11-09 08:57:19.257 806 1047 E EthernetNetworkFactoryExt: interfaceLinkStateChanged: iface = ap0, up = true
11-09 08:57:19.270 6379 6379 I hostapd : ap0: STA 18:87:40:31:22:e6 IEEE 802.11: associated
11-09 08:57:19.271 611 611 I wificond: New station 18:87:40:31:22:e6 connected to hotspot using interface ap0
11-09 08:57:19.271 611 611 I wificond: Sending notifications for station add event
11-09 08:57:19.271 6379 6379 I hostapd : ap0: STA 18:87:40:31:22:e6 IEEE 802.11: associated
11-09 08:57:19.292 611 611 I wificond: Station 18:87:40:31:22:e6 disassociated from hotspot
01-01 08:08:28.287 0 0 I [4 T758 ..] [wlan][758]saaFsmRunEventRxDeauth: (SAA EVENT) ucRoleIdx 1, name ap0, ifindex 18, dev_addr0a:cf:89:a6:44:28
11-09 08:57:19.292 6379 6379 I hostapd : ap0: STA 18:87:40:31:22:e6 IEEE 802.11: disassociated
从上面日志未看出日志明显异常信息。
连接动作:“connected to hotspot using interface ap0”,这个日志倒是看到有多次,但是之后就没有明显的动作日志了。
那么对比开启wap热点,其他手机正常连接的日志看看吧。
(6)WPA1 热点开启成功,但是其他设备正常连接日志
正常连接的日志:
11-09 09:19:06.109 17222 17222 D wpa_supplicant: RTM_NEWLINK: ifi_index=18 ifname=ap0 wext ifi_family=0 ifi_flags=0x11043 ([UP][RUNNING][LOWER_UP])
11-09 09:19:06.112 806 1478 I EthernetTracker: interfaceLinkStateChanged, iface: ap0, up: true
11-09 09:19:06.112 806 1047 E EthernetNetworkFactoryExt: interfaceLinkStateChanged: iface = ap0, up = true
11-09 09:19:06.122 611 611 I wificond: New station fa:fb:73:72:8c:a5 connected to hotspot using interface ap0
11-09 09:19:06.122 611 611 I wificond: Sending notifications for station add event
11-09 09:19:06.122 18018 18018 I hostapd : ap0: STA fa:fb:73:72:8c:a5 IEEE 802.11: associated
11-09 09:19:06.250 18018 18018 I hostapd : ap0: AP-STA-CONNECTED fa:fb:73:72:8c:a5
11-09 09:19:06.250 18018 18018 I hostapd : ap0: STA fa:fb:73:72:8c:a5 WPA: pairwise key handshake completed (RSN)
11-09 09:19:06.251 18018 18018 I hostapd : ap0: EAPOL-4WAY-HS-COMPLETED fa:fb:73:72:8c:a5
11-09 09:19:06.252 806 1608 D HostapdHalAidlImp: onConnectedClientsChanged on ap0 / ap0 and Mac is fa:fb:73:72:8c:a5 isConnected: true
11-09 09:19:06.254 806 1037 D SoftApManager[ap0]: CMD_ASSOCIATED_STATIONS_CHANGED, Client: fa:fb:73:72:8c:a5 isConnected: true
11-09 09:19:06.255 806 1037 D SoftApManager[ap0]: The connected wifi stations have changed with count: 1: [WifiClient{mMacAddress=fa:fb:73:72:8c:a5mApInstanceIdentifier=ap0}] on the AP which info is SoftApInfo{bandwidth= 2, frequency= 2437,bssid=0a:cf:89:a6:44:28, wifiStandard= 4, mApInstanceIdentifier= ap0, mIdleShutdownTimeoutMillis= 600000}
11-09 09:19:06.256 806 1037 D SoftApManager[ap0]: rescheduleTimeoutMessageIfNeeded ap0, timeoutEnabled=true, isChargingfalse, clientNumber=1
11-09 09:19:06.256 806 1037 D SoftApManager[ap0]: Timeout message canceled on ap0
11-09 09:19:06.257 1226 1269 V WifiManager: SoftApCallbackProxy on mode 1, send onConnectedClientsChanged, changedInfo is SoftApInfo{bandwidth= 2, frequency= 2437,bssid=0a:cf:89:a6:44:28, wifiStandard= 4, mApInstanceIdentifier= ap0, mIdleShutdownTimeoutMillis= 600000} and clients are [WifiClient{mMacAddress=fa:fb:73:72:8c:a5mApInstanceIdentifier=ap0}]
11-09 09:19:06.258 1226 1269 V WifiManager: SoftApCallbackProxy on mode 1, send onConnectedClientsChanged(clients): [WifiClient{mMacAddress=fa:fb:73:72:8c:a5mApInstanceIdentifier=ap0}]
这个日志同样有 “connected to hotspot using interface ap0”,
随后有 hostapd、HostapdHalAidlImp、SoftApManager 相关日志,
从"isConnected: true",明显可以看到有其他设备连接上了分享的热点。
hostapd 是网络身份校验的逻辑代码, wpa_supplicant 模块处理。
HostapdHalAidlImp 上层是调用底层接口的实现,Android11 没有这个类,但是有类似的HostapdHal。
SoftApManager 是上层校验信息逻辑实现
wpa_supplicant 模块的代码,全部都是C/C++ 的代码,路径:
//原生路径
release\external\wpa_supplicant_8\
//部分芯片厂商路径,比如AMl的
release\vendor\amlogic\common\wifi_bt\wifi\wpa_supplicant_8\
这部分代码基本没有进行分析过,修改的也只修改过已有对策的代码。
到这里已经分析不下去了,网络身份校验的部分逻辑,有需求的自行分析。
同时发现,即使设置WPA3 热点开启成功,其他Android设备还是未显示WPA3类型的网络,
有的手机显示显示WPA,有的显示WPA2,具体原因不清楚是哪里的问题!!!
三、Android加密类型介绍
以前只分析过Android11 ,这里发现Android13 有些区别,记录一下。
1、Android11 网络加密类型
SECURITY_TYPE_OPEN = 0; //无密码
SECURITY_TYPE_WEP = 1; //比较旧的加密方式,基本很少用,不太安全更多文字介绍:https://blog.csdn.net/u013403237/article/details/50663790SECURITY_TYPE_PSK = 2; //目前常用包含WPA/WPA2更多文字介绍:https://www.jianshu.com/p/9316c433ec5f/SECURITY_TYPE_EAP = 3; //非常安全EAP 的类型,是一种企业验证的安全类型,EAP 全称叫 802.1X/EAP 他常常给误解成 802.11x。EAP 的意思就是可扩展认证协议的缩写。最常部署的 EAP 验证类型包括 EAP-MD-5、EAP-TLS、EAP-LEAP、EAP-TTLS、EAP-Fast、EAP-PEAP;所以EAP网络也是连接wifi参数最多的网络,还需要添加客户端和服务器端的证书安装。更多文字介绍:https://blog.csdn.net/hl1293348082/article/details/123888636SECURITY_TYPE_SAE = 4;SAE最早是802.11s中为mesh网络提出的基于password的认证和key生成协议[1]。在WPA2-PSK中,PMK就是PSK,直接来源于密钥;而SAE则保证任何STA pair(AP-STA,nonAP-STA)在不同的session都有不同的PMK,使用SAE认证的个人无线网络通常称为WPA3-PSK/WPA3-Personal。简单的说SAE,就是WPA2的升级,简称WPA3更多文字介绍:https://blog.csdn.net/qq_23087099/article/details/113921261SECURITY_TYPE_EAP_SUITE_B = 5;EAP网络的另一种加密形式,具体介绍查不出SECURITY_TYPE_OWE = 6;未查出相关介绍,在当前类中发现,入下介绍,Opportunististic (共产主义),大概是共享网络的一种加密格式吧。/*** Opportunististic Wireless Encryption*/public static final int OWE = 9;最后两种:SECURITY_TYPE_WAPI_X WAPI(无线网络WLANAuthenticationandPrivacyInfrastructure)是我国自主研发并大力推行的无线网络WLAN安全标准,
它通过了IEEE(注意,不是Wi-Fi)认证和授权,是一种认证和私密性保护协议,其作用类似于802.11b中的WEP,但是能提供更加完善的安全保护。
上面的加密类型都是基于Android11 进行搜索和总结的,Android13 上看了是有点区别的。
但是基本类型,WPA,EAP,SAE(WPA3)是不变的。
Android 加密类型的定义是在 WifiConfiguration.java
2、Android11 Wifi 加密类型代码中的定义
frameworks\base\wifi\java\android\net\wifi\WifiConfiguration.java
/*** Set the various security params to correspond to the provided security type.* This is accomplished by setting the various BitSets exposed in WifiConfiguration.** @param securityType One of the following security types:* {@link #SECURITY_TYPE_OPEN}, //0* {@link #SECURITY_TYPE_WEP}, //1* {@link #SECURITY_TYPE_PSK}, //2* {@link #SECURITY_TYPE_EAP}, //3* {@link #SECURITY_TYPE_SAE}, //4* {@link #SECURITY_TYPE_EAP_SUITE_B}, //5* {@link #SECURITY_TYPE_OWE}, //6* {@link #SECURITY_TYPE_WAPI_PSK}, or //7* {@link #SECURITY_TYPE_WAPI_CERT} //8*/
3、Android13 Wifi 加密类型代码中的定义
packages\modules\Wifi\framework\java\android\net\wifi\WifiConfiguration.java
/*** Security types we support.* @hide*/@Retention(RetentionPolicy.SOURCE)@IntDef(prefix = { "SECURITY_TYPE_" }, value = {SECURITY_TYPE_OPEN,SECURITY_TYPE_WEP,SECURITY_TYPE_PSK,SECURITY_TYPE_EAP,SECURITY_TYPE_SAE,SECURITY_TYPE_EAP_SUITE_B,SECURITY_TYPE_OWE,SECURITY_TYPE_WAPI_PSK,SECURITY_TYPE_WAPI_CERT,//下面几个是新增的SECURITY_TYPE_EAP_WPA3_ENTERPRISE,SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT,SECURITY_TYPE_PASSPOINT_R1_R2,SECURITY_TYPE_PASSPOINT_R3,SECURITY_TYPE_DPP,})//下面是最后几个新增的加密类型的代码说明:/*** Security type for an OSEN network.* @hide*/public static final int SECURITY_TYPE_OSEN = 10;/*** Security type for a Passpoint R1/R2 network.* Passpoint R1/R2 uses Enterprise security, where TKIP and WEP are not allowed.* @hide*/public static final int SECURITY_TYPE_PASSPOINT_R1_R2 = 11;/*** Security type for a Passpoint R3 network.* Passpoint R3 uses Enterprise security, where TKIP and WEP are not allowed,* and PMF must be set to Required.* @hide*/public static final int SECURITY_TYPE_PASSPOINT_R3 = 12;/** Security type for Easy Connect (DPP) network */public static final int SECURITY_TYPE_DPP = 13;/*** This is used for the boundary check and should be the same as the last type.* @hide*/public static final int SECURITY_TYPE_NUM = SECURITY_TYPE_DPP;
具体加密类型不做分析,有兴趣的可以自己看看。
热点的加密类型,没有那么多,但是也在慢慢增加,估计是要一定的协议和硬件支持。
热点加密类型是定义在 SoftApConfiguration.java
4、Android11 热点加密类型定义
frameworks\base\wifi\java\android\net\wifi\SoftApConfiguration.java
/*** The operating security type of the AP.* One of the following security types:* {@link #SECURITY_TYPE_OPEN}, //0* {@link #SECURITY_TYPE_WPA2_PSK}, //1* {@link #SECURITY_TYPE_WPA3_SAE_TRANSITION}, //2 , TRANSITION 是过度的意思* {@link #SECURITY_TYPE_WPA3_SAE} //3*/
5、Android13 热点加密类型定义
packages\modules\Wifi\framework\java\android\net\wifi\SoftApConfiguration.java
/*** The operating security type of the AP.* One of the following security types:* {@link #SECURITY_TYPE_OPEN}, //1* {@link #SECURITY_TYPE_WPA2_PSK}, //2* {@link #SECURITY_TYPE_WPA3_SAE_TRANSITION}, //3* {@link #SECURITY_TYPE_WPA3_SAE}, //4* {@link #SECURITY_TYPE_WPA3_OWE_TRANSITION}, //5* {@link #SECURITY_TYPE_WPA3_OWE} //6*/
四、总结
关于热点开启是如何走到 SoftApManager ,可以看下我之前对热点开启流程的分析:
1、热点开启流程
https://blog.csdn.net/wenzhi20102321/article/details/128473734
Android11 热点开启大致流程:
(1)ConnectivityManager.startTethering
(2)TetheringManager.startTethering(request, executor, tetheringCallback)
(3)TetheringService.TetheringConnector.startTethering
(4)Tethering.startTethering(request, listener);
//方法名变化,使用null 对象开启热点
(5)WifiManager.startTetheredHotspot(null /* use existing softap config */)
(6)WifiServiceImpl.startTetheredHotspot(@Nullable SoftApConfiguration softApConfig)
//方法名再变化
(7)ActiveModeWarden.startSoftAp(apModeConfig);
(8)ActiveModeManager.start();ActiveModeManager manager = mWifiInjector.makeSoftApManager(listener, callback, softApConfig);listener.setActiveModeManager(manager);manager.start();
ActiveModeManager是接口类,会调用到SoftApManager.start()
(9)SoftApManager.startSoftAp()
(10)WifiNative.startSoftAp(mApInterfaceName, localConfigBuilder.build(), mSoftApListener)
(11)HostapdHal.addAccessPoint(ifaceName, config, listener::onFailure)
(12)根据硬件版本调用不同的接口实现:addAccessPoint_X_X
上面是Android11 上分析的代码逻辑,Android13 上应该是只有 HostapdHal 这个类不一样,其他流程是一样的。
2、WPA3 热点加密类型系统上层适配
需要设置系统 wpa3 相关 res属性 为true,如果不设置wap3 为true,是无法打开wpa3 热点的。
packages\modules\Wifi\service\ServiceWifiResources\res\values\config.xml
修改属性内容:
<!-- Wifi driver supports WPA3 Simultaneous Authentication of Equals (WPA3-SAE) for softap --><bool translatable="false" name="config_wifi_softap_sae_supported">true</bool> //默认false
简单来说,本文就是为了说这个属性设置为 true, 其他相关知识都是附带介绍的。
系统上层适配后,还是有点bug,其他设备无法连接分享的wpa3 热点,
这个问题很大概率跟硬件模组相关,需要进一步分析。
相关文章:
Android13分享热点设置安全性为wpa3
Android13分享热点设置安全性为wpa3 文章目录 Android13分享热点设置安全性为wpa3一、前言热点WPA3加密类型是需要底层硬件支持的。Wifi WPA3 和 热点 WPA3 是不一样的分享初衷 二、代码分析1、应用代码中热点设置WPA3 加密格式报错部分日志信息: 2、系统代码分析&a…...
2023-11-12 LeetCode每日一题(Range 模块)
2023-03-29每日一题 一、题目编号 715. Range 模块二、题目链接 点击跳转到题目位置 三、题目描述 Range模块是跟踪数字范围的模块。设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。 半开区间 [left, right) 表示所有 left < x < right 的实数 x 。 实…...
【六袆 - Framework】Angular-framework;前端框架Angular发展的由来0001;
Angular发展介绍,Angular17新特性 官方文档Angular框架发展的由来何为结构化、模块化 Angular17新特性 English unit Embarking on the journey of deep technical learning requires a well-structured approach, applicable to any programming language. The key…...
JAVA集合学习
一、结构 List和Set继承了Collection接口,Collection继承了Iterable Object类是所有类的根类,包括集合类,集合类中的元素通常是对象,继承了Object类中的一些基本方法,例如toString()、equals()、hashCode()。 Collect…...
【Linux】语言层面缓冲区的刷新问题以及简易模拟实现
文章目录 前言一、缓冲区刷新方法分类a.无缓冲--直接刷新b.行缓冲--不刷新,直到碰到\n才刷新c.全缓冲--缓冲区满了才刷新 二、 缓冲区的常见刷新问题1.问题2.刷新本质 三、模拟实现1.Mystdio.h2.Mystdio.c3.main.c 前言 我们接下来要谈论的是我们语言层面的缓冲区&…...
Mac安装与配置eclipse
目录 一、安装Java:Mac环境配置(Java)----使用bash_profile进行配置(附下载地址) 二、下载和安装eclipse 1、进入eclipse的官网 (1)、点击“Download Packages ”编辑 (2)、找到macOS选择符合自己电脑的框架选项…...
TCP协议(建议收藏)
1. TCP特点 有连接:需要双方建立连接才能通信,在socket编程中服务端new ServerSocket(port)需要绑定端口,在客服端new Socket(serverIp, serverPort)与服务端建立连接可靠传输:确认应答机制,超时重传机制面向字节流&a…...
Interactive Analysis of CNN Robustness
Interactive Analysis of CNN Robustness----《CNN鲁棒性的交互分析》 摘要 虽然卷积神经网络(CNN)作为图像相关任务的最先进模型被广泛采用,但它们的预测往往对小的输入扰动高度敏感,而人类视觉对此具有鲁棒性。本文介绍了 Pert…...
Java,多线程,线程的通信机制
线程间通信的理解: 当我们需要多个线程来共同完成一件任务,并且我们希望他们有规律地执行,那么多线程之间需要一些通信机制。可以协调它们的工作,以此实现多线程共同操作一份数据。 关于线程间的通信,以下代码为例&am…...
ArcGIS进阶:栅格计算器里的Con函数使用方法
本实验操作为水土保持功能重要性评价: 所用到的数据包括:土地利用类型数据(矢量)、植被覆盖度数据(矢量)和地形坡度数据(栅格)。 由于实验数据较少,其思路也较为简单&a…...
小程序多文件上传 Tdesign
众所周知,小程序文件上传还是有点麻烦的,其实主要还是小程序对的接口有诸多的不便,比如说,文件不能批量提交,只能一个个的提交,小程序的上传需要专门的接口。 普通的小程序的页面也比普通的HTML复杂很多 现…...
Java多线程锁
AQS 互斥锁,悲观锁 public class Demo1 {// 从0累加到1000 悲观锁static Integer num 0;public static void main(String[] args) {for (int i 0; i < 3; i) {Thread t new Thread(() -> {while (num < 1000) {synchronized (num.getClass()) {if (nu…...
【Docker】Web应用通过jar打包成WAR文件
把当前目录下的所有文件打包成game.war jar -cvfM0 game.war ./ -c 创建war包 -v 显示过程信息 -f -M -0 这个是阿拉伯数字,只打包不压缩的意思 解压game.war jar -xvf game.war 解压到当前目录 环境 RedHat Linux 9 VWWare 8.0 SSH 3.2.9 Putty 0.62 问题…...
Elasticsearch 外部词库文件更新
本文所使用的ES集群环境可在历史文章中获取,采用docker部署的方式。 Elasticsearch 是一个功能强大的搜索引擎,广泛用于构建复杂的全文搜索应用程序。在许多情况下,为了提高搜索引擎的性能和精度,我们可以使用外部词库来定制和扩展…...
OpenTiny Vue 组件库支持 Vue2.7 啦!
之前 OpenTiny 发布了一篇 Vue2 升级 Vue3 的文章。 🖖少年,该升级 Vue3 了! 里面提到使用了 ElementUI 的 Vue2 项目,可以通过 TinyVue 和 gogocode 快速升级到 Vue3 项目。 有朋友评论替换button出错了,并且贴出了…...
蒙特卡罗算法
介绍 蒙特卡罗算法是一种基于随机采样的数值计算方法,常用于解决复杂问题和优化求解。它的核心思想是通过生成大量的随机样本,利用概率统计的方法来估计问题的解或者优化目标的最优值。 蒙特卡罗算法的具体步骤如下: 1. 定义问题:…...
python爬虫hook定位技巧、反调试技巧、常用辅助工具
一、浏览器调试面板介绍 二、hook定位、反调试 Hook 是一种钩子技术,在系统没有调用函数之前,钩子程序就先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,也可以强制结束消息的传递。简单…...
Jmeter —— jmeter参数化实现
jmeter参数化 在实际的测试工作中,我们经常需要对多组不同的输入数据,进行同样的测试操作步骤,以验证我们的软件的功能。这种测试方式在业界称为数据驱动测试, 而在实际测试工作中,测试工具中实现不同数据输入的过…...
Day57_《MySQL索引与性能优化》摘要
一、资料 视频:《尚硅谷MySQL数据库高级,mysql优化,数据库优化》—周阳 其他博主的完整笔记:MySQL 我的笔记:我的笔记只总结了视频p14-p46部分,因为只有这部分是讲解了MySQL的索引与explain语句分析优化…...
蓝桥杯每日一题2023.11.11
题目描述 “蓝桥杯”练习系统 (lanqiao.cn) 题目分析 对于此题首先想到的是暴力分析,使用前缀和,这样方便算出每一区间的大小,枚举长度和其实位置,循环计算出所有区间的和进行判断,输出答案。 非满分暴力写法&#…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
