ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

MobileInfo 设备指纹实践:如何基于 Build 与 Serial 生成不碰撞的设备唯一 ID

MobileInfo 设备指纹实践:如何基于 Build 与 Serial 生成不碰撞的设备唯一 ID MobileInfo 设备指纹实践如何基于 Build 与 Serial 生成不碰撞的设备唯一 ID【免费下载链接】MobileInfo【Android】Hardware Information. For detailed network diagnosis, please refer to【HttpInfo】项目地址: https://gitcode.com/gh_mirrors/mo/MobileInfoMobileInfo是一款 Android 硬件信息库它内置了基于Build常量与Serial序列号生成设备指纹的方案把七个 Build 字段压缩成机型短码再与设备 Serial 的哈希一起打包进 UUID从而生成不碰撞的设备唯一 ID。本文带你逐行拆解 PhoneIdHelper.java 中的实现讲透取舍、碰撞风险与合规边界。一、先搞懂Android 设备指纹的三个要素所谓设备指纹就是用一组稳定的硬件/系统标识拼出一个这台设备的唯一 ID。MobileInfo 的方案只依赖三样东西要素来源稳定性唯一性Build.BOARD/BRAND/DEVICE/MANUFACTURER等android.os.Build静态字段高刷机可能变化低同机型完全相同Serial序列号Build.getSerial()/Build.SERIAL极高唯一性的主力UUID打包本地计算确定性无碰撞的哈希组合二、MobileInfo 的 UUID 打包算法两步走核心实现只有两小步位于 PhoneIdHelper.getUniqueID()第 1 步生成 14 位机型短码以固定前缀35开头依次拼接七个 Build 常量的长度取模值String shortCode 35 (Build.BOARD.length() % 10) (Build.BRAND.length() % 10) (Build.CPU_ABI.length() % 10) (Build.DEVICE.length() % 10) (Build.MANUFACTURER.length() % 10) (Build.MODEL.length() % 10) (Build.PRODUCT.length() % 10);注意源码特意避开了DISPLAY、HOST、ID—— 这些字段会随系统升级或 OTA 而改变一旦变化同一台设备就会算出不同的 ID源码注释说明。第 2 步与 Serial 组合成 128 位 UUIDreturn new UUID(shortCode.hashCode(), serial.hashCode()).toString();短码的哈希作为高 64 位、序列号哈希作为低 64 位两台设备只要机型不同或序列号不同生成的设备唯一 ID 就不同。Demo 中可直接通过 IDFragment.java 的uniqueID页面查看结果库的对外入口在 MobileHardWareHelper.java 的getUniqueIDInfo()。三、Build 与 Serial 的取舍谁扛唯一性谁扛稳定Build 常量优点是任何权限都能读、永不抛异常缺点是同一机型的所有设备算出的短码完全一样它只能回答这是什么机型回答不了是哪一台。Serial出厂唯一是唯一性的核心。MobileInfo 在 BuildInfo.java 中做了版本兼容——Android 8.0 及以上走Build.getSerial()之前用Build.SERIAL并额外通过 native 层补充读取ro.boot.serialno、ro.serialno等系统属性作为兜底。四、权限兼容与防碰撞生产环境这样兜底这里必须正视两个现实Android 8.0 起 Serial 需要READ_PHONE_STATE权限普通应用拿不到时会返回unknown。此时第 2 步中所有同机型设备的serial.hashCode()相同 ——同机型设备会碰撞成同一个 ID。这也是 Demo 页描述标注 invalid 的原因。模拟器上 Serial 常为unknown或0风险同样存在。生产环境的防碰撞建议拿不到 Serial 时降级改用Build.FINGERPRINT包含品牌、机型、编译版本比短码信息量大得多拼接Settings.Secure.ANDROID_ID再兜底则用应用安装时自生成的随机 UUID 并持久化到本地保证换机可识别、重装可追踪上线后监测 ID 分布若同一 ID 关联设备数异常升高即可判定发生了碰撞。五、合规提示设备指纹不是想采就采 采集 Serial、Android ID 属于个人信息收集请遵循《信息安全技术 移动互联网应用App收集个人信息基本规范》做到最小化采集、弹窗告知、可拒绝项目 README 开头也特别强调了这一点。设备指纹用得好是防作弊利器用得激进则是隐私合规红线。写在最后MobileInfo 这套Build 短码 Serial → UUID的设备指纹生成方式胜在零依赖、可离线、确定性强非常适合学习设备唯一 ID 的构造思路但 Serial 的权限限制决定了它不能作为生产方案的唯一支柱。理解了 Build 与 Serial 各自的角色你才能组合出真正不碰撞的设备指纹。【免费下载链接】MobileInfo【Android】Hardware Information. For detailed network diagnosis, please refer to【HttpInfo】项目地址: https://gitcode.com/gh_mirrors/mo/MobileInfo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表