0

我是 Adroid 应用生态系统的新手。我构建了一个简单的应用程序,并注意到有两个不同的 ANDROID ID(我在模拟器中运行应用程序)

  1. 一个存储在/data/system/users/0/settings_secure.xml文件中:
<setting id="25" name="android_id" value="9f43e4f495a6730" package="android" defaultValue="9f43e4f495a6730" defaultSysSet="true" />
  • 在终端中执行命令$adb shell settings get secure android_id时--->这也是我得到的
  1. 其他存储在/data/system/users/0/settings_ssaid.xml
<setting id="4" name="10153" value="35ea805581c66911" package="com.example.app_v1.demo.debug" defaultValue="35ea805581c66911" defaultSysSet="false" tag="null" />
<setting id="5" name="10154" value="35ea805581c66911" package="com.example.app_v2.full.debug" defaultValue="35ea805581c66911" defaultSysSet="false" tag="null" />
  • 在我的应用程序代码中执行语句后:Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID---> 这是我得到的
  • 看起来这也称为SSAID ..

有人可以分享

  1. 有两个不同的ID的目的?在哪个用例中使用哪个?尽管存储在不同的位置,但两者都被称为 ANDROID ID,这有点令人困惑(我的理解是否正确#1 可能由系统/Andorid 应用程序使用,而#2 由用户使用,第 3 方应用程序)
  2. 我也觉得奇怪的是我app_v1app_v2输出相同的ANDROID ID(35ea805581c66911)。我的理解是否正确,因为在 Android-O 发布后,这个 ANDROID ID 的范围是根据https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID通过签名密钥和用户来确定的?

感谢您提前澄清

4

1 回答 1

0

有两个不同的ID的目的?在哪个用例中使用哪个?尽管存储在不同的位置,但两者都被称为 ANDROID ID 有点令人困惑(我的理解是否正确,#1 可能由系统/Andorid 应用程序使用,#2 由用户使用,第 3 方应用程序)

根据您链接的文档以及SettingsProvider.java中的描述,我认为您的理解是正确的,其中的值settings_secure.xml是供 Android 操作系统本身访问的,而“SSAID”是供第三方应用程序访问的。

如果您是应用程序开发人员,则无法选择使用哪一个,因为您只能访问“SSAID”版本。

如果您的问题是为什么需要为每个签名密钥分配不同的 Android ID,我的猜测是防止 3rd 方库跨应用程序跟踪用户。(想想 Admob SDK 之类的东西)

我也觉得奇怪的是我的 app_v1 和 app_v2 输出相同的 ANDROID ID (35ea805581c66911)。我的理解是否正确,因为在 Android-O 之后,这个 ANDROID ID 的范围是根据https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID签署密钥和用户?

我的猜测是因为您的 app_v1 和 app_v2 使用相同的签名密钥进行签名,因此他们看到的 Android ID 是相同的。

于 2021-01-10T07:50:20.630 回答