news 2026/8/23 10:09:07

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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/MobileInfo

MobileInfo是一款 Android 硬件信息库,它内置了基于Build常量与Serial序列号生成设备指纹的方案:把七个 Build 字段压缩成机型短码,再与设备 Serial 的哈希一起打包进 UUID,从而生成不碰撞的设备唯一 ID。本文带你逐行拆解 PhoneIdHelper.java 中的实现,讲透取舍、碰撞风险与合规边界。

一、先搞懂:Android 设备指纹的三个要素

所谓设备指纹,就是用一组稳定的硬件/系统标识拼出一个"这台设备"的唯一 ID。MobileInfo 的方案只依赖三样东西:

要素来源稳定性唯一性
Build.BOARD/BRAND/DEVICE/MANUFACTURERandroid.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);

注意源码特意避开了DISPLAYHOSTID—— 这些字段会随系统升级或 OTA 而改变,一旦变化,同一台设备就会算出不同的 ID(源码注释说明)。

第 2 步:与 Serial 组合成 128 位 UUID

return 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.serialnoro.serialno等系统属性作为兜底。

四、权限兼容与防碰撞:生产环境这样兜底

这里必须正视两个现实:

  1. Android 8.0 起 Serial 需要READ_PHONE_STATE权限,普通应用拿不到时会返回"unknown"。此时第 2 步中所有同机型设备的serial.hashCode()相同 ——同机型设备会碰撞成同一个 ID。这也是 Demo 页描述标注 "invalid" 的原因。
  2. 模拟器上 Serial 常为unknown0,风险同样存在。

生产环境的防碰撞建议:

  • 拿不到 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/23 10:06:05

阿里云RTC LTR技术解析:硬件解码支持下的弱网视频抗丢包方案

1. 从一次卡顿的线上会议说起:为什么我们需要LTR?那天下午,我正在参加一个跨国的项目评审会,屏幕上的同事正在讲解一个复杂的架构图。突然,他的画面开始出现马赛克,声音也变得断断续续,几秒钟后…

作者头像 李华
网站建设 2026/8/23 10:05:49

大模型Agent技术面试核心问题与实战解析

1. 大模型Agent技术面试现状与挑战 2023年成为大模型Agent技术爆发的元年,各类企业对该领域人才的需求呈现指数级增长。根据某头部招聘平台数据显示,大模型相关岗位平均薪资较传统AI岗位高出47%,但面试通过率不足15%。这种"高薪低通过率…

作者头像 李华
网站建设 2026/8/23 10:04:24

Vue+Flask求职推荐系统:Apriori算法实战

1. 项目概述 这个基于VueFlask技术栈的求职推荐系统,核心创新点在于运用Apriori关联规则算法实现职位与求职者的智能匹配。不同于传统的关键词匹配方式,系统通过挖掘历史求职数据中的隐藏关联规律,能够发现"掌握Python的求职者往往也对D…

作者头像 李华
网站建设 2026/8/23 10:04:02

人工变量法第二次迭代详解:从单纯形表到最优解判定

1. 项目概述:从“硬凑”到“真解”的人工变量法实战在运筹学的线性规划求解里,单纯形法是个核心工具,但它的启动有个前提:你得先找到一个“初始基本可行解”。这就像开车,你得先打着火。可现实中的很多线性规划模型&am…

作者头像 李华
网站建设 2026/8/23 10:01:51

在SUN 7149A CRT显示器上播放《九龙珠》:高行频驱动与信号配置实践

在实际硬件爱好者和复古计算圈子里,CRT显示器因其独特的显示特性,如无延迟的响应、深邃的黑色和独特的扫描线效果,至今仍被用于怀旧游戏、动画播放等场景。标题中提到的“SUN 7149A”是一款专业级图形工作站显示器,搭载了著名的三…

作者头像 李华