Wi-Fi Direct

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/aidlhardware/interfaces/wifi/1.3 或更高版本
  • hardware/interfaces/wifi/supplicant/aidlhardware/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_addrp2p_interface_random_mac_addr

要启用此功能,设备制造商必须

  • 实现 Wi-Fi Supplicant 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 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”的部分。