同步操作将从 山野羡民/Android_CN_OAID 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
本项目抹平了各大 Android 手机厂商获取 OAID(开放匿名设备标识)的差异性,轻松通过几句代码即可获取不同手机的 OAID,可作为移动安全联盟官网提供的 SDK 闭源方案(miit_mdid_xxx.aar)的替代方案。另外也提供了 IMEI/MEID、AndroidID、WidevineID、PseudoID、GUID 等常见的设备标识的获取方法。
allprojects {
repositories {
maven { url 'https://www.jitpack.io' }
}
}
4.0.0 版本以后重新调整了与移动安全联盟 SDK 共存的方案 ,直接使用如下依赖即可:
dependencies {
implementation 'com.github.gzu-liyujiang:Android_CN_OAID:4.0.0'
}
对于 4.0.0 以前的版本 ,若项目中直接或间接地使用了移动安全联盟的 SDK,则可能需要取消相关有冲突的依赖项:
dependencies {
implementation 'com.github.gzu-liyujiang.Android_CN_OAID:OAID_IMPL:3.0.3' //具体实现,必须
implementation 'com.github.gzu-liyujiang.Android_CN_OAID:OAID_ASUS:3.0.3' //华硕,有冲突时请注释掉
implementation 'com.github.gzu-liyujiang.Android_CN_OAID:OAID_BUN:3.0.3' //中兴、卓易,有冲突时请注释掉
implementation 'com.github.gzu-liyujiang.Android_CN_OAID:OAID_HEYTAP:3.0.3' //欧珀、一加,有冲突时请注释掉
implementation 'com.github.gzu-liyujiang.Android_CN_OAID:OAID_SAMSUNG:3.0.3' //三星,有冲突时请注释掉
implementation 'com.github.gzu-liyujiang.Android_CN_OAID:OAID_ZUI:3.0.3' //联想、摩托罗拉,有冲突时请注释掉
}
获取多个可能的设备标识,结合服务端引入拜占庭容错方案得到可靠的稳定的设备唯一标识:
final StringBuilder builder = new StringBuilder();
builder.append("UniqueID: ");
// 获取设备唯一标识,只支持Android 10之前的系统,需要READ_PHONE_STATE权限,可能为空
String uniqueID = DeviceID.getUniqueID(this);
if (TextUtils.isEmpty(uniqueID)) {
builder.append("DID/IMEI/MEID获取失败");
} else {
builder.append(uniqueID);
}
builder.append("\n");
builder.append("AndroidID: ");
// 获取安卓ID,可能为空
String androidID = DeviceID.getAndroidID(this);
if (TextUtils.isEmpty(androidID)) {
builder.append("AndroidID获取失败");
} else {
builder.append(androidID);
}
builder.append("\n");
builder.append("WidevineID: ");
// 获取数字版权管理ID,可能为空
String widevineID = DeviceID.getWidevineID(this);
if (TextUtils.isEmpty(widevineID)) {
builder.append("WidevineID获取失败");
} else {
builder.append(widevineID);
}
builder.append("\n");
builder.append("PseudoID: ");
// 获取伪造ID,根据硬件信息生成,不会为空,有大概率会重复
builder.append(DeviceID.getPseudoID());
builder.append("\n");
builder.append("GUID: ");
// 获取GUID,随机生成,不会为空
builder.append(DeviceID.getGUID(this));
builder.append("\n");
// 是否支持OAID
builder.append("supportedOAID:").append(DeviceID.supportedOAID(this));
builder.append("\n");
// 获取OAID,异步回调
DeviceID.getOAID(this, new IGetter() {
@Override
public void onOAIDGetComplete(@NonNull String result) {
// 不同厂商的OAID格式是不一样的,可进行MD5、SHA1之类的哈希运算统一
builder.append("OAID: ").append(result);
tvDeviceIdResult.setText(builder);
}
@Override
public void onOAIDGetError(@NonNull Throwable error) {
// 获取OAID失败
builder.append("OAID: 失败,").append(error);
tvDeviceIdResult.setText(builder);
}
});
// 在 Application#onCreate 里调用预取
DeviceID.register(this);
// 在需要用到设备标识的地方获取
// 客户端标识原始值:DeviceID.getClientId()
// 客户端标识统一格式为MD5:DeviceID.getClientIdMD5()
// 客户端标识统一格式为SHA1:DeviceID.getClientIdSHA1()
// 开放匿名设备标识原始值:DeviceID.getOAID()
tvDeviceIdResult.setText(String.format("ClientID: %s", DeviceID.getClientIdMD5()));
本库自带consumer-rules.pro
如下混淆规则,不混淆厂商的相关接口及类。若通过远程依赖的方式引用,则无需进行额外配置:
-keep class repeackage.com.uodis.opendevice.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.deviceidservice.** { *; }
-keep interface repeackage.com.samsung.android.deviceidservice.** { *; }
-keep class repeackage.com.zui.deviceidservice.** { *; }
-keep interface repeackage.com.zui.deviceidservice.** { *; }
厂商 | 版本 |
---|---|
小米(Xiaomi,Redmi) | MIUI 10.2 及以上 |
黑鲨(BlackShark) | MIUI 10.2 及以上 |
维沃(VIVO,IQOO) | Funtouch OS 9 及以上,Origin OS |
华为(Huawei,Honor) | HMS 2.6.2 及以上 |
欧珀(OPPO,Realme) | Color OS 7.0 及以上 |
联想(Lenovo) | ZUI 11.4 及以上 |
摩托罗拉(Motorola) | ZUI 11.4 及以上 |
华硕(ASUS) | Android 10 及以上 |
魅族(Meizu) | Android 10 及以上 |
三星(Samsung) | Android 10 及以上 |
努比亚(Nubia) | Android 10 及以上 |
一加(OnePlus) | Android 10 及以上 |
中兴(ZTE) | Android 10 及以上 |
卓易(FreemeOS) | Android 10 及以上 |
注:本项目的 OAID 获取接口主要参考北京数字联盟公开的代码并逆向分析参考移动安全联盟的 SDK,酷派、乐视、锤子、360 等厂商截止目前(2021.04.14)并未见到移动安全联盟有支持,也未查阅到厂商相关公开资料,只能生成 GUID 代替。
OAID 是移动智能终端补充设备标识体系中的一员,官方定义为 Open Anonymous Device Identifier(开放匿名设备标识符),华为称之为 Open Advertising ID (开放广告标识符)。
Copyright (c) 2019-2021 gzu-liyujiang <1032694760@qq.com>
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.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。