两个不同的 ANDROID ID - settings_secure.aml & settings_ssaid.xml
Two different ANDROID IDs - settings_secure.aml & settings_ssaid.xml
我是 Adroid 应用生态系统的新手。我构建了一个简单的应用程序并注意到有两个不同的 ANDROID ID(我在模拟器中运行应用程序)
- 一个存储在
/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
---> 这也是我得到的
- 其他存储在
/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..
谁能分享一下
- 拥有两个不同ID的目的?在哪个用例中使用哪个?尽管存储在不同的位置,但它们都被称为 ANDROID ID 有点令人困惑(我的理解是否正确 #1 可能被系统/Andorid 应用程序使用,而 #2 将被用户使用,第 3 方应用程序)
- 我也觉得很奇怪,我的
app_v1
和 app_v2
输出相同的 ANDROID ID (35ea805581c66911)。我的理解是否正确,因为 post Android-O,此 ANDROID ID 的范围 由签名密钥和用户 根据 https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID ?
感谢您提前澄清
purpose of having two different IDs? which one to use in which usecase? it's a bit confusing both are called ANDROID IDs despite stored at different locations (Is my understanding correct #1 is perhaps used by system / Andorid apps and #2 is to be used used by user, 3rd party app)
根据您链接的文档和 SettingsProvider.java 中的描述,我认为您的理解是正确的,settings_secure.xml
中的值是针对 Android OS 本身的访问,而“SSAID”是供第 3 方应用程序访问。
如果您是应用开发者,则无法选择使用哪一个,因为您只能访问“SSAID”版本。
如果您的问题是为什么需要为每个签名密钥分配不同的 Android ID,我猜这是为了防止第 3 方库跨应用程序跟踪用户。 (想想类似 Admob SDK 的东西)
also i find it odd that both my app_v1 and app_v2output same ANDROID ID (35ea805581c66911). Is my understanding correct it's because post Android-O, this ANDROID ID is scoped by signing key and user as per https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID ?
我的猜测是因为您的 app_v1 和 app_v2 是使用相同的签名密钥签名的,因此他们看到的 Android ID 是相同的。
我是 Adroid 应用生态系统的新手。我构建了一个简单的应用程序并注意到有两个不同的 ANDROID ID(我在模拟器中运行应用程序)
- 一个存储在
/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
---> 这也是我得到的
- 其他存储在
/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..
谁能分享一下
- 拥有两个不同ID的目的?在哪个用例中使用哪个?尽管存储在不同的位置,但它们都被称为 ANDROID ID 有点令人困惑(我的理解是否正确 #1 可能被系统/Andorid 应用程序使用,而 #2 将被用户使用,第 3 方应用程序)
- 我也觉得很奇怪,我的
app_v1
和app_v2
输出相同的 ANDROID ID (35ea805581c66911)。我的理解是否正确,因为 post Android-O,此 ANDROID ID 的范围 由签名密钥和用户 根据 https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID ?
感谢您提前澄清
purpose of having two different IDs? which one to use in which usecase? it's a bit confusing both are called ANDROID IDs despite stored at different locations (Is my understanding correct #1 is perhaps used by system / Andorid apps and #2 is to be used used by user, 3rd party app)
根据您链接的文档和 SettingsProvider.java 中的描述,我认为您的理解是正确的,settings_secure.xml
中的值是针对 Android OS 本身的访问,而“SSAID”是供第 3 方应用程序访问。
如果您是应用开发者,则无法选择使用哪一个,因为您只能访问“SSAID”版本。
如果您的问题是为什么需要为每个签名密钥分配不同的 Android ID,我猜这是为了防止第 3 方库跨应用程序跟踪用户。 (想想类似 Admob SDK 的东西)
also i find it odd that both my app_v1 and app_v2output same ANDROID ID (35ea805581c66911). Is my understanding correct it's because post Android-O, this ANDROID ID is scoped by signing key and user as per https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID ?
我的猜测是因为您的 app_v1 和 app_v2 是使用相同的签名密钥签名的,因此他们看到的 Android ID 是相同的。