Android 12无需设为系统应用或设备所有者获取IMEI与序列号方案咨询
Android 12 及以上版本获取IMEI/序列号的方案说明
从Android 10(API 29)开始Google就已收紧设备硬件标识的访问权限,Android 12进一步强化了限制,普通第三方应用无论申请任何权限,都无法通过官方公开接口直接获取IMEI、硬件序列号这类不可重置的设备唯一标识,该限制是系统底层实现的,没有通用的绕过方法。
除了你提到的将应用设为系统应用、设备所有者两类方案外,没有其他合法通用的途径可以直接获取原始IMEI和序列号,你可根据自身业务场景选择替代方案:
- 若为企业部署类应用,可走Android企业设备管理流程,申请*配置文件所有者(Profile Owner)*权限,该权限属于你原有方案的延伸,是官方唯一允许非系统应用获取硬件标识的途径
- 若仅需要设备唯一标识实现业务统计、账号关联、用户分群等场景,可使用官方推荐的替代标识:
- 广告ID(Advertising ID):无需特殊权限即可获取,适合广告归因、用户分群场景,用户可主动重置,调用方法为
AdvertisingIdClient#getAdvertisingIdInfo() - ANDROID_ID:通过
Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID)获取,同一签名应用在同一设备上取值固定,仅会在设备恢复出厂、应用签名变更时变化,适合应用内的设备标识场景 - 自定义UUID:应用首次启动时随机生成UUID存入应用私有目录,只要用户不卸载重装取值就不会变,完全由业务侧自主可控,适合不需要跨应用统一标识的场景
- 广告ID(Advertising ID):无需特殊权限即可获取,适合广告归因、用户分群场景,用户可主动重置,调用方法为
- 若你的应用仅面向特定定制ROM的设备发布,可尝试对接ROM厂商开放的私有接口获取IMEI和序列号,该方法不通用,无法覆盖所有Android 12设备,且不符合原生Android的权限规范
额外提示:所有绕过系统权限限制获取IMEI/序列号的非正规方法,都违反Google Play应用上架政策,上架会被直接处罚下架,同时在原生Android 12及以上系统上无法生效,不建议尝试。
内容的提问来源于stack exchange,提问作者developer android
相关产品推荐
相关产品推荐

