• 安卓开发轻松绕过隐私权限获取OAID手机唯一标识ID


    根据“移动智能终端补充设备标识体系”技术要求,华为、小米、OPPO、vivo、中兴、努比亚、魅族、联想、三星等设备厂商均将逐步实现本标识体系,联盟计划开发并发布支持多厂商的统一的补充设备标识调用SDK,协助移动应用开发者更便捷的访问移动智能终端补充设备标识体系,推进相关业务。

    IMEI属于个人隐私,现在已无法获取IMEI,因此需要使用OAID来替代。

    SDK下载

    文件分享

    把 oaid_sdk_1.0.25.aar 拷贝到项的 libs 目录,并设置依赖。

    implementation files('libs/oaid_sdk_1.0.25.aar')
    将supplierconfig.json 拷贝到项目 assets 目录下,并修改 边对应内容,特别是需要设置 appid 的部分。需要设置 appid 的部分需要去对应厂商的应用商店注册自己的 app。需要注意的是,其中 label 部分内容无需修改。

    核心代码,从官方给的demo里拿的

    public class MainActivity extends AppCompatActivity implements IIdentifierListener {
        private TextView tvContent;
        String oaid;
        String vaid;
        String aaid;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            tvContent = findViewById(R.id.tv);
            MdidSdkHelper.InitSdk(getApplicationContext(), true,this);
            //结果是异步返回的,使用时为空的话可以先休眠几秒
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("OAID: "+oaid);
            System.out.println("VAID: "+vaid);
            System.out.println("AAID: "+aaid);
        }

        @Override
        public void OnSupport(boolean b, IdSupplier idSupplier) {
            if(idSupplier==null) {
                return;
            }
            oaid=idSupplier.getOAID();
            vaid=idSupplier.getVAID();
            aaid=idSupplier.getAAID();

            StringBuilder builder=new StringBuilder();
            builder.append("support: ").append(idSupplier.isSupported()?"true":"false").append("\n");
            builder.append("OAID: ").append(oaid).append("\n");
            builder.append("VAID: ").append(vaid).append("\n");
            builder.append("AAID: ").append(aaid).append("\n");

            String idstext=builder.toString();
            Log.d("SdkDemo: ", idstext);
            onIdsAvalid(idstext);
        }

        public void onIdsAvalid(@NonNull final String ids) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    tvContent.setText(ids);
                }
            });
        }
    }
    可能遇到的问题
    OAID的返回是异步的,所以有时候可能执行完还没返回,这时候使用就会出问题了,建议在使用前先判空,若为空值先睡一会儿

    替代方案
    这里还有两个替代方案推荐
    https://github.com/shuzilm-open-source/Get_Oaid_CNAdid
    https://github.com/gzu-liyujiang/Android_CN_OAID
    2021-06-22 突然发现点击上面的第一个仓库链接,会跳转至站内收费链接…这个不是我设的,甚至不是仓库所有者设置的

  • 相关阅读:
    清华计算几何大作业(十):CG2017 PA5-2 FruitNinja(水果忍者)· 下
    【C语言】关键字
    《A Hierarchical Framework for Relation Extraction with Reinforcement Learning》论文阅读笔记
    工厂无线wifi短信验证码认证方案
    文件的操作方法
    网络安全入门必知的靶场!
    [附源码]计算机毕业设计项目管理系统的专家评审模块Springboot程序
    Django-图书管理系统(含源码)
    C/C++数据结构——挖沟(Kruskal算法+并查集)
    超详细的RabbitMQ入门与实战介绍,看这篇文章就够了!
  • 原文地址:https://blog.csdn.net/xcdm100/article/details/133903023