为同一设备获取不同的ID。为什么?

时间:2018-07-18 10:32:05

标签: android android-8.0-oreo deviceid

我为2个应用程序使用同一设备获得了不同的Android ID,尽管它们使用相同的密钥库进行了签名。仅在Android Oreo OS中会出现此问题。谁能帮我为什么生成2个不同的Android IDS?

我用于Android ID的方法-

int deviceId = Settings.Secure.getString(pContext.getContentResolver(), Settings.Secure.ANDROID_ID)

3 个答案:

答案 0 :(得分:1)

它的行为符合预期。在Android 8.0中,ANDROID_ID的值现在是每个应用程序的范围,这意味着ANDROID_ID现在对于每个应用程序都是唯一的

请阅读有关Android 8.0 Behavior Changes

的信息
  • 对于在OTA之前安装到Android 8.0(API级别26)(API级别26)版本的应用程序,ANDROID_ID的值保持不变,除非在OTA之后卸载并重新安装。为了在OTA之后的卸载中保留值,开发人员可以使用“键/值备份”来关联新旧值。

  • 对于在运行Android 8.0的设备上安装的应用程序,现在ANDROID_ID的值的范围分别取决于应用程序签名密钥和用户。对于应用程序签名密钥,用户和设备的每种组合,ANDROID_ID的值都是唯一的。因此,在同一设备上运行具有不同签名密钥的应用程序将不再看到相同的Android ID(即使对于同一用户)。

答案 1 :(得分:0)

这是Oreo及更高版本设备上的预期行为。现在,每个用户的每个应用的设备ID都是唯一的。

Android官方文档:

  

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

链接:https://developer.android.com/about/versions/oreo/android-8.0-changes

答案 2 :(得分:0)

自Android 8起,android_id“对于应用程序签名密钥,用户和设备的每种组合都是唯一的”,从而拒绝“开发人员能够跨多个应用程序跟踪用户”。这些唯一的ID存储在

  

/data/system/users//settings_ssaid.xml。

当android_id值初始化时,第一次设置该值? android_id值会在哪种情况下更改? 显然,除非执行出厂重置以清除所有设置,否则android_id“是在用户首次设置设备时随机生成的,并且应在用户设备的整个生命周期内保持不变”。

在Android 8+上,应用专用的android_id“如果在设备上执行出厂重置或APK签名密钥更改,则值可能会更改”。

让所有人都看到它,用android_id构建device_id似乎不是一个好主意。