ANDRID_ID在abd和API 26上的代码中有所不同

时间:2017-11-29 11:05:25

标签: android adb android-8.0-oreo

在模拟器上使用API​​ 25:

adb shell settings put secure android_id 8af8770a27cfd182
adb shell settings get secure android_id //gives 8af8770a27cfd182
Secure.getString(context.getContentResolver(), Secure.ANDROID_ID) //gives 8af8770a27cfd182

在模拟器上使用API​​ 26:

adb shell settings put secure android_id 8af8770a27cfd182
adb shell settings get secure android_id //gives 8af8770a27cfd182
Secure.getString(context.getContentResolver(), Secure.ANDROID_ID) //gives 6e4f84f5513b80e1

我已经了解了API 25和26之间ANDROID_ID的变化,但为什么adb和代码会给我不同的结果?

更新:

创建了一个简单的应用程序来消除旧的应用程序的复杂性。新应用程序只有一个主要活动,上面有一个按钮:

package com.example.diolaj01.testandroidid;

import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

protected void GetAndroidId(View view){
    Log.e("myDebugTag", Settings.Secure.getString(view.getContext().getContentResolver(),
            Settings.Secure.ANDROID_ID));

}
}

当点击具有API 25的设备上的按钮时,我获得与从adb请求ANDROID_ID时相同的值:

adb shell settings get secure android_id

如果我更改了android_id,我仍然会在控制台中使用按钮并使用adb获得更新的。

当点击具有API 26的设备上的按钮时,我获得的值与使用adb时得到的值不同。如果我使用adb更改android_id,我会在使用adb但不使用按钮时获取更新后的值。

1 个答案:

答案 0 :(得分:3)

来自https://developer.android.com/about/versions/oreo/android-8.0-changes.html#privacy-all

  

隐私权Android 8.0(API级别26)使以下与隐私相关   改变平台。

     

平台现在以不同方式处理标识符。

     

对于那些应用程序   在OTA之前安装到Android 8.0版本(API级别26)   (API级别26),ANDROID_ID的值保持不变,除非   在OTA之后卸载然后重新安装。保护价值观   在OTA之后的卸载过程中,开发人员可以关联旧的和新的   使用键/值备份的值。

     

适用于设备上安装的应用   运行Android 8.0时,ANDROID_ID的值现在是每个应用程序的范围   签名密钥以及每个用户。 ANDROID_ID的值是唯一的   对于应用签名密钥,用户和设备的每个组合。作为一个   结果,具有不同签名密钥的应用程序在同一设备上运行   更长时间看到相同的Android ID(即使是同一个用户)。

     

的价值   只要对包卸载或重新安装,ANDROID_ID不会更改   因为签名密钥是相同的(并且之前没有安装应用程序   对Android 8.0版本的OTA。)

     

ANDROID_ID的值没有   即使系统更新导致程序包签名密钥,也会更改   变化

     

在使用Google Play服务和广告的设备上   ID,您必须使用广告ID。一个简单,标准化的货币化系统   应用程序,广告ID是一种独特的,用户可重置的广告ID。   它由Google Play服务提供。

     

其他设备制造商   应该继续提供ANDROID_ID