WLAN 直连功能又称“Wi-Fi 点对点”,它允许支持设备直接使用 WLAN 直连协议发现其他设备并与之互连,无需连接到互联网或移动网络。此功能是基于 Wi-Fi 联盟 (WFA) Wi-Fi 直连规范构建的,它支持在断开网络的情况下,在可信设备和应用之间共享高吞吐量数据。
示例和源代码
要使用此功能,设备制造商必须实现 Wi-Fi 供应商和客户端 HAL 接口。
在 Android 13 中,客户端接口使用 AIDL 进行 HAL 定义。在 Android 14 及更高版本中,供应商 HAL 接口使用 AIDL 进行定义。在 Android 12 及更低版本中,客户端和供应商 HAL 接口使用 HIDL 进行定义。
以下是采用 Wi-Fi 直连功能所需的 Wi-Fi HAL surface:
hardware/interfaces/wifi/aidl
、hardware/interfaces/wifi/1.3
或更高版本hardware/interfaces/wifi/supplicant/aidl
、hardware/interfaces/wifi/supplicant/1.2
或更高版本
实现
设备制造商需要提供框架和 HAL/固件支持:
- 框架:
- AOSP 代码
- 启用 Wi-Fi 直连:需要功能标记
- Wi-Fi 直连(点对点)HAL 支持(意味着固件支持)
为实现此功能,设备制造商需采用 Wi-Fi HIDL 或 AIDL 接口,并为 Wi-Fi 直连启用功能标志。在位于 device/<oem>/<device>
的 device.mk
中,修改 PRODUCT_COPY_FILES
环境变量,以便支持 Wi-Fi 直连功能:
```
PRODUCT_COPY_FILES +=
frameworks/native/data/etc/android.hardware.wifi.direct.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.direct.xml
```
支持 Wi-Fi 直连的所有其他要求都包含在 AOSP 中。
随机分配 MAC 地址
Android 要求 WLAN 直连设备地址和接口地址是随机分配的。它们必须不同于设备的真实 MAC 地址,并且必须满足以下要求:
- 如果没有保存任何永久性群组,则 WLAN 直连设备地址必须是在创建接口时随机分配的;否则设备地址必须继续使用最后生成的 MAC 地址。
- 每次建立连接时,Wi-Fi 直连接口地址(也称为群组地址)必须是随机分配的。
Wi-Fi 直连随机分配 MAC 地址是在“wpa_supplicant”中实现的,并由两项配置控制:p2p_device_random_mac_addr
和 p2p_interface_random_mac_addr
。
要启用此功能,设备制造商必须满足以下条件:
- 实现 Wi-Fi 客户端
ISupplicantP2pIface::setMacRandomization
API。根据已实现的接口,相应位置如下:hardware/interface/wifi/supplicant/1.2
(适用于 HIDL)hardware/interface/wifi/supplicant/aidl
(适用于 AIDL)
- 在设备自定义叠加层中将
config_wifi_p2p_mac_randomization_supported
设置为“true”。
验证
Android 提供了一组单元测试、兼容性测试套件 (CTS) 测试和 CTS 验证程序测试,以验证 Wi-Fi 直连功能。您也可以使用供应商测试套件 (VTS) 来测试 Wi-Fi 直连功能。
单元测试
使用以下测试验证 WLAN 直连软件包。
服务测试:
atest com.android.server.wifi.p2p
Manager 测试:
atest android.net.wifi.p2p
兼容性测试套件 (CTS) 测试
使用 CTS 测试来验证 Wi-Fi 直连功能。CTS 会检测何时启用了这项功能,并会自动包含相关测试。
要触发 CTS 测试,请运行以下命令:
% atest android.net.wifi.p2p.cts
CTS 验证程序测试
CTS 验证程序测试使用以下两种设备验证 WLAN 直连行为:测试设备和已知良好的设备。要运行测试,请打开 CTS 验证程序并转到“WLAN 直连测试”部分。