尽管使用相同的密钥库对它们进行签名,但我为 2 个应用程序的同一设备获得了不同的 Android ID。此问题仅在 Android Oreo 操作系统中发生。谁能帮我为什么会生成 2 个不同的 Android IDS?
我用于 Android Id 的方法 -
int deviceId = Settings.Secure.getString(pContext.getContentResolver(), Settings.Secure.ANDROID_ID)
尽管使用相同的密钥库对它们进行签名,但我为 2 个应用程序的同一设备获得了不同的 Android ID。此问题仅在 Android Oreo 操作系统中发生。谁能帮我为什么会生成 2 个不同的 Android IDS?
我用于 Android Id 的方法 -
int deviceId = Settings.Secure.getString(pContext.getContentResolver(), Settings.Secure.ANDROID_ID)
它的行为符合预期。在 Android 8.0 中,现在的值ANDROID_ID
是每个应用程序的范围,这意味着ANDROID_ID
现在每个应用程序都是唯一的
请阅读有关Android 8.0 行为更改的信息
对于在 OTA 之前安装到 Android 8.0(API 级别 26)(API 级别 26)版本的应用程序,ANDROID_ID 的值保持不变,除非在 OTA 之后卸载然后重新安装。为了在 OTA 后跨卸载保留值,开发人员可以使用 Key/Value Backup 将旧值和新值关联起来。
对于安装在运行 Android 8.0 的设备上的应用,ANDROID_ID 的值现在以每个应用签名密钥以及每个用户为范围。ANDROID_ID 的值对于应用签名密钥、用户和设备的每个组合都是唯一的。因此,在同一设备上运行的具有不同签名密钥的应用不再看到相同的 Android ID(即使对于同一用户也是如此)。
这是 Oreo 及以上设备上的预期行为。设备 ID 现在对于每个用户的每个应用程序都是唯一的。
安卓官方文档:
对于安装在运行 Android 8.0 的设备上的应用,ANDROID_ID 的值现在以每个应用签名密钥以及每个用户为范围。ANDROID_ID 的值对于应用签名密钥、用户和设备的每个组合都是唯一的。因此,在同一设备上运行的具有不同签名密钥的应用不再看到相同的 Android ID(即使对于同一用户也是如此)。
链接:https ://developer.android.com/about/versions/oreo/android-8.0-changes
从 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 似乎不是一个好主意。