在奥利奥相同的ANDROID_ID

Hey*_*You 8 android android-8.0-oreo

根据Android 8.0行为更改,

对于安装在运行Android 8.0的设备上的应用程序,ANDROID_ID的值现在是每个应用程序签名密钥以及每个用户的范围.对于app-signing密钥,用户和设备的每个组合,ANDROID_ID的值是唯一的.因此,在同一设备上运行的具有不同签名密钥的应用程序不再看到相同的Android ID(即使对于同一用户).

为了测试上面的变化,我做了两个测试APK并发现了以下行为(在Nexus 5X,OS 8.0.0上测试过):

  • 在targetSdkVersion 26,compileSdkVersion 26,buildToolsVersion 26.0.0的情况下,从同一个Windows机器生成的两个不同的apk(以及不同的包名称)显示相同的ANDROID_ID.当使用来自不同计算机的相同包名生成APK时,将显示不同的ANDROID_ID.

以下是我的查询:

  1. 这是正确的行为吗?为什么两个不同的APK显示相同的ANDROID_ID?
  2. 如果我的应用程序的ANDROID_ID可能会更改(没有卸载/重新安装),是否有任何更改?
  3. 在Nexus 5x,OS 6.0.1,targetSdkVersion 23,compileSdkVersion 23,buildToolsVersion 25.0.0上获得相同的行为.我没有在Android O中看到任何特定的行为更改.我缺少什么?为什么会有同样的行为

Pan*_*mar 5

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

通过创建两个不同的证书并使用这两个证书签署您的 apk 来检查此行为的最佳方法。


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

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


Sag*_*gar 4

它的行为符合预期。

正如您在问题中强调的那样:

因此,在同一设备上运行的具有不同签名密钥的应用程序将不再看到相同的 Android ID

当您使用 Android studio 构建不同的 APK 时,调试签名密钥是相同的。结果你会看到相同的 Android_ID

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