通过 Android 8.0 中新增的 Wi-Fi 感知功能,支持设备可以直接使用 Wi-Fi 感知协议发现其他设备、与其他设备互连,以及将覆盖范围扩展到其他设备(Android 9 中新增的功能),而无需连接到互联网或移动网络。此功能是基于 Wi-Fi 联盟 (WFA) Wi-Fi 感知规范(2.0 版、3.0 版和 3.1 版)构建的,它支持在断开网络的情况下,在可信设备与应用之间轻松共享高吞吐量数据。
示例和源代码
要使用此功能,设备制造商应采用在 Android 开源项目 (AOSP) 中提供的 Wi-Fi 硬件接口设计语言 (HIDL)。HIDL 取代了之前使用的硬件抽象层 (HAL) 结构,以便通过指定收集到接口和软件包的类型和方法调用来简化实现流程。
借助 Wi-Fi HIDL 使用 Wi-Fi 感知功能:hardware/interfaces/wifi/1.2 或更高版本。Wi-Fi 感知 HAL Surface 非常大;hardware/interfaces/wifi/1.2/README-NAN.md 文件描述了框架当前使用的子集。
您可以参考旧版 Wi-Fi HAL 来了解它与新 HIDL 接口之间的关系:hardware/libhardware_legacy/+/master/include/hardware_legacy/wifi_nan.h。
实现
设备制造商需要提供框架和 HAL/固件支持:
- 框架:
- AOSP 代码
- 启用感知功能:需要功能标志和 HIDL build 标志
- Wi-Fi 感知 (NAN) HAL 支持(意味着固件支持)
为实现此功能,设备制造商需采用 Wi-Fi HIDL,另外还要启用两个功能标志:
在位于
device/<oem>/<device>
的BoardConfig.mk
或BoardConfig-common.mk
中,添加以下标志:WIFI_HIDL_FEATURE_AWARE := true
在位于
device/<oem>/<device>
的device.mk
中,修改PRODUCT_COPY_FILES
环境变量,以便支持 Wi-Fi 感知功能:PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.wifi.aware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.aware.xml
Wi-Fi 感知功能包括使用 IEEE 802.11mc 协议(又称为往返时间 (RTT))将覆盖范围扩展到对等设备。Wi-Fi 感知的这一子功能取决于支持 Wi-Fi RTT 功能的设备,即它要求设备支持 Wi-Fi 感知和 Wi-Fi RTT。如需了解详情,请参阅 Wi-Fi RTT。
除此以外,实现此功能所需的所有代码都包含在 AOSP 中。
如果指定了 WIFI_HAL_INTERFACE_COMBINATIONS
标志,则忽略 WIFI_HIDL_FEATURE_AWARE
标志。如需了解详情,请参阅 Wi-Fi 多接口并发。
随机分配 MAC 地址
Android 要求随机分配 Wi-Fi 感知发现 (NMI) 和数据接口 (NDP) 的 MAC 地址,而且随机分配的 MAC 地址不应与设备的真实 MAC 地址相同。MAC 地址必须满足以下条件:
- 每当启用或重新启用 Wi-Fi 感知时进行随机分配。
Wi-Fi 感知功能启用后,必须按照由
NanConfigRequest.macAddressRandomizationIntervalSec
HIDL 参数配置的有规律的间隔随机分配 MAC 地址。框架将时间间隔默认配置为 30 分钟。
验证
Android 提供了一组单元测试、集成测试 (ACTS)、兼容性测试套件 (CTS) 测试和 CTS 验证程序测试,以验证 Wi-Fi 感知功能。您也可以使用供应商测试套件 (VTS) 来测试 Wi-Fi 感知功能。
单元测试
Wi-Fi 感知软件包测试:
服务测试:
atest com.android.server.wifi.aware
Manager 测试:
atest android.net.wifi.aware
集成测试 (ACTS)
acts/sl4a
测试套件(在 tools/test/connectivity/acts_tests/tests/google/wifi/aware/README.md
中有相应说明)提供了功能测试、性能测试和压力测试。
兼容性测试套件 (CTS) 测试
使用 CTS 测试来验证 Wi-Fi 感知功能。CTS 会检测何时启用了这项功能,并会自动包含相关测试。
可以使用以下方法触发 CTS 测试:
atest SingleDeviceTest
CTS 验证程序测试
CTS 验证程序测试使用以下两种设备验证 Wi-Fi 感知行为:测试设备和已知良好的设备。如需运行测试,请打开 CTS 验证程序并转到“Wi-Fi 感知测试”部分。