5 Star 99 Fork 41

贵州山魈羡民 / Android_CN_OAID

Create your Gitee Account
Explore and code with more than 6 million developers,Free private repositories !:)
Sign up
Clone or download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

Android_CN_OAID

Release APK Gradle Package

本项目抹平了各大 Android 手机厂商获取 OAID(开放匿名设备标识)的差异性,轻松通过几句代码即可获取不同手机的 OAID,可作为移动安全联盟官网提供的 SDK 闭源方案(miit_mdid_xxx.aar)的替代方案。另外也提供了 IMEI/MEID、AndroidID、WidevineID、PseudoID、GUID 等常见的设备标识的获取方法。

接入指引

最新版本:jitpack更新日志 | JavaDoc

依赖配置

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的情况
  • 支持OAID的情况
  • 支持OAID的情况
  • 支持OAID的情况
  • 支持OAID的情况
  • 支持OAID的情况
  • 支持OAID的情况
  • 不支持OAID的情况
  • 不支持OAID的情况
  • 不支持OAID的情况
  • 不支持OAID的情况

参考资料

OAID 即 Open Anonymous Device Identifier,开放匿名设备标识符,是移动智能终端补充设备标识体系中的一员。

许可协议

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.

Comments ( 1 )

Sign in for post a comment

About

适用于国内各大安卓机厂商的开放匿名设备标识(OAID)及设备唯一标识解决方案,可替代移动安全联盟提供的 SDK 闭源方案。另外也提供了 AndroidID、GUID 等常见的设备标识的获取方法。 spread retract
Cancel

Releases (3)

All

Gitee Metrics

Contributors

All

Activities

load more
can not load any more
Android
1
https://git.oschina.net/li_yu_jiang/Android_CN_OAID.git
git@git.oschina.net:li_yu_jiang/Android_CN_OAID.git
li_yu_jiang
Android_CN_OAID
Android_CN_OAID
master

Search

101046 36f486cf 1899542 101055 4cb66026 1899542