• Stars
    star
    2,205
  • Rank 20,926 (Top 0.5 %)
  • Language
    Java
  • License
    Other
  • Created over 4 years ago
  • Updated 8 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

安卓设备唯一标识解决方案,可替代移动安全联盟(MSA)统一 SDK 闭源方案。包括国内手机厂商的开放匿名标识(OAID)、海外手机平台的安卓广告标识(AAID),另外也提供了 IMEI/MEID、AndroidID、WidevineID、PseudoID、GUID 等常见的设备标识的获取方法。

Android_CN_OAID

Release APK Gradle Package

安卓设备唯一标识解决方案,可作为移动安全联盟统一 SDK (miit_mdid_xxx.aar)的替代方案。注意,这个项目的初衷主要是针对个人开发者的APP,个人开发者使用不了 MSA 的SDK,企业的APP应该去用 MSA 的 SDK。本项目提供了国内各大手机厂商获取 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

接入指引

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

依赖配置

allprojects {
    repositories {
        maven { url 'https://www.jitpack.io' }
    }
}

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

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

4.1.1 开始默认加入了 READ_PHONE_STATEWRITE_SETTINGSWRITE_EXTERNAL_STORAGE 权限以便适配低版本安卓系统。 为** 遵循最小必要原则**保护用户隐私,若项目中没用到 IMEI 及 GUID,那么可酌情在 AndroidManifest.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" />
</manifest>

注意事项

代码示例

获取多个可能的设备标识,结合服务端引入拜占庭容错方案得到可靠的稳定的设备唯一标识:

  • 第一步:
    // 在`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失败
            }
        });

混淆规则

本库自带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.** { *; }
-keep class repeackage.com.coolpad.deviceidsupport.** { *; }
-keep interface repeackage.com.coolpad.deviceidsupport.** { *; }
-keep class repeackage.com.android.creator.** { *; }
-keep interface repeackage.com.android.creator.** { *; }
-keep class repeackage.com.google.android.gms.ads.identifier.internal.** { *; }
-keep interface repeackage.com.google.android.gms.ads.identifier.internal.* { *; }

支持情况

