Wi-Fi Direct 功能(也称为 Wi-Fi P2P)允许支持的设备使用 Wi-Fi Direct 协议直接发现彼此并相互连接,而无需互联网或移动网络接入。此功能基于 Wi-Fi Alliance (WFA) Wi-Fi Direct 规范构建,允许在受信任的设备和应用之间共享高吞吐量数据,否则这些设备和应用将脱离网络。
示例和源代码
要使用此功能,设备制造商必须实现 Wi-Fi 供应商和 Supplicant HAL 接口。
在 Android 13 中,Supplicant 接口使用 AIDL 进行 HAL 定义。在 Android 14 及更高版本中,供应商 HAL 接口使用 AIDL。在 Android 12 及更低版本中,Supplicant 和供应商 HAL 接口使用 HIDL 定义。
需要以下 Wi-Fi HAL 表面来实现 Wi-Fi Direct 功能
hardware/interfaces/wifi/aidl
或hardware/interfaces/wifi/1.3
或更高版本hardware/interfaces/wifi/supplicant/aidl
或hardware/interfaces/wifi/supplicant/1.2
或更高版本
实现
设备制造商需要提供框架和 HAL/固件支持
- 框架
- AOSP 代码
- 启用 Wi-Fi Direct:需要功能标志
- Wi-Fi Direct (P2P) HAL 支持(这意味着固件支持)
要实现此功能,设备制造商需要实现 Wi-Fi HIDL 或 AIDL 接口,并为 Wi-Fi Direct 启用功能标志。在 device.mk
(位于 device/<oem>/<device>
中)内,修改 PRODUCT_COPY_FILES
环境变量以包含对 Wi-Fi Direct 功能的支持
```
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 Direct 的所有其他要求都包含在 AOSP 中。
MAC 随机化
Android 要求 Wi-Fi Direct *设备地址*和*接口地址*是随机化的。它们必须不同于设备的真实 MAC 地址,并且必须满足以下要求
- 如果未保存持久组,则必须在接口创建时随机化 Wi-Fi Direct 设备地址;否则,设备地址必须继续使用上次生成的 MAC 地址。
- Wi-Fi Direct 接口地址(也称为群组地址)必须在每次建立连接时随机化。
Wi-Fi Direct MAC 随机化在 'wpa_supplicant' 中实现,并通过两个配置控制:p2p_device_random_mac_addr
和 p2p_interface_random_mac_addr
。
要启用此功能,设备制造商必须
- 实现 Wi-Fi Supplicant
ISupplicantP2pIface::setMacRandomization
API。根据实现的接口,它位于hardware/interface/wifi/supplicant/1.2
,适用于 HIDLhardware/interface/wifi/supplicant/aidl
,适用于 AIDL
- 在设备自定义叠加层中,将
config_wifi_p2p_mac_randomization_supported
设置为 'true'。
验证
Android 提供了一组单元测试、兼容性测试套件 (CTS) 测试和 CTS 验证程序 测试,以验证 Wi-Fi Direct 功能。Wi-Fi Direct 也可以使用 供应商测试套件 (VTS) 进行测试。
单元测试
使用以下测试验证 Wi-Fi Direct 软件包。
服务测试
atest com.android.server.wifi.p2p
管理器测试
atest android.net.wifi.p2p
兼容性测试套件 (CTS) 测试
使用 CTS 测试来验证 Wi-Fi Direct 功能。CTS 检测到该功能何时启用,并自动包含相关的测试。
要触发 CTS 测试,请运行
% atest android.net.wifi.p2p.cts
CTS 验证程序测试
CTS 验证程序测试使用两个设备(一个测试设备和一个已知良好的设备)来验证 Wi-Fi Direct 行为。要运行测试,请打开 CTS 验证程序并导航到标题为“Wi-Fi Direct Tests”的部分。