• 安卓开发轻松绕过隐私权限获取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 突然发现点击上面的第一个仓库链接,会跳转至站内收费链接…这个不是我设的,甚至不是仓库所有者设置的

  • 相关阅读:
    C++之函数重载【详解】
    华为---生成树---MSTP基础配置(四)
    Codeforces Round #822 (Div. 2) C. Removing Smallest Multiples
    广州华锐互动:利用VR复原文化遗址,沉浸式体验历史文物古迹的魅力
    Qt应用开发(基础篇)——组合框容器 QGroupBox
    如何自己开传奇单机架设超详细图文教程
    七步走,让你快速编写一个最简单的Servlet项目
    经验之谈:AntD级联选择动态加载数据
    VoLTE基础学习系列 | 汇总
    JAVA 异常分类及处理
  • 原文地址:https://blog.csdn.net/xcdm100/article/details/133903023