厂商或品牌 系统或框架
华为(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(开放匿名设备标识符)

  • 华为手机 huawei
  • 荣耀手机 hono
  • 小米手机 xiaomi
  • 红米手机 redmi
  • 黑鲨手机 blackshark
  • 维沃手机 vivo_iqoo
  • 欧珀手机 oppo
  • 真我手机 realm
  • 三星手机 samsung
  • 魅族手机 meizu
  • 联想手机 lenovo
  • 一加手机 oneplus
  • 华硕手机 asus
  • 努比亚机 待验证
  • 酷派手机 待验证
  • 酷赛手机 待验证
  • 卓易手机 待验证

AAID(安卓广告标识符)

  • 谷歌手机 google
  • 中兴手机 zte
  • 摩托罗拉 motorola
  • 索尼手机 sony
  • 诺基亚机 nokia
  • HTC 手机 htc
  • LG 手机 lge

不支持 OAID 或 AAID

  • 用户关闭了广告标识符

disabled

  • 以下厂商或品牌手机截止2021年8月26日已验证尚不支持:
锤子(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 (安卓广告标识符)。

远程真机

许可协议

Copyright (c) 2019-2021 gzu-liyujiang <[email protected]>

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.

More Repositories

1

AndroidPicker

安卓选择器类库,包括日期及时间选择器(可用于出生日期、营业时间等)、单项选择器(可用于性别、民族、职业、学历、星座等)、二三级联动选择器(可用于车牌号、基金定投日期等)、城市地址选择器(分省级、地市级及区县级)、数字选择器(可用于年龄、身高、体重、温度等)、日历选日期择器(可用于酒店及机票预定日期)、颜色选择器、文件及目录选择器、图片选择器等……WheelPicker/DatePicker/TimePicker/OptionPicker/NumberPicker/LinkagePicker/AddressPicker/CarPlatePicker/CalendarPicker/ColorPicker/FilePicker/ImagePicker etc.
Java
6,434
star
2

AliyunGradleConfig

自用的安卓开源项目工程模板。阿里云远程仓库加速,发布到maven仓库,代码混淆、资源混淆,持续集成(CI),多渠道多环境打包。在天朝使用jcenter、mavenCentral及google三个远程仓库,Gradle Sync太慢?一招教你配置阿里云镜像源。init.d/init.gradle
Java
70
star
3

AndroidCrashHelper

Android Crash Helper。安卓APP自定义异常处理器,当APP触发未捕获的异常时,使用该处理器自定义有好的奔溃提示页面代替系统默认的那个讨厌的对话框
Java
53
star
4

RSAUtils

RSA+AES/RC4+MD5/SHA1+BASE64加密解密。Java及Android平台通用的RSA算法工具类及其例子(敏感信息加密、私钥签名&公钥验签、公钥加密&私钥解密、软件注册码/授权码)
Java
48
star
5

ApkDecompiler

【Linux系统】上apk反编译助手,已打包为ApkDecompiler.deb,支持debian系linux,如debian、ubuntu、mint、deepin等等
Shell
39
star
6

CircleMenu

Circle menu for android.安卓自定义控件——可旋转的环形菜单。
Java
36
star
7

UnicodeEmoji

Unicode&Emoji处理工具类,可用于解决微信登录Emoji表情昵称乱码问题,含Emoji表情处理、中日韩字符判断、Unicode格式化表示等。
Java
30
star
8

aa_reverse

【Android手机】上的apk反编译助手(推荐ajadx——jadx的安卓包装版)
Java
23
star
9

eide

EIDE为Android手机上的集成开发环境,类似于AIDE,fork源码来学习下原理,基于原版做了以下修改:补全AndroidStudio项目结构; 升级gradle到3.4.0; 升级ADK到28; 升级JDK到1.8;
Java
23
star
10

HorizontalGridView

Android 水平滚动的九宫格列表视图(采用HorizontalScrollView+GridView实现,所有数据在同一页展示,非ViewPager轮播图方式的分页),带滚动指示器,可用于首页金刚区,类似于手机淘宝首页轮播图下面的金刚区。
Java
21
star
11

NotificationHelper

[Deprecated]【废弃,已不适用于新版本的android系统】Android通知栏消息工具类。A lite of “pugnotification” for creating notifications in android platform.
Java
20
star
12

AppOpsDemo

AppOpsManager的应用。判断应用程序的某些操作是否被禁用,如:是否禁止在通知栏显示通知、是否禁止显示悬浮窗
Java
18
star
13

MapSlicingTool

室内地图、手绘地图之类的地图引擎MappWidget的瓦片裁剪工具。Slicing image to map tile for MapWidget
Java
18
star
14

PHP_MVC_LightweightFramework

【停更】PHP_MVC_API作为一个极其轻量级MVC&API开发框架,不断吸取参考了flight、phx、discuz、punbb等开源项目的优点,最终形成独具自己风格的快速开发框架。适合微小型项目,目前我主要用于服务端应用程序接口开发,提供API和移动APP进行数据交换。推荐使用https://github.com/phalapi/phalapi
PHP
17
star
15

SensorTest

【废弃,已跟不上新版本的android系统的脚步】Android传感器测试,包括加速度、方向等数据,保存到数据库,可导出到Excel以便分析研究
Java
16
star
16

SpanTextBuilder

android的TextView的各种Span的工具类:AbsoluteSizeSpan; AlignmentSpan; BackgroundColorSpan; BulletSpan; ClickableSpan; ForegroundColorSpan; ImageSpan; LeadingMarginSpan; MaskFilterSpan; QuoteSpan; RelativeSizeSpan; ScaleXSpan; StrikethroughSpan; StyleSpan; SubscriptSpan; SuperscriptSpan; TypefaceSpan; URLSpan; UnderlineSpan;自定义Span...
Java
16
star
17

GoodsSpec

【停止维护,可考虑使用鸿洋版FlowLayout或者谷歌官方的FlexboxLayout及Chip&ChipGroup实现(参阅 https://github.com/hongyangAndroid/FlowLayout 及 https://github.com/hongyangAndroid/FlexboxLayout-Tag )】android版热门搜索词或标签列表(支持单选和多选模式)、商品规格选择自定义控件,详见demo效果图
Java
16
star
18

RoundRainbowTextView

Android自定义TextView,带渐变色边框的彩虹字效果
Java
15
star
19

NetworkTimeDemo

android获取手机真实的时间与时区,不受本机篡改时间或者篡改时区的影响。(除此客户端解决方案外,时间戳也可以考虑由服务端API提供)
Java
14
star
20

EnhancedProgressBar

Android的增强版`ProgressBar`,带数字的水平滚动条(支持长方形、平行四边形及椭圆角矩形)。
Java
12
star
21

MBR-DualBootType-WinPE

利用bootmgr及bootmgfw.efi(即bootx64.efi)实现同时支持Legacy及EFI启动类型的PE系统盘。
Batchfile
12
star
22

Image2ByteVar

将图片转换为字节数组,便于项目隐藏图片文件。例如提供jar包可内嵌图片资源。Convert image to byte array variable.
Java
6
star
23

HttpRequest

自用的 Android 网络请求组件,面向接口编程,使用接口对各模块进行解耦,增强对第三方库的管控,底层可无缝切换底层的具体实现。默认实现了 HttpURLConnection、okhttp-OkGo 及 Fast-Android-Networking 。
Java
4
star
24

BezierCurve

贝塞尔曲线实现的翻书效果
Java
3
star
25

CJKCharsetDetector

【可以试试该替代方案:IBM ICU】jchardet wrapper,文本编码自动检测。中日韩文本文件字符集自动检测 Auto-detection of charset in Chinese, Japanese and Korean text files。
Java
3
star
26

Jsoner

自用的 Android JSON序列化/反序列化组件,面向接口编程,使用接口对各模块进行解耦,增强对第三方库的管控,底层可无缝切换底层的具体实现。默认实现了 GSON 及 FastJSON 。
Java
2
star
27

Logger

自用的 Android 日志打印组件,面向接口编程,使用接口对各模块进行解耦,增强对第三方库的管控,底层可无缝切换底层的具体实现。默认实现了android.util.Log、System.out.println及https://github.com/orhanobut/logger
Java
2
star
28

ChinesePublicLicense

适合中国国情的开源软件授权许可证
1
star
29

RoundCornerImageView

RoundCornerImageView for Android。安卓圆角图片控件,支持分别设置上下左右四个角,通过Path实现绘制,在ListView/RecyclerView里比较丝滑。
Java
1
star
30

ImageLoader

自用的 Android 图片加载组件,面向接口编程,使用接口对各模块进行解耦,增强对第三方库的管控,底层可无缝切换底层的具体实现。默认实现了 Glide、Picasso、Universal-Image-Loader 。
Java
1
star