从 Android 8.0 开始,Android 设备在未连接到网络的情况下探测新网络时,会使用随机分配的 MAC 地址。在 Android 9 中,您可以启用一个开发者选项(默认处于停用状态),使设备在连接到 Wi-Fi 网络时使用随机分配的 MAC 地址。
在 Android 10 中,默认为客户端模式、SoftAp 和 WLAN 直连启用随机分配 MAC 地址功能。
随机分配 MAC 地址可防止监听器使用 MAC 地址来生成设备活动的历史记录,从而加强对用户隐私的保护。
此外,在 Wi-Fi 感知和 Wi-Fi RTT 操作中也会使用随机分配的 MAC 地址。
如需了解详情,请参阅随机分配 MAC 地址的行为。
实现
要在设备上实现随机分配 MAC 地址,请执行以下操作:
与 WLAN 芯片供应商合作实现以下 HAL 方法:
IWifiStaIface#setMacAddress
:配置接口的 MAC 地址。默认实现会关闭接口、更改 MAC 地址,然后重新启用接口。IWifiStaIface#getFactoryMacAddress
:使用ioctl
调用获取wlan0
的出厂 MAC 地址。ISupplicantP2pIface#setMacRandomization
:在客户端中开启/关闭点对点随机分配 MAC 地址功能。
在“设置”
config.xml
中,将config_wifi_connected_mac_randomization_supported
设置为true
(此步骤可在设备自定义叠加层中完成)。- 此标志用于控制是否启用客户端模式随机分配 MAC 地址功能。
在“设置”
config.xml
中,将config_wifi_p2p_mac_randomization_supported
设置为true
(此步骤可在设备自定义叠加层中完成)。- 此标志用于控制是否启用 Wi-Fi 直连随机分配 MAC 地址功能。
使用验证中所述的方法测试实现。
系统界面必须:
- 提供为每个 SSID 启用或停用随机分配 MAC 地址功能的选项。
- 默认为所有新添加的网络启用随机分配 MAC 地址功能。
使用设置界面的参考实现来实现新提示。
搭载 Android 9 或更低版本的设备可能不支持随机分配 WLAN MAC 地址的功能。将此类设备升级到 Android 10 时,可以通过在 WLAN 供应商 HAL make 文件中将 WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION
标记设置为 true,停用随机分配 WLAN MAC 地址的功能。
验证
如需验证该功能是否按预期运行,请运行手动测试:
- 通过检查设备叠加层中的
config_wifi_connected_mac_randomization_supported
是否设置为true
,验证设备是否支持随机分配 MAC 地址功能。 - 连接到 WLAN 网络。
- 点按该网络,转到“网络详情”页面。验证随机分配 MAC 地址功能是否已开启。验证显示的 MAC 地址是否为随机分配的 MAC 地址。随机分配的 MAC 地址会将本地生成的位设置为 1,将多播位设置为 0。
- 关闭随机分配 MAC 地址功能。连接到同一网络并确认系统使用的是出厂 MAC 地址。
- 点按“网络详情”页面上的取消保存,删除该网络。
连接到同一网络并验证系统使用的是否是同一随机分配的 MAC 地址。
要在将要升级到 Android 10 或更高版本的预 Android 10 设备(能够支持随机分配 MAC 地址功能)上测试随机分配 MAC 地址功能,请执行以下操作:
- 在搭载 Android 9 或更低版本的设备上保存至少一个网络。
- 刷写 Android 10 系统映像。
- 在 WLAN 选择器中,确认是否已为保存的所有网络关闭随机分配 MAC 地址功能。
- 开启随机分配 MAC 地址功能。连接到同一网络并验证系统使用的是否是随机分配的 MAC 地址。