← 资料库索引 ← 开源项目 原始链接 ↗ 🔍
开源项目

Android_CN_OAID:安卓设备唯一标识解决方案(可替代 MSA 统一 SDK) 原文标题:gzu-liyujiang/Android_CN_OAID — 安卓设备唯一标识解决方案,可替代移动安全联盟(MSA)统一 SDK 闭源方案。包括国内手机厂商的开放匿名标识(OAID)、海外手机平台的安卓广告标识(AAID),另外也提供了 IMEI/MEID、AndroidID、WidevineID、PseudoID、GUID 等常见的设备标识的获取方法。

发表时间:2020-05-29采集时间:2026-10-09 14:49:24来源:github.com原文语言:zh状态:完整

内容概要总结

Android_CN_OAID 是一个用 Java 编写的开源 Android 设备唯一标识解决方案(Mulan PSL v2 许可),可作为移动安全联盟(MSA)统一 SDK(miit_mdid_xxx.aar)的替代品,主要面向没有资格使用 MSA SDK 的个人开发者。它提供国内各厂商 OAID(开放匿名设备标识)与海外 AAID(安卓广告标识)的统一获取接口,并附带 IMEI/MEID、AndroidID、WidevineID、PseudoID、GUID、画布指纹等常见标识的获取方法。

仓库给出了 Gradle 依赖配置、混淆规则、各厂商支持情况表(华为、荣耀、小米、vivo、OPPO、三星、联想等)与效果截图。作者声明代码为原创,基于北京数字联盟公开代码(Get_Oaid_CNAdid)并结合厂商公开或未公开接口加工,并提到 2tu/msa 因版权问题被 MSA 举报(DMCA 2023-09-21)。截至抓取时仓库约 2874 star、468 fork,仍在维护(未归档)。

原文内容(原文即中文)

You signed in with another tab or window. Reload to refresh your session.
You signed out in another tab or window. Reload to refresh your session.
You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert

Latest commit

History

Folders and files

NameName

Repository files navigation

Android_CN_OAID

安卓设备唯一标识解决方案,可作为移动安全联盟统一 SDK (miit_mdid_xxx.aar)的替代方案。
注意,这个项目的初衷主要是针对个人开发者的APP,个人开发者没资格使用 MSA 的 SDK,企业的APP应该去申请使用 MSA 的 SDK。
本项目提供了国内各大手机厂商获取 OAID(开放匿名设备标识)及海外手机平台获取 AAID(安卓广告标识)的便携接口,
另外也提供了 IMEI/MEID、AndroidID、PseudoID、GUID 等常见的设备标识的获取方法。

震惊:从没想过之前的参考资料之一 https://github.com/2tu/msa 会被 MSA 举报,作为行业技术标准还兴搞技术垄断,要传播使用 MSA 的 SDK 真是一言难尽啊,参见 https://github.com/github/dmca/blob/master/2023/09/2023-09-21-msa.md 。

声明:本库虽然曾经逆向分析过 MSA 的 SDK ,但代码完全是原创的,是基于北京数字联盟公开的代码并结合第三方厂商公开或未公开的接口进行加工的,和 MSA 的 SDK 没有直接联系,不存在 2tu/msa 之类的侵权问题。根据北京数字联盟的声明,“……标准法的第二十二条规定:……禁止利用标准实施妨碍商品、服务自由流通等排除、限制市场竞争的行为。作为商用 ID 服务商,良性竞争能够让我们的产品变得更好……”,详见请问该库商用有法律风险吗?

GitHub:https://github.com/gzu-liyujiang/Android_CN_OAID

码云(GitEE):https://gitee.com/li_yu_jiang/Android_CN_OAID

Demo:https://github.com/gzu-liyujiang/Android_CN_OAID/blob/master/demo.apk

接入指引

最新版本:
(更新日志 | JavaDoc)

依赖配置

如果你的项目 Gradle 配置是在 7.0 以下,需要在 build.gradle 文件中加入:

allprojects {
 repositories {
 // JitPack 远程仓库
 maven { url 'https://jitpack.io' }
 // 华为官方[广告标识服务](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/identifier-service-version-change-history-0000001050066927)SDK
 maven { url 'https://developer.huawei.com/repo' }
 // 荣耀官方广告标识服务SDK
 maven { url 'https://developer.hihonor.com/repo' }
 }
}

