安卓获取APP对应的Android id的原理分析

本文详细探讨了Android系统如何生成并获取APP的Android id,重点在于Android 8.0之后的变化。该id基于应用签名,通过HmacSHA256算法产生。当APP首次尝试读取Android id时,系统会从缓存查找,若未找到则调用SettingsProvider的call()接口,最后在SettingsProvider内部进行生成。生成过程涉及到随机数的生成和安全设置的获取与更新。
摘要由CSDN通过智能技术生成

android_id 的生成原理是由系统生成的随机数,并与应用 app 签名,经过 HmacSHA256 算法生成的;
从 android 8 以后开始就是随机的了,每个应用获取到的简要步骤;
获取的方式如下所示:

androidId = android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
 public String getStringForUser(ContentResolver cr, String name, final int userHandle) {
   
            final boolean isSelf = (userHandle == UserHandle.myUserId());
            if (isSelf) {
   
                synchronized (NameValueCache.this) {
   
                    if (mGenerationTracker != null) {
   
                        if (mGenerationTracker.isGenerationChanged()) {
   
                            if (true) {
   
                                Log.i(TAG, "Generation changed for type:"
                                        + mUri.getPath() + " in package:"
                                        + cr.getPackageName() +" and user:" + userHandle);
                            }
                            mValues.clear();
                        } else if (mValues.containsKey(name)) {
   
                            //如果APP已经安装第二次读取位置
                            Log.v(TAG, "getStringForUser clear name= " + name  + " key: " + mValues.get(name));
                            mValues.remove(name);
                           // return mValues.get(name);
                        }
                    }
                }
             final long token = Binder.clearCallingIdentity();
                        try {
   
							Log.w(TAG, "call here ------" );
                            b 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九霄的爸爸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值