如何实现Android应用仅在特定预设设备上运行?
以下是几种避开Android 10+敏感硬件标识权限限制的设备识别/绑定方案:
自定义设备绑定密钥
首次启动应用时生成高熵随机密钥,引导用户将密钥提交给你,在后端将其加入允许运行的白名单。后续应用启动时,读取本地加密存储(建议用EncryptedSharedPreferences)的密钥,与后端白名单校验。该方案完全不依赖系统敏感权限,安全性由后端管控,但需要用户配合完成初始绑定。多特征组合哈希标识
收集多个非敏感易获取的设备特征(如屏幕分辨率、CPU架构、总内存大小、首次安装时间、系统版本号等),将特征拼接后通过SHA-256哈希生成唯一标识。单个特征可能因设备重置、系统更新变化,但组合后的标识唯一性仍较高,且无需特殊权限。需提前告知用户,设备重大变更后可能需要重新验证。Google Play生态绑定(限上架应用)
若应用上架Google Play,可借助Install Referrer API获取安装凭证,结合应用内账号实现账号与设备绑定;或使用Firebase App Check,通过配置允许的设备/应用实例,限制仅授权设备能访问后端服务,间接实现应用的设备专属运行。该方案依赖Google生态,安全性较高,无需处理底层硬件标识。专属客户端证书认证
为每个授权设备生成唯一客户端证书,指导用户将证书安装到设备系统密钥库(Keystore)。应用启动时向后端提交证书校验,仅持有有效证书的设备可使用核心功能。该方案安全性极高,证书难以篡改,但需手动为每个设备配置证书,操作成本较高,适合高安全要求的小众场景。
内容的提问来源于stack exchange,提问作者Mohamed Hasan

