用意
- 保护用户隐私
- 限制第三方APP 访问到超出 APP使用期间的数据(device id、meid等)
- 导致10之后DeviceID不可用,推荐使用AndroidID
Android 10系统
针对un-resetable(刷机都不会重置 的id数据) 数据读取,新增限制。
影响的方法
- Build
- getSerial()
- TelephonyManager
- getImei()
- getDeviceId()
- getMeid()
- getSimSerialNumber()
- getSubscriberId()
DeviceId
需要权限
READ_PHONE_STATE
READ_PRIVILEGED_PHONE_STATE
- 新增权限
- 在GooglePlay中不允许第三方应用持有。
app target >= Android 10(29)
抛出异常 SecurityException
app target < Android 10
- 有
READ_PHONE_STATE
权限,return null - 无
READ_PHONE_STATE
权限, 抛出异常 SecurityException
官方推荐可行的解决方案
String uniqueID = UUID.randomUUID().toString();
其他和google的广告、推送相关,不可用
AndroidId
系统 >= Android 8.0
- 64bit数(用十六进制表示)
- 与app-signing key, user, and device(相当于主键) 唯一绑定
- 变更: 恢复出厂设置,或开发者更改 签名key,还有user切换
系统升级至Android 8.0 (API level 26)
AndroidID会发生变化
Android 8.0之前
- 设备第一次启动时,随机生成
- 在之后保持不变