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

  • 相关阅读:
    Spring声明式事务管理(基于XML方式实现)
    css第十一课:浮动属性
    带你掌握如何查看并读懂昇腾平台的应用日志
    盘点市面上七款好用的代码加密混淆工具,你都用过哪款?
    kafka属性说明
    手机拍照转机器人末端坐标(九点标定法)
    数据结构之跳表
    【找不到视图问题解决】@RestController 与 @Controller注解的使用区别
    Java.lang.Class类 getDeclaredField(String name)方法有什么功能呢?
    `算法知识` 哈希
  • 原文地址:https://blog.csdn.net/xcdm100/article/details/133903023