admin管理员组文章数量:1567042
git:GitHub - gzu-liyujiang/Android_CN_OAID: 安卓设备唯一标识解决方案,可完全替代移动安全联盟统一 SDK 闭源方案。包括国内手机厂商的开放匿名标识(OAID)、海外手机平台的安卓广告标识(AAID),另外也提供了 IMEI/MEID、AndroidID、WidevineID、PseudoID、GUID 等常见的设备标识的获取方法。
使用
全局build.gradle中
allprojects {
repositories {
maven { url 'https://www.jitpack.io' }
}
}
app build.gradle中
api 'com.github.gzu-liyujiang:Android_CN_OAID:4.2.4'
// 在`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,可能为空
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失败
}
});
混淆规则
-keep class repeackage.uodis.opendevice.aidl.** { *; }
-keep interface repeackage.uodis.opendevice.aidl.** { *; }
-keep class repeackage.asus.msa.SupplementaryDID.** { *; }
-keep interface repeackage.asus.msa.SupplementaryDID.** { *; }
-keep class repeackage.bun.lib.** { *; }
-keep interface repeackage.bun.lib.** { *; }
-keep class repeackage.heytap.openid.** { *; }
-keep interface repeackage.heytap.openid.** { *; }
-keep class repeackage.samsung.android.deviceidservice.** { *; }
-keep interface repeackage.samsung.android.deviceidservice.** { *; }
-keep class repeackage.zui.deviceidservice.** { *; }
-keep interface repeackage.zui.deviceidservice.** { *; }
-keep class repeackage.coolpad.deviceidsupport.** { *; }
-keep interface repeackage.coolpad.deviceidsupport.** { *; }
-keep class repeackage.android.creator.** { *; }
-keep interface repeackage.android.creator.** { *; }
支持情况
厂商或品牌 | 系统或框架 |
---|---|
华为(Huawei、Honor) | HMS Core 2.6.2+ 、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(开放匿名设备标识符)
其他手机请残照 上面网址的下方readMe
我简单封装了一下 需要可以用我封装好的
//获取安卓ID,可能为空
fun getAndroidId(context: Context): String? {
return DeviceIdentifier.getAndroidID(context);
}
//获取IMEI,只支持Android 10之前的系统,需要READ_PHONE_STATE权限,可能为空
fun getImei(context: Context): String {
return DeviceIdentifier.getIMEI(context);
}
/**
* 获取设备唯一ID
*/
fun getUniqueDeviceId(context: Context): String {
//oaid
val supportedOAID = DeviceID.supportedOAID(context);
if(supportedOAID){
// 获取OAID/AAID,同步调用
val oaid = DeviceIdentifier.getOAID(context);
return oaid
}
//android Id
val androidId = getAndroidId(context);
if (!TextUtils.isEmpty(androidId)) {
return androidId!!;
}
// 获取数字版权管理ID,可能为空
val widevineID = DeviceIdentifier.getWidevineID();
if (!TextUtils.isEmpty(widevineID)) {
return widevineID!!;
}
// 获取伪造ID,根据硬件信息生成,不会为空,有大概率会重复
val pseudoID = DeviceIdentifier.getPseudoID();
if (!TextUtils.isEmpty(pseudoID)) {
return pseudoID!!;
}
//串号
val imei = getImei(context)
if (!TextUtils.isEmpty(imei)) {
return imei;
}
return "";
}
// 获取GUID,随机生成,不会为空 不会重复
private fun getGuid(context: Context): String? {
val guid = DeviceIdentifier.getGUID(context);
return guid
}
// 获取UUID,随机生成,不会为空 不会重复
private fun getUUID(context: Context): String {
val uniqueID: String = UUID.randomUUID().toString()
return uniqueID
}
版权声明:本文标题:Android 获取唯一Id 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1726326768a1065888.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论