如果你的 Gradle 配置是 7.0 及以上,可能需要在 settings.gradle 文件中加入:

dependencyResolutionManagement {
 repositories {
 // JitPack 远程仓库
 maven { url 'https://jitpack.io' }
 // 华为官方广告标识服务SDK
 maven { url 'https://developer.huawei.com/repo' }
 // 荣耀官方广告标识服务SDK
 maven { url 'https://developer.hihonor.com/repo' }
 }
}

然后直接使用如下依赖即可:

dependencies {
 implementation 'com[.github](https://github.com/gzu-liyujiang/Android_CN_OAID/tree/master/.github).gzu-liyujiang:Android_CN_OAID:最新版本号'
 runtimeOnly "com.huawei.hms:ads-identifier:3.4.62.300"
 runtimeOnly "com.hihonor.mcs:ads-identifier:1.0.2.301"
}

除了依赖从 Github 拉取代码构建的包外,也可以依赖从码云构建的包:

dependencies {
 implementation 'com.gitee.li_yu_jiang:Android_CN_OAID:最新版本号'
 runtimeOnly "com.huawei.hms:ads-identifier:3.4.62.300"
 runtimeOnly "com.hihonor.mcs:ads-identifier:1.0.2.301"
}

注意事项

  • 4.2.5.1 版本以后直接使用了华为官方广告标识服务SDK,与移动安全联盟 SDK 共存 的话可参考如下配置(PS:暂时没太多经历逆向华为的SDK重构包名来共存):
dependencies {
 implementation('com.github.gzu-liyujiang:Android_CN_OAID:最新版本号') {
 // 如果使用了较新版本的移动安全联盟SDK,共存的话可能需要排除掉本项目依赖的华为官方广告标识服务SDK,因为移动安全联盟SDK也依赖了华为的SDK
 //exclude group: 'com.huawei.hms', module: 'ads-identifier'
 // 荣耀官方广告标识服务SDK同理: 
 //exclude group: 'com.hihonor.mcs', module: 'ads-identifier'
 }
}
 // 如果华为官方广告标识服务SDK下载失败或编译报错的话,可考虑在 build.gradle 中增加以下配置:
 // repositories { maven { url 'https://developer.huawei.com/repo' } }
 // runtimeOnly "com.huawei.hms:ads-identifier:3.4.62.300"
 // 荣耀官方广告标识服务SDK同理: 
 // repositories { maven { url 'https://developer.hihonor.com/repo' } }
 // runtimeOnly "com.hihonor.mcs:ads-identifier:1.0.2.301"
  • 自 4.1.1 开始默认加入了 READ_PHONE_STATE、WRITE_SETTINGS及WRITE_EXTERNAL_STORAGE 权限以便适配低版本安卓系统。
  • 为遵循最小必要原则保护用户隐私,若项目中没用到 IMEI 及 GUID,那么可酌情在 AndroidManifest.xml 中加入如下代码移除相关权限:
<manifest>
 <uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" />
 <uses-permission android:name="android.permission.WRITE_SETTINGS" tools:node="remove" />
</manifest>
  • 本库 4.1.1 至 4.1.3 之间的版本 ,若 Gradle 插件未指定 targetSdkVersion 29+,在 Android11+ 设备上可能会导致无法动态申请读写权限问题,参阅 在权限里面加 maxSdkVersion 的用意 。

代码示例

获取多个可能的设备标识,结合服务端引入拜占庭容错方案得到可靠的稳定的设备唯一标识:

  • 第一步(可选的,用于调用 getClientId() 预取 OAID ):
// 在`Application#onCreate`里初始化,注意APP合规性,若最终用户未同意隐私政策则不要调用
 @Override
 public void onCreate() {
 super.onCreate();
 if (privacyPolicyAgreed) {
 DeviceIdentifier.register(this);
 }
 }
