Android O 设备 id 信息的变化
Android O 引入了一些改进,以帮助用户控制标识符的使用。这些改进包括:
- 限制使用不可重置的设备作用域标识符
- 更新 Android O Wi-Fi 堆叠以及 Pixel,Pixel XL 和 Nexus 5x 手机使用的 Wi-Fi 芯片固件的更改,随机选择探测请求中的 MAC 地址
- 更新应用程序请求帐户信息的方式,并提供更多的面向用户的控制
设备标识符更改
以下是 Android O 的一些设备标识符更改:
Android ID
在 O 中,Android ID(Settings.Secure.ANDROID_ID 或 SSAID)对于每个应用程序和设备上的每个用户都有不同的值。应该使用需要设备范围标识符的开发人员使用可重置的标识符,例如 广告 ID ,为用户提供更多的控制权。广告 ID 还提供了面向用户的设置来限制广告跟踪。
另外在 Android O:
- 只要软件包名称和签名密钥相同,软件包卸载/重新安装时,ANDROID_ID 值将不会更改。应用程序可以依赖此值来重新安装状态。
- 如果应用程序安装在运行早期版本的 Android 的设备上,则当设备更新为 Android O 时,Android ID 保持不变,除非该应用被卸载并重新安装。
- 仅当设备出厂设置或签名密钥在卸载和重新安装事件之间转动时,Android ID 值才会更改。 此更改仅适用于使用 Google Play 服务和广告 ID 发送的设备制造商。其他设备制造商可以提供替代的可重置 ID 或继续提供 ANDROID ID。
Build.SERIAL
为了与访问 IMEI 所需的运行时权限保持一致,对于 Android O 或更新版本的应用程序,不推荐使用 android.os.Build.SERIAL。相反,他们可以使用一个新的 Android O API,Build.getSerial(),它返回实际的序列号,只要主叫持有 PHONE 权限。在 Android 的未来版本中,面向 Android O 的应用将 Build.SERIAL 看作“未知”。为了避免破坏旧版应用功能,针对先前版本的 Android 的应用将继续像以前一样看到设备的序列号。
Net.Hostname
Net.Hostname 提供设备的网络主机名。在以前的 Android 版本中,网络主机名的默认值和 DHCP 主机名选项的值包含 Settings.Secure.ANDROID_ID。在 Android O 中,net.hostname 为空,DHCP 客户端不再发送主机名,遵循 IETF RFC 7844 (匿名配置文件)。
Widevine ID
对于使用 O 发货的新设备,Widevine 客户端 ID 会为每个应用程序包名称和 Web 来源(对于 Web 浏览器应用程序)返回不同的值。
独特的系统和设置属性
除了 Build.SERIAL 之外,还有其他设置和系统属性在 Android O 中不可用。其中包括:
- ro.runtime.firstboot:上次重装或最新启动后首次启动的毫秒精确时间戳
- htc.camera.sensor.front_SN:相机序列号(在某些 HTC 设备上可用)
- persist.service.bdroid.bdaddr:蓝牙 MAC 地址属性
- Settings.Secure.bluetooth_address:设备蓝牙 MAC 地址。在 O 中,这仅适用于持有 LOCAL_MAC_ADDRESS 权限的应用。
Wi-Fi 探测请求中的 MAC 地址随机化
我们与安全研究人员(1 原作者注释)合作,为 Google Pixel 和 Nexus 5X 设备中的芯片组固件生成的 Wi-Fi 扫描流量设计了强大的 MAC 地址随机化。然后,Android 连接团队与制造商合作,更新这些设备使用的 Wi-Fi 芯片组固件。
Android O 将这些固件更改集成到 Android Wi-Fi 堆叠中,以便使用更新固件和运行 Android O 或更高版本的这些芯片组的设备可以利用它们。
以下是运行 O +时对 Pixel,Pixel XL 和 Nexus 5x 固件进行的一些更改:
- 对于与接入点断开连接的每个 Wi-Fi 扫描,手机使用新的随机 MAC 地址(无论设备是否处于待机状态)。
- 每个扫描的初始包序列号也是随机的。
- 不必要的探测请求信息元素已被删除:信息元素限于 SSID 和 DS 参数集。
getAccounts API 中的更改
在 Android O 及以上版本中,GET_ACCOUNTS 权限不足以访问设备上注册的帐户列表。应用程序必须使用管理特定帐户类型的应用程序提供的 API,或者用户必须通过帐户选择器活动授予访问帐户的权限。例如,Gmail 可以访问设备上注册的 Google 帐户,因为 Google 拥有 Gmail 应用程序,但用户需要向 Gmail 访问有关在设备上注册的其他帐户的信息。
针对 Android O 或更高版本的应用程序应使用 AccountManager#newChooseAccountIntent()或特定于身份验证的方法来访问帐户。具有较低目标 SDK 的应用程序仍然可以使用当前流。
在 Android O 中,应用程序也可以使用 AccountManager。 setAccountVisibility()/ getVisibility()方法来管理这些应用程序拥有的帐户的可见性策略。
此外,LOGIN_ACCOUNTS_CHANGED_ACTION 广播已被弃用,但仍可在 Android O 中使用。应用程序应使用 addOnAccountsUpdatedListener()获取有关运行时帐户的更新,以获取其指定的帐户类型列表。
查看 唯一标识符的最佳做法 以获取更多信息。
注释
1.格伦·威尔金森和团队 SensePost 的,英国,塞莱斯廷·马特,马修 Cunche:里昂大学,仁寺里昂,花旗实验室,INRIA Privatics,马西·文霍夫,鲁汶大学 ↩
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论