在奥利奥相同的ANDROID_ID

时间:2018-04-09 09:40:56

标签: 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中看到任何特定的行为更改。我缺少什么?为什么得到同样的行为?

2 个答案:

答案 0 :(得分:4)

其表现符合预期。

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

  

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

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

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

答案 1 :(得分:4)

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

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

总结你的所有困惑,[来自Changes to Device Identifiers in Android O]

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