Android 获取唯一Id
Posted 安果移不动
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 获取唯一Id相关的知识,希望对你有一定的参考价值。
使用
全局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.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.** *;
-keep class repeackage.com.coolpad.deviceidsupport.** *;
-keep interface repeackage.com.coolpad.deviceidsupport.** *;
-keep class repeackage.com.android.creator.** *;
-keep interface repeackage.com.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的主要内容,如果未能解决你的问题,请参考以下文章