← 返回主题列表
✨步子哥
@steper · 2026年03月17日 05:49 · 8浏览

Android(及海外手机)设备的「唯一用户/设备标识」(Unique Device Identifier / OAID / AAID 等)

XUID 这里指的就是 Android(及海外手机)设备的「唯一用户/设备标识」(Unique Device Identifier / OAID / AAID 等),用于用户追踪、反作弊、防刷、广告归因等场景。

目前(2026 年 3 月)国内开发者最主流、最推荐的完整开源替代方案就是:

首推:Android_CN_OAID(GitHub 最活跃项目)

  • 仓库:https://github.com/gzu-liyujiang/Android_CN_OAID (Gitee 镜像同名)
  • 许可证:Mulan PSL v2(完全开源、可商用、可修改)
  • 核心定位:专门替代移动安全联盟(MSA)统一 SDK(那个 miit_mdid_xxx.aar 是闭源的,企业才能用)。个人开发者、独立 APP 直接用这个就行。
  • 支持内容(一套完整解决方案):
  • OAID(国内厂商开放匿名设备标识)—— 主流方案
  • AAID(Google Advertising ID,海外手机)
  • 其他常见 ID:IMEI/MEID、AndroidID、PseudoID、GUID(全局唯一随机 ID)
  • 已弃用 WidevineID(避免闪退)
支持的国内厂商(覆盖 95%+ 市场):
  • 华为 / 荣耀(HMS / MagicOS)
  • 小米 / Redmi / 黑鲨(MIUI)
  • vivo / iQOO(OriginOS / Funtouch OS)
  • OPPO / Realme(ColorOS)
  • 三星、联想、魅族、一加、努比亚、酷派、酷赛、卓易 等
  • 其他海外机型走 AAID(GMS)
最新状态(2026 年 3 月):
  • 最新版本 ≈ 4.2.16(2025 年 11 月更新)
  • 持续维护中(最近 4 个月还有 release),支持 Android 5.0+ 到最新版本
  • Stars 很高,Issues 响应快
集成超级简单(Gradle):
// 1. 添加仓库
repositories {
    maven { url 'https://jitpack.io' }
    maven { url 'https://developer.huawei.com/repo' }
    maven { url 'https://developer.hihonor.com/repo' }
}

// 2. 添加依赖
implementation 'com.github.gzu-liyujiang:Android_CN_OAID:4.2.16'  // 最新版
runtimeOnly "com.huawei.hms:ads-identifier:3.4.62.300"
runtimeOnly "com.hihonor.mcs:ads-identifier:1.0.2.301"

使用示例(Application.onCreate 中初始化):

// 初始化(必须在用户同意隐私政策后)
DeviceIdentifier.register(this)

// 同步获取 OAID(最常用)
val oaid = DeviceIdentifier.getOAID(this)

// 异步获取(推荐,防止主线程卡顿)
DeviceID.getOAID(this, object : IGetter {
    override fun onOAIDGetComplete(result: String) { ... }
    override fun onOAIDGetError(error: Exception) { ... }
})

其他标识获取

DeviceIdentifier.getAndroidID(this)
DeviceIdentifier.getGUID(this)  // 纯随机全局唯一
DeviceIdentifier.getIMEI(this)  // 需要 READ_PHONE_STATE 权限(可移除)

隐私合规提醒(必须遵守):

  • 初始化前必须让用户同意隐私政策
  • 不需要 IMEI/GUID 时,可在 AndroidManifest.xml 移除权限:
  <uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" />
  
  • 完全符合 Google / 国内隐私法规(最小必要原则)

其他补充开源方案(按场景推荐)

如果你不需要厂商 OAID,只想最简单持久化 ID:

方案复杂度优点缺点推荐场景
自定义 GUID + SharedPreferences/Keystore极简应用卸载后仍可恢复(配合外部存储)非硬件级,刷机/清数据会变普通用户追踪
Firebase Installations ID (FID)官方Google 推荐,合规需要 Firebase SDKGoogle Play 上架
Advertising ID (AAID)中等官方广告 ID,可重置需要 Google Play 服务海外广告归因

总结推荐

  • 国内手机 + 个人开发者直接上 Android_CN_OAID(就是你想要的「一套开源解决方案」)
  • 纯海外 / Google Play → 用 Google Advertising ID 或 Firebase FID
  • 跨 Android + iOS → Android 用上面库,iOS 用 IDFA(需 ATT 授权)+ 自己服务端生成统一 XUID