// 获取IMEI,只支持Android 10之前的系统,需要READ_PHONE_STATE权限,可能为空
 DeviceIdentifier.getIMEI(this);
 // 获取安卓ID,可能为空
 DeviceIdentifier.getAndroidID(this);
 // 获取数字版权管理ID,可能为空。很鸡肋,在某些手机上还可能造成卡死或闪退,自4.2.7版本后已弃用
 DeviceIdentifier.getWidevineID();
 // 获取伪造ID,根据硬件信息生成,不会为空,有大概率会重复
 DeviceIdentifier.getPseudoID();
 // 获取GUID,随机生成,不会为空
 DeviceIdentifier.getGUID(this);
 // 是否支持OAID或AAID
 DeviceID.supportedOAID(this);
 // 获取OAID或AAID,同步调用
 DeviceIdentifier.getOAID(this);
 // 获取OAID或AAID,异步回调
 DeviceID.getOAID(this, new IGetter() {
 @Override
 public void onOAIDGetComplete(String result) {
 // 不同厂商的OAID/AAID格式是不一样的,可进行MD5、SHA1之类的哈希运算统一
 }
 @Override
 public void onOAIDGetError(Exception error) {
 // 获取OAID/AAID失败
 }
 });
 // 异步获取手机厂商专有的广告标识符,异步回调
 DeviceID.getByManufacturer(this, new IGetter() { ... });
 // 异步获取移动安全联盟通用的广告标识符,异步回调
 DeviceID.getByMsa(this, new IGetter() { ... });
 // 获取谷歌商店服务通用的广告标识符,异步回调
 DeviceID.getByGms(this, new IGetter() { ... });
 // 获取画布指纹
 DeviceIdentifier.getCanvasFingerprint();

混淆规则

本库自带consumer-rules.pro如下混淆规则,不混淆厂商的相关接口及类。若通过远程依赖的方式引用,则无需进行额外配置:

