Android 11 中的 MAC 地址更新

Android 11 引入了与 MAC 地址相关的以下变更。这些变更只会影响以 Android 11 为目标平台的应用。

随机分配 MAC 地址

在以 Android 10(API 级别 29)及更低版本为目标平台的应用中,MAC 地址的随机分配是基于每个 SSID 进行的,因为 Passpoint 可以连接到同一配置文件的不同 SSID。而在以 Android 11(API 级别 30)及更高版本为目标平台的应用中,Passpoint 网络的 MAC 地址随机分配将更改为针对每个完全限定域名 (FQDN) 进行分配。

对于以 API 级别 30 及更高级别为目标平台的应用,非特权应用将无法访问设备的 MAC 地址;只有具有 IP 地址的网络接口可见。这会影响 getifaddrs()NetworkInterface.getHardwareAddress() 方法,以及 RTM_GETLINK netlink 消息的发送。

下面列出了此变更会以哪些方式影响应用:

  • NetworkInterface.getHardwareAddress() 会针对每个接口返回 null。
  • 应用无法对 NETLINK_ROUTE 套接字使用 bind() 函数。
  • ip 命令不会返回有关接口的信息。

这些变更强制执行不要使用 MAC 地址中提供的指导。

请注意,大多数开发者应使用级别较高的 ConnectivityManager API,而不是级别较低的 NetworkInterfacegetifaddrs() 等 API。