👍 1
💬 讨论回复 (1)
✨步子哥 #1 2026-03-17 05:50

Android(以及其他手机设备)上用于唯一标识用户/设备实例的一套开源解决方案,常被称作 XUID(可能是某个项目或团队内部的叫法,类似“cross-user/device ID”或自定义唯一ID)。

2026 年 Android 生态下,获取稳定、持久、合规的唯一标识已非常严格(隐私政策、Google Play 规则、厂商限制)。以下是目前主流且开源的可行方案对比,按场景推荐:

方案开源稳定性(重装App后)跨App共享需要权限推荐场景主要实现库/方式备注(2026现状)
Firebase Installation ID (FID)是(Google 官方)高(安装期内稳定)否(每个App独立)大多数非广告场景(登录态、用户偏好同步、防刷等)Firebase SDK 中的 FirebaseInstallations.getInstance()Google 官方最推荐,非广告用例首选
自生成 UUID + 内部存储中(卸载重装丢失)简单App实例标识UUID.randomUUID().toString() + SharedPreferences / EncryptedSharedPreferences最简单,合规,Google 文档推荐备用方案
FingerprintJS Android高(设备指纹)无(基本信号)需要较高唯一性、防作弊、风控https://github.com/fingerprintjs/fingerprintjs-androidMIT 许可,Kotlin 编写,收集硬件/系统信号生成稳定指纹
TrustDevice-Android很高(多信号+算法)少量可选风控、反欺诈、设备唯一性要求高https://github.com/trustdecision/trustdevice-android轻量级开源设备指纹,号称稳定设备ID
Android_CN_OAID(国内特化)高(OAID/AAID)部分(厂商支持)无(OAID接口)中国市场、广告/统计需OAIDhttps://github.com/gzu-liyujiang/Android_CN_OAID替代 MSA 闭源 SDK,支持华为/小米/OPPO/vivo 等厂商 OAID + AAID
devEyosiyas/AndroidID高(DRM-based)追求无权限设备唯一IDhttps://github.com/devEyosiyas/AndroidID使用 Widevine DRM API 生成稳定ID
传统 ANDROID_ID (SSAID)系统API中高同签名App可共享旧项目兼容Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID)Android 8+ 按签名+用户隔离,不建议新项目首选

2026 年最实用推荐组合(XUID 风格解决方案)

1. 首推:Firebase Installation ID(最合规、最稳定)

  • Google 官方强烈推荐用于“标识应用实例”。
  • 自动处理重置、备份等。
  • 集成简单:
     // build.gradle
     implementation("com.google.firebase:firebase-installations:18.x.x")  // 最新版

     // 使用
     FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
         if (task.isSuccessful) {
             val fid = task.result  // 这就是你的 XUID / 设备实例唯一ID
             // 存储或上传到后端与用户账号绑定
         }
     }
     
  • 缺点:依赖 Google Play Services(GMS),鸿蒙/无GMS 设备不可用。
2. 国内市场 + 无 GMS 环境:Android_CN_OAID
  • 专门为中国厂商适配 OAID(开放匿名设备标识)。
  • 支持 fallback 到 AndroidID / GUID / WidevineID 等。
  • 仓库活跃,个人开发者友好(MSA 官方 SDK 企业才能用)。
  • 集成后可得到 OAID/VAID/AAID,根据需求选。
3. 高唯一性需求(防多开、刷量、模拟器)→ 指纹方案
  • FingerprintJS Android 或 TrustDevice-Android。
  • 生成类似 visitorId 的字符串,基于 CPU、屏幕、字体、传感器等 20+ 信号。
  • 即使卸载重装,同一物理设备大概率相同(80-95%+ 准确率)。
  • 完全开源、无后门。
4. 极简自实现 XUID(无任何依赖)
   object XUID {
       private const val PREF_KEY = "xuid"

       fun getOrCreate(context: Context): String {
           val prefs = context.getSharedPreferences("secure_prefs", Context.MODE_PRIVATE)
           var id = prefs.getString(PREF_KEY, null)
           if (id.isNullOrBlank()) {
               id = UUID.randomUUID().toString()
               prefs.edit().putString(PREF_KEY, id).apply()
           }
           return id!!
       }
   }
   
  • 再结合 ANDROID_ID 或 Build.FINGERPRINT 做 salt,进一步提升区分度。

暂无表态
推荐

🌟 智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

🎁 领取 2000万 Tokens