在Oreo中是否存在相同的ANDROID_ID?

9
根据《Android 8.0 行为变更》,安装在运行 Android 8.0 设备上的应用程序现在会根据应用签名密钥以及用户进行范围限定,因此 ANDROID_ID 的值是每个应用程序签名密钥、用户和设备组合唯一的。因此,在同一设备上运行不同签名密钥的应用程序不再看到相同的 Android ID ,即使是对于相同的用户。为测试以上更改,我创建了两个测试 APK 并发现以下行为(在 Nexus 5X,OS 8.0.0 上测试):
- 如果目标 SDK 版本为 26、编译 SDK 版本为 26、构建工具版本为 26.0.0,则从同一台 Windows 计算机生成的两个不同的 apk(连同不同的包名称)显示相同的 ANDROID_ID。当使用相同的包名称从不同的计算机生成 APK 时,会显示不同的 ANDROID_ID。
下面是我的问题:
1. 这是正确的行为吗?为什么两个不同的 APK 显示相同的 ANDROID_ID?
2. 是否会有任何更改,可以使我的应用程序的 ANDROID_ID 发生更改(无需卸载/重新安装)?
3. 在 Nexus 5x,OS 6.0.1 上获得相同的行为,目标 SDK 版本为 23,编译 SDK 版本为 23,构建工具版本为 25.0.0。我没有看到 Android O 中的任何特定行为更改。我错过了什么?为什么会出现相同的行为?

1
显然是因为调试密钥相同... - Selvin
2个回答

6

其他答案已经解释了为什么不同的apk会获得相同的id,他们是正确的。

检查这种行为的最佳方法是创建两个不同的证书并使用这两个证书签名您的apk。


总结所有的困惑,[来自Android O中设备标识符的更改]

  1. 只要包名称和签名密钥相同,ANDROID_ID值在包卸载/重新安装时不会更改。应用程序可以依赖此值在重新安装之间维护状态。
  2. 如果应用程序安装在运行早期版本的Android的设备上,则当设备更新到Android O时,Android ID保持不变,除非卸载并重新安装该应用程序。
  3. 只有在设备恢复出厂设置或在卸载和重新安装事件之间签名密钥发生变化时,Android ID值才会更改。
  4. 此更改仅适用于出货带有Google Play服务和广告ID的设备制造商。其他设备制造商可能提供可重置的替代ID或继续提供ANDROID ID。

正如我在查询3中提到的,Android O之前我得到的是相同的ANDROID_ID,这是正确的行为吗? - Hey You
@HeyYou 是的,那是正确的行为。因为您正在使用较低版本编译应用程序。这与调试密钥登录无关。调试密钥将在使用 O API 构建时发挥作用。 - Pankaj Kumar
1
谢谢Pankaj。正如你建议的那样,我已经测试了两个不同的KS,在Android O设备上显示不同的ANDROID_ID,在Android M设备上显示相同的ANDROID_ID。非常感谢你的关注和建议。 - Hey You

4

它的表现是预期的。

正如您在问题中所指出的:

结果,使用不同签名密钥运行于同一设备上的应用程序不再看到相同的 Android ID

当您使用Android Studio构建不同的APK时,调试签名密钥是相同的。因此,您会看到相同的Android_ID。

但是,当您使用不同的电脑时,调试签名密钥是不同的。因此,您会看到不同的Android_ID。


你当然可以将调试签名密钥复制到另一台计算机上,或者使用特定于项目的调试签名密钥。 - Zharf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接