从ADB和Android SDK获取Android设备标识符

42

我正在寻找一种最简单的方法,可以从Android adb和Android ADK本身获取唯一的Android设备标识符。

例如,当我使用adb 'devices'命令时,连接设备的序列号会输出到屏幕上。但我尚未找到在Android sdk中获取相同序列号的方法。

我不关心使用哪种唯一标识符,只要能够轻松地从adb和android sdk中检索出来即可。对设备进行Root将不是一个选项。


你能跟踪安装而不是设备吗? - ridecar2
请查看以下答案:http://stackoverflow.com/a/23564966/884052 - Ajeet47
12个回答

74

你可能想要使用ANDROID_ID。

以下是通过adb shell查询其值的方法:

settings get secure android_id

或通过查询设置内容提供程序:

content query --uri content://settings/secure/android_id --projection value

命令行似乎找不到该内容? - i_am_jorf
只需在查询末尾转义 ['] 字符即可使其顺利运行。 - Martynas Jurkus
10
作为一个单行指令:adb shell 'settings get secure android_id',意思是获取Android设备的安全ID。 - ccpizza

16

使用adb就是那么简单。

adb devices -l

13

Android将与设备相关的所有信息存储在一个或多个SQLite数据库中。这些数据库可以在/data/data/文件夹中找到。要从adb读取这些数据库,您需要root权限。

Android ID可在/data/data/com.android.providers.settings/databases/settings.db中找到。

因此,要在adb中使用,请使用此命令。

adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "select value from secure where name = 'android_id'"

你必须在adb中作为root用户运行adb。


2
作者提到,在设备上进行root不是一个选项。 - Viktor Malyi

8

Android序列号可以通过设备内的getprop命令获取:

getprop ro.serialno

如果您想从Java中执行它,请使用Runtime.exec()


3
序列号和Android ID 不是同一个东西。 - ccpizza
2
@ccpizza 确切,但 OP 想要任何设备 ID。 - McX
正是我想要的。我在设备中使用了shell(通过adb shell开始一个会话),并且发现与在主机命令行中使用adb命令(例如adb shell pm list packages)得到的结果不同。我需要确认shell会话中设备的序列号与adb devices中的序列号是否相同。事实证明它们是相同的,所以我必须在其他地方寻找为什么我的命令无法正常工作的原因。 - undefined

6
我使用adb。首先,我用以下命令列出已连接设备的ID号码:
adb devices

输出结果将类似于以下内容:
List of devices attached
YOGAA1BBB412    device

从之前的输出中,您需要设备ID号码(例如:YOGAA1BBB412)。要获取设备ID,我使用以下adb命令:

adb -s YOGAA1BBB412 shell getprop | grep product.model

输出结果如下:
[ro.product.model]: [Lenovo YT3-X90F]

你可能认为adb devices默认会显示这个。感谢您的帮助。 - Joshua Pinter
啊,没错。你只需要使用 -l 标志来获得长输出。 - Joshua Pinter

6
尝试使用ANDROID_ID。正如文档所述,“[它]在第一次启动时随机生成,并应在设备的生命周期内保持不变”。

1
你有任何想法如何从adb访问它吗? - user163757
据我所知,最可靠的方法是创建一个应用程序将(ANDROID_ID)复制到数据库中。然后,您可以通过adb访问此数据库(使用来自shell的sqlite3命令)。 - Andrzej Duś
我自己没有测试过,但你可能也会发现 ANDROID_ID 已经存储在以下位置:
  • /data/data/com.android.providers.settings/databases/settings.db - 表 secure
  • /data/data/com.google.android.googleapps/databases/gls.db - 表 meta
- Andrzej Duś

4

请运行以下命令,确保您的设备已连接。

adb devices -l

之后,您可以运行以下命令获取该设备的Android ID。

adb shell content query --uri content://settings/secure --where "name=\'android_id\'"

1

adb shell settings get secure android_id

这个命令返回ANDROID_ID,但它可能与代码级别接收到的ANDROID_ID不同。应用程序可以使用不同的min API级别,从adb shell获取的值可能不匹配。
在API级别23中,可以从[net.hostname]属性获取ANDROID_ID。
获取API级别23的android_id的命令为:

adb shell getprop net.hostname

在Android 8.0及以上版本中,由于Android隐私政策的更改,此属性返回null。因此,ANDROID_ID不再是唯一设备ID比较的可靠方法。

0

使用 getprop net.hostname 命令,该命令包含一个Android唯一标识符,后面跟着关键字android-<64位十六进制字符串>

例如:

[net.hostname]: [android-a487e0560d669e4a]

0
尝试这个,找到 Android 旁边的 id。该命令基本上提供了关于手机的所有信息。
adb -s <YOUR-DEVICE-ID> shell getprop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接