如何以非编程方式从设备查找ANDROID_ID

时间:2019-06-13 09:56:44

标签: android

我目前正在使用以下代码以编程方式检索设备的ANDROID_ID

Settings.Secure.getString(this._context.getContentResolver(), Settings.Secure.ANDROID_ID);

如何从设备(而不是通过编程方式)“可视地”检索相同的ID?

我到处都看过,但是无法在设置中找到它,也没有使用DeviceId之类的应用

3 个答案:

答案 0 :(得分:2)

不再有全局ANDROID_ID。从Android 8开始,每个应用程序都会看到不同的值。更具体地说,该值取决于用于对应用程序,用户(在多用户设备上)和设备进行签名的签名。

有关更多详细信息,请参见Settings.Secure.ANDROID_ID

答案 1 :(得分:1)

我们可以将答案分为两个部分,具体取决于哪个Android API级设备。


API级别为

可以使用以下ANDROID_ID命令来检索adb值:

# this will retrieve current user's ANDROID_ID
$ adb shell settings get secure android_id  
ba003ff1b4125132
# you can also get the value of each other user's value by specifying --user <USER_ID>
$ adb shell settings get --user 10 secure android_id  
3e6a5f43bd80ea6

在仿真器(或有根设备)上,您可以使用以下命令找到ANDROID_ID

# first, switch into a root mode and open a shell
$ adb root
$ adb shell
# find which users exist on a device (this example shows two users having ID 0 and 10)
$ ls -l /data/system/users
drwx------ 4 system system 4096 2019-10-09 18:05 0
-rw------- 1 system system  267 2019-10-09 18:05 0.xml
drwx------ 5 system system 4096 2019-10-09 18:05 10
-rw------- 1 system system  385 2019-10-09 18:05 10.xml
-rw------- 1 system system  367 2019-10-09 18:05 userlist.xml 
# the ANDROID_ID located in settings_secure.xml file
$ cat 0/settings_secure.xml | grep android_id
  <setting id="31" name="android_id" value="ba003ff1b4125132" package="android" />  
# similarly, we can find user 10's value:
$ cat 10/settings_secure.xml | grep android_id
  <setting id="31" name="android_id" value="3e6a5f43bd80ea6" package="android" />  


API级别> = Android 8.0(Oreo)的设备

可以在8.0和更高版本的设备上使用与上述相同的技术,但是可以看到它返回的(全局ANDROID_ID)值only by system processes

adb目前不支持检索特定应用程序的ANDROID_ID,因为它的值正在写入单独的文件(settings_ssaid.xml,而adb允许仅访问systemsecureglobal中的值)。但是,在仿真器或有根设备上可以轻松实现:

$ adb root
$ adb shell
# here I'm using user with ID 0
$ cd /data/system/users/0
$ cat settings_ssaid.xml  
<settings version="-1">
  <setting id="0" name="userkey" value="E4FC4CFF14039F5AD44AD63F70007F85FDBBE1FF9BCB9FF5331B3FD33E057461" package="android" defaultValue="E4FC4CFF14039F5AD44AD63F70007F85FDBBE1FF9BCB9FF5331B3FD33E057461" defaultSysSet="true" tag="null" />
  <setting id="4" name="10072" value="9d5f269e42d4ca76" package="info.osom.ssaid" defaultValue="9d5f269e42d4ca76" defaultSysSet="false" tag="null" />
</settings>

在此示例中,我有一个应用程序,程序包名称为info.osom.ssaid,其包ANDROID_ID的值为9d5f269e42d4ca76

答案 2 :(得分:0)

您为什么需要ANDROID_ID?如果出于美化的原因需要它((要知道是哪个设备)),建议该值不是恒定的,但可能会随时间变化。您可以详细了解here

唯一可用于标识您的设备的值是MacAddress,但即使这样也不建议使用。

如果由于其他原因需要此值,请忽略此答案。