# 本库模块专用的混淆规则(注:“repeackage”拼写是历史遗留问题)
-keep class repeackage.com.uodis.opendevice.[aidl](https://github.com/gzu-liyujiang/Android_CN_OAID/tree/master/aidl).** { *; }
-keep interface repeackage.com.uodis.opendevice.aidl.** { *; }
-keep class repeackage.com.asus.msa.SupplementaryDID.** { *; }
-keep interface repeackage.com.asus.msa.SupplementaryDID.** { *; }
-keep class repeackage.com.bun.lib.** { *; }
-keep interface repeackage.com.bun.lib.** { *; }
-keep class repeackage.com.heytap.openid.** { *; }
-keep interface repeackage.com.heytap.openid.** { *; }
-keep class repeackage.com.samsung.android.[deviceid](https://github.com/topics/deviceid)service.** { *; }
-keep interface repeackage.com.samsung.android.deviceidservice.** { *; }
-keep class repeackage.com.zui.deviceidservice.** { *; }
-keep interface repeackage.com.zui.deviceidservice.** { *; }
-keep class repeackage.com.coolpad.deviceidsupport.** { *; }
-keep interface repeackage.com.coolpad.deviceidsupport.** { *; }
-keep class repeackage.com.android.creator.** { *; }
-keep interface repeackage.com.android.creator.** { *; }
-keep class repeackage.com.google.android.gms.ads.identifier.internal.** { *; }
-keep interface repeackage.com.google.android.gms.ads.identifier.internal.* { *; }
-keep class repeackage.com.oplus.stdid.** {*; }
-keep interface repeackage.com.oplus.stdid.** {*; }
-keep class com.huawei.hms.ads.** {*; }
-keep interface com.huawei.hms.ads.** {*; }
-keep class com.hihonor.ads.** {*; }
-keep interface com.hihonor.ads.** {*; }
-keep class repeackage.com.qiku.id.** { *; }
-keep interface repeackage.com.qiku.id.** { *; }

支持情况

厂商或品牌系统或框架
华为(Huawei)HMS Core 2.6.2+、Google Play Service 4.0+
荣耀(Honor)Magic UI 4/5/6、MagicOS 7.0+、Google Play Service 4.0+
小米(XiaoMi、Redmi、BlackShark)MIUI 10.2+、Google Play Service 4.0+
维沃(VIVO、IQOO)Funtouch OS 9+、OriginOS 1.0+、Google Play Service 4.0+
欧珀(OPPO、Realme)ColorOS 7.0+、Google Play Service 4.0+
三星(Samsung)Android 10+、Google Play Service 4.0+
联想(Lenovo)ZUI 11.4+、Google Play Service 4.0+
华硕(ASUS)Android 10+、Google Play Service 4.0+
魅族(Meizu)Android 10+、Google Play Service 4.0+
一加(OnePlus)Android 10+、Google Play Service 4.0+
努比亚(Nubia)Android 10+、Google Play Service 4.0+
酷派(Coolpad)CoolOS、Google Play Service 4.0+
酷赛(Coosea )Android 10+、Google Play Service 4.0+
卓易(Droi )Freeme OS、Google Play Service 4.0+
其他(ZTE、HTC、Motorola、……)SSUI、Google Play Service 4.0+

注:本项目的 OAID 获取接口主要参考北京数字联盟公开的代码以及逆向分析参考移动安全联盟的 SDK、HUAWEI Ads SDK、小米 DeviceId.jar、Google Play Services SDK 等。

效果预览

OAID(开放匿名设备标识符)

  • 华为手机
huawei
huawei
  • 荣耀手机
hono
hono
  • 小米手机
xiaomi
xiaomi
  • 红米手机
redmi
redmi
  • 黑鲨手机
blackshark
blackshark
  • 维沃手机
vivo_iqoo
vivo_iqoo
  • 欧珀手机
oppo
oppo
  • 真我手机
realm
realm
  • 三星手机
samsung
samsung
  • 魅族手机
meizu
meizu
  • 联想手机
lenovo
lenovo
  • 一加手机
oneplus
oneplus
  • 华硕手机
asus
asus

AAID(安卓广告标识符)

  • 谷歌手机
google
google
  • 中兴手机
zte
zte
  • 摩托罗拉
motorola
motorola
  • 索尼手机
sony
sony
  • 诺基亚机
nokia
nokia
  • HTC 手机
htc
htc
  • LG 手机
lge
lge

不支持 OAID 或 AAID

disabled
disabled
  • 以下厂商或品牌手机截止2021年8月26日已验证尚不支持:
nonsupport
nonsupport
锤子(Smartisan)、360(360)、奇酷(QiKu)、海信(Hisense)、金立(Gionee)、
美图(Meitu)、糖果(SOAP)、格力(Gree)、朵唯(Doov)、优思(Uniscope)、
夏普(SHARP)、乐视(LeTV)、维图(VOTO)、宏碁(Acer)、TCL(TCL)、……

参考资料

OAID 是移动智能终端补充设备标识体系中的一员,官方定义为 Open Anonymous Device Identifier(开放匿名设备标识符),
华为称之为 Open Advertising ID (开放广告标识符),谷歌称之为 Android Advertising ID (安卓广告标识符)。

  • 北京数字联盟公开的获取各厂商 OAID 的代码:Get_Oaid_CNAdid。

远程真机

  • 新人试用 腾讯 WeTest 云真机调试、阿里 EMAS 移动测试远程真机、百度 MTC 远程真机调试、Testin 远程真机测试、AllTesting 真机测试 。

许可协议

批评一下:有些小伙伴将本项目封装成UniApp的收费插件进行盈利性目的,不注明或告知用户是基于【开源、免费】的Android_CN_OAID二次开发的,违背了本项目【免费、普惠】的初衷,有点不厚道。

Copyright (c) 2016-present. gzu-liyujiang<1032694760@qq.com> and All Contributors.
The software is licensed under the Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
PURPOSE.
See the Mulan PSL v2 for more details.

About

安卓设备唯一标识解决方案,可替代移动安全联盟(MSA)统一 SDK 闭源方案。包括国内手机厂商的开放匿名标识(OAID)、海外手机平台的安卓广告标识(AAID),另外也提供了 IMEI/MEID、AndroidID、WidevineID、PseudoID、GUID 等常见的设备标识的获取方法。

gzu-liyujiang.github.io/Android_CN_OAID/

Topics

aaidandroididdeviceidguidimeiimsimeidmiitmsaoaidudiduniqueidutdiduuidwidevine

Resources

Stars

Watchers

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

You can’t perform that action at this time.

文中图片(共 1 张)

原页未提供可定位位置的图片,按原页顺序附于文末;点击任意图片放大,再次点击或按 Esc 关闭。
huawei
(原页此图无独立图注)
放大预览