Skip to content

Commit

Permalink
- 增加对酷派(CoolOS)、酷赛(Prize)、卓易(Freeme)的支持,参阅 [Issues#31](https://github…
Browse files Browse the repository at this point in the history
….com/gzu-liyujiang/Android_CN_OAID/issues/31); - 提取备份 [手机厂商开放匿名设备标识符获取接口(AIDL)](https://github.com/gzu-liyujiang/Android_CN_OAID/tree/master/aidl) ;
  • Loading branch information
liyujiang-gzu committed Aug 26, 2021
1 parent 1ee3698 commit 7bbed79
Show file tree
Hide file tree
Showing 27 changed files with 1,268 additions and 101 deletions.
11 changes: 9 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
# 更新日志

## 4.2.2 - 2021/08/26

- 增加对酷派(CoolOS)、酷赛(Prize)、卓易(Freeme)的支持,参阅 [Issues#31](https://github.com/gzu-liyujiang/Android_CN_OAID/issues/31)
- 提取备份 [手机厂商开放匿名设备标识符获取接口(AIDL)](https://github.com/gzu-liyujiang/Android_CN_OAID/tree/master/aidl)

## 4.2.1 - 2021/06/30

- [issues#30](https://github.com/gzu-liyujiang/Android_CN_OAID/issues/30) NoSuchMethodError: No virtual method getMeid();
- [issues#30](https://github.com/gzu-liyujiang/Android_CN_OAID/issues/30) NoSuchMethodError: No
virtual method getMeid();

## 4.2.0 - 2021/06/29

- 移除 AndroidX annotation 库的依赖以便兼容 Support v4/v7 项目,参阅 [note_5547665](https://gitee.com/li_yu_jiang/Android_CN_OAID#note_5547665)
- 移除 AndroidX annotation 库的依赖以便兼容 Support v4/v7
项目,参阅 [note_5547665](https://gitee.com/li_yu_jiang/Android_CN_OAID#note_5547665)

## 4.1.4 - 2021/06/16

Expand Down
144 changes: 72 additions & 72 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@
![Release APK](https://github.com/gzu-liyujiang/Android_CN_OAID/workflows/Release%20APK/badge.svg)
![Gradle Package](https://github.com/gzu-liyujiang/Android_CN_OAID/workflows/Gradle%20Package/badge.svg)

安卓设备唯一标识解决方案,可作为移动安全联盟统一 SDK (miit_mdid_xxx.aar)的替代方案。本项目提供了国内各大手机厂商获取 OAID(开放匿名设备标识)及海外手机平台获取 AAID (安卓广告标识)的便携接口,另外也提供了 IMEI/MEID、AndroidID、WidevineID、PseudoID、GUID 等常见的设备标识的获取方法。
安卓设备唯一标识解决方案,可作为移动安全联盟统一 SDK (miit_mdid_xxx.aar)的替代方案。本项目提供了国内各大手机厂商获取 OAID(开放匿名设备标识)及海外手机平台获取 AAID
(安卓广告标识)的便携接口,另外也提供了 IMEI/MEID、AndroidID、WidevineID、PseudoID、GUID 等常见的设备标识的获取方法。

- GitHub:https://github.com/gzu-liyujiang/Android_CN_OAID
- 码云(GitEE):https://gitee.com/li_yu_jiang/Android_CN_OAID
- GitHub:`https://github.com/gzu-liyujiang/Android_CN_OAID`
- 码云(GitEE):`https://gitee.com/li_yu_jiang/Android_CN_OAID`

## 接入指引

最新版本:[![jitpack](https://jitpack.io/v/gzu-liyujiang/Android_CN_OAID.svg)](https://jitpack.io/#gzu-liyujiang/Android_CN_OAID)[更新日志](/CHANGELOG.md) | [JavaDoc](https://gzu-liyujiang.github.io/Android_CN_OAID/)
最新版本:[![jitpack](https://jitpack.io/v/gzu-liyujiang/Android_CN_OAID.svg)](https://jitpack.io/#gzu-liyujiang/Android_CN_OAID)
[更新日志](/CHANGELOG.md) | [JavaDoc](https://gzu-liyujiang.github.io/Android_CN_OAID/)

### 依赖配置

Expand All @@ -22,45 +24,33 @@ allprojects {
}
```

**4.0.0 版本以后重新调整了与移动安全联盟 SDK 共存的方案** ,直接使用如下依赖即可:
**4.0.0 以前的版本** 不建议再使用,请尽快升级到最新版本。**4.0.0 版本以后重新调整了与移动安全联盟 SDK 共存的方案** ,直接使用如下依赖即可:

```groovy
dependencies {
implementation 'com.github.gzu-liyujiang:Android_CN_OAID:<version>'
}
```

**对于 4.0.0 以前的版本** ,若项目中直接或间接地使用了移动安全联盟的 SDK,则可能需要取消相关有冲突的依赖项:

```groovy
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' //联想、摩托罗拉,有冲突时请注释掉
}
```

**4.1.1** 开始默认加入了 `READ_PHONE_STATE``WRITE_SETTINGS``WRITE_EXTERNAL_STORAGE` 权限以便适配低版本安卓系统。
**遵循最小必要原则**保护用户隐私,若项目中没用到 IMEI 及 GUID,那么可酌情在 `AndroidManifest.xml` 中加入如下代码移除相关权限:
**4.1.1** 开始默认加入了 `READ_PHONE_STATE``WRITE_SETTINGS``WRITE_EXTERNAL_STORAGE` 权限以便适配低版本安卓系统。 为**
遵循最小必要原则**保护用户隐私,若项目中没用到 IMEI 及 GUID,那么可酌情在 `AndroidManifest.xml` 中加入如下代码移除相关权限:

```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" />
<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 的用意](https://github.com/gzu-liyujiang/Android_CN_OAID/issues/25)
- **Gradle Plugin 4.0.0 及以下版本编译失败解决方案**,参阅 [Missing 'package' key attribute on element package](https://github.com/gzu-liyujiang/Android_CN_OAID/issues/26)
- **本库 4.1.1 至 4.1.3 之间的版本** ,若 Gradle 插件未指定 `targetSdkVersion 29+`,在 Android11+
设备上可能会导致无法动态申请读写权限问题,参阅 [在权限里面加 maxSdkVersion 的用意](https://github.com/gzu-liyujiang/Android_CN_OAID/issues/25)
- **Gradle Plugin 4.0.0 及以下版本编译失败解决方案**
,参阅 [Missing 'package' key attribute on element package](https://github.com/gzu-liyujiang/Android_CN_OAID/issues/26)

### 代码示例

Expand Down Expand Up @@ -156,75 +146,85 @@ dependencies {
-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+、Origin OS 1.0+、Google Play Service 4.0+ |
| 欧珀(OPPO、RealMe) | Color OS 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+ |
| 其他(ZTE、HTC、Motorola、……) | Freeme OS、SSUI、Google Play Service 4.0+ |
| 厂商或品牌 | 系统或框架 |
| --------------------------------- | ------------------------------------------------------- |
| 华为(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 获取接口主要参考北京数字联盟公开的代码以及逆向分析参考移动安全联盟的 SDK、HUAWEI Ads SDK、小米 DeviceId.jar、Google Play Services SDK 等。
## 效果预览

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

- 华为手机 ![](/screenshot/oaid_huawei.png)
- 荣耀手机 ![](/screenshot/oaid_honor.png)
- 小米手机 ![](/screenshot/oaid_xiaomi.png)
- 红米手机 ![](/screenshot/oaid_redmi.png)
- 黑鲨手机 ![](/screenshot/oaid_blackshark.png)
- 维沃手机 ![](/screenshot/oaid_vivo_iqoo.png)
- 欧珀手机 ![](/screenshot/oaid_oppo.png)
- 真我手机 ![](/screenshot/oaid_realme.png)
- 三星手机 ![](/screenshot/oaid_samsung.png)
- 魅族手机 ![](/screenshot/oaid_meizu.png)
- 联想手机 ![](/screenshot/oaid_lenovo.png)
- 一加手机 ![](/screenshot/oaid_oneplus.png)
- 华硕手机 ![](/screenshot/oaid_asus.png)
- 努比亚机 ![](/screenshot/oaid_nubia.png)
- 华为手机 ![huawei](/screenshot/oaid_huawei.png)
- 荣耀手机 ![hono](/screenshot/oaid_honor.png)
- 小米手机 ![xiaomi](/screenshot/oaid_xiaomi.png)
- 红米手机 ![redmi](/screenshot/oaid_redmi.png)
- 黑鲨手机 ![blackshark](/screenshot/oaid_blackshark.png)
- 维沃手机 ![vivo_iqoo](/screenshot/oaid_vivo_iqoo.png)
- 欧珀手机 ![oppo](/screenshot/oaid_oppo.png)
- 真我手机 ![realm](/screenshot/oaid_realme.png)
- 三星手机 ![samsung](/screenshot/oaid_samsung.png)
- 魅族手机 ![meizu](/screenshot/oaid_meizu.png)
- 联想手机 ![lenovo](/screenshot/oaid_lenovo.png)
- 一加手机 ![oneplus](/screenshot/oaid_oneplus.png)
- 华硕手机 ![asus](/screenshot/oaid_asus.png)
- 努比亚机 ![nubia](/screenshot/oaid_nubia.png)
- 酷派手机 `待验证`
- 酷赛手机 `待验证`
- 卓易手机 `待验证`

### AAID(安卓广告标识符)

- 谷歌手机 ![](/screenshot/aaid_google.png)
- 中兴手机 ![](/screenshot/aaid_zte.png)
- 摩托罗拉 ![](/screenshot/aaid_motorola.png)
- 索尼手机 ![](/screenshot/aaid_sony.png)
- 诺基亚机 ![](/screenshot/aaid_nokia.png)
- HTC 手机 ![](/screenshot/aaid_htc.png)
- LG 手机 ![](/screenshot/aaid_lge.png)
- 谷歌手机 ![google](/screenshot/aaid_google.png)
- 中兴手机 ![zte](/screenshot/aaid_zte.png)
- 摩托罗拉 ![motorola](/screenshot/aaid_motorola.png)
- 索尼手机 ![sony](/screenshot/aaid_sony.png)
- 诺基亚机 ![nokia](/screenshot/aaid_nokia.png)
- HTC 手机 ![htc](/screenshot/aaid_htc.png)
- LG 手机 ![lge](/screenshot/aaid_lge.png)

### 不支持 OAID 或 AAID

- 用户关闭了广告标识符

![](/screenshot/oaid_disabled.png)
![disabled](/screenshot/oaid_disabled.png)

- 以下厂商或品牌手机已验证不支持
- 以下厂商或品牌手机截止`2021年8月26日`已验证尚不支持

```text
锤子(Smartisan)、酷派(Yulong,Coolpad)、360(360)、奇酷(QiKu)、海信(Hisense)、金立(Gionee)、
美图(Meitu)、糖果(SOAP)、格力(Gree)、朵唯(Doov)、优思(Uniscope)、夏普(SHARP)、乐视(LeTV)、
维图(VOTO)、宏碁(Acer)、TCL(TCL)、……
锤子(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 是移动智能终端补充设备标识体系中的一员,官方定义为 Open Anonymous Device Identifier(开放匿名设备标识符), 华为称之为 Open Advertising ID (开放广告标识符),谷歌称之为 Android Advertising ID (安卓广告标识符)。

- [移动安全联盟统一 SDK 下载](https://github.com/2tu/msa) (from http://www.msa-alliance.cn )。
- 逆向分析还原的 [手机厂商开放匿名设备标识符获取接口(AIDL)](https://github.com/gzu-liyujiang/Android_CN_OAID/tree/master/aidl)
- [移动安全联盟统一 SDK 下载](https://github.com/2tu/msa) (from `http://www.msa-alliance.cn` )。
- 谷歌官方文档 [使用标识符的最佳做法](https://developer.android.google.cn/training/articles/user-data-ids)
- [团体标准-移动智能终端补充设备标识规范-v20190516.pdf](https://swsdl.vivo.com.cn/appstore/developer/uploadfile/20191109/uohz59/%E5%9B%A2%E4%BD%93%E6%A0%87%E5%87%86-%E7%A7%BB%E5%8A%A8%E6%99%BA%E8%83%BD%E7%BB%88%E7%AB%AF%E8%A1%A5%E5%85%85%E8%AE%BE%E5%A4%87%E6%A0%87%E8%AF%86%E8%A7%84%E8%8C%83-v20190516.pdf)
- 华为 [开放广告标识符(OAID)](https://developer.huawei.com/consumer/cn/codelab/HMSAdsOAID/index.html#0)
Expand All @@ -233,8 +233,8 @@ OAID 是移动智能终端补充设备标识体系中的一员,官方定义为
- 维沃 [移动智能终端补充设备标识服务](https://dev.vivo.com.cn/documentCenter/doc/253)
- 欧珀 [移动智能终端补充设备标识体系](https://open.oppomobile.com/wiki/doc#id=10608)
- 三星 [适配指导 | Android Q Device ID 权限变更](https://support-cn.samsung.com/App/DeveloperChina/notice/detail?noticeid=115)
- 北京数字联盟公开的获取各厂商 OAID 的简易代码[Get_Oaid_CNAdid](https://github.com/shuzilm-open-source/Get_Oaid_CNAdid)
- 获取或生成设备唯一标识后,推荐参考“[一种 Android 移动设备构造 UDID 的方案](https://github.com/No89757/Udid) ”。
- 北京数字联盟公开的获取各厂商 OAID 的代码[Get_Oaid_CNAdid](https://github.com/shuzilm-open-source/Get_Oaid_CNAdid)
- 获取或生成设备唯一标识后,推荐参考“[一种 Android 移动设备构造 UDID 的方案](https://github.com/No89757/Udid)
- StackOverFlow [Is there a unique Android device ID ?](https://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id)

## 远程真机
Expand Down
3 changes: 3 additions & 0 deletions aidl/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 说明

逆向分析还原的[手机厂商开放匿名设备标识符获取接口(AIDL)](https://github.com/gzu-liyujiang/Android_CN_OAID/tree/master/aidl)
22 changes: 22 additions & 0 deletions aidl/com/android/creator/IdsSupplier.aidl
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// IdsSupplier.aidl
package com.android.creator;

/**
* 卓易手机的开放匿名设备标识符接口
*
* @author 贵州山野羡民([email protected]
* @since 2021/08/26
*/
interface IdsSupplier {

boolean isSupported();

String getUDID(String str);

String getOAID();

String getVAID();

String getAAID(String str);

}
22 changes: 22 additions & 0 deletions aidl/com/asus/msa/SupplementaryDID/IDidAidlInterface.aidl
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// IDidAidlInterface.aidl
package com.asus.msa.SupplementaryDID;

/**
* 华硕手机开放匿名设备标识符接口
*
* @author 贵州山野羡民([email protected]
* @since 2020/05/30
*/
interface IDidAidlInterface {

boolean isSupport();

String getUDID();

String getOAID();

String getVAID();

String getAAID();

}
24 changes: 24 additions & 0 deletions aidl/com/bun/lib/MsaIdInterface.aidl
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// MsaIdInterface.aidl
package com.bun.lib;

/**
* 移动安全联盟定义的开放匿名设备标识符接口
*
* @author 贵州山野羡民([email protected]
* @since 2020/05/30
*/
interface MsaIdInterface {

boolean isSupported();

boolean isDataArrived();

String getOAID();

String getVAID();

String getAAID();

void shutDown();

}
26 changes: 26 additions & 0 deletions aidl/com/coolpad/deviceidsupport/IDeviceIdManager.aidl
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//IDeviceIdManager.aidl
package com.coolpad.deviceidsupport;

/**
* 酷派手机开放匿名设备标识符接口
*
* @author 贵州山野羡民([email protected]
* @since 2021/08/26
*/
interface IDeviceIdManager {

String getUDID(String str);

String getOAID(String str);

String getVAID(String str);

String getAAID(String str);

String getIMEI(String str);

boolean isCoolOs();

String getCoolOsVersion();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// IAdvertisingIdService.aidl
package com.google.android.gms.ads.identifier.internal;

/**
* 谷歌、索尼、诺基亚、HTC、LG等海外手机开放匿名设备标识符接口
*
* @author 贵州山野羡民([email protected]
* @since 2020/05/30
*/
interface IAdvertisingIdService {

String getId();

boolean isLimitAdTrackingEnabled(boolean boo);

}
14 changes: 14 additions & 0 deletions aidl/com/heytap/openid/IOpenID.aidl
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// IOpenID.aidl
package com.heytap.openid;

/**
* OPPO、OnePlus手机开放匿名设备标识符接口
*
* @author 贵州山野羡民([email protected]
* @since 2020/05/30
*/
interface IOpenID {

String getSerID(String pkgName, String sign, String type);

}
18 changes: 18 additions & 0 deletions aidl/com/samsung/android/deviceidservice/IDeviceIdService.aidl
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// IDeviceIdService.aidl
package com.samsung.android.deviceidservice;

/**
* 三星手机开放匿名设备标识符接口
*
* @author 贵州山野羡民([email protected]
* @since 2020/05/30
*/
interface IDeviceIdService {

String getOAID();

String getVAID(String str);

String getAAID(String str);

}
Loading

0 comments on commit 7bbed79

Please sign in to comment.