我为2个应用程序使用同一设备获得了不同的Android ID,尽管它们使用相同的密钥库进行了签名。仅在Android Oreo OS中会出现此问题。谁能帮我为什么生成2个不同的Android IDS?
我用于Android ID的方法-
int deviceId = Settings.Secure.getString(pContext.getContentResolver(), Settings.Secure.ANDROID_ID)
答案 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似乎不是一个好主意。