2011-03-30 93 views
18

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

例如,当我使用adb'devices'命令时,我连接的设备的序列号被输出到屏幕上。我还没有在Android sdk中找到一个方法来获得相同的序列号。

我不在乎使用了哪个唯一标识符,只是可以从adb和android sdk中轻松检索到的东西。启动设备不会是一个选项。

+0

你能追踪装置,而不是设备?发现 – ridecar2 2012-04-25 15:17:02

+0

查看以下答案。 http://stackoverflow.com/a/23564966/884052 – 2014-05-09 12:49:18

回答

-2

你应该使用IMEI:

TelephonyManager m = (TelephonyManager) context 
      .getSystemService(Context.TELEPHONY_SERVICE); 
    String imei = m != null ? m.getDeviceId() : null; 
+0

IMEI可能不是一个很好的代理唯一标识符,因为你不能保证你的应用程序上运行的每个设备都将有一个单元无线电。鉴于您可以为android.hardware.telephony指定,我不建议假设电话硬件的存在。另一方面,如果您很高兴将您的应用限制为仅具有电话硬件的设备,那么这应该是可用的。 – RivieraKid 2011-03-30 13:29:37

2

尝试ANDROID_ID。正如文档中所说的“[它]是在第一次启动时随机生成的,并且应该在设备的整个生命周期内保持不变”。

+1

对adb如何访问有什么想法吗? – user163757 2011-03-30 14:19:40

+0

据我所知,最可靠的方法是创建一个将它复制到(ANDORID_ID)到数据库的应用程序。您可以通过adb访问此数据库(使用shell中的[sqlite3](http://developer.android.com/guide/developing/tools/adb.html#sqlite)命令)。 – 2011-03-30 14:57:40

+0

我没有自己测试过,但你也可能会发现ANDORID_ID已经存储在这个位置: - /data/data/com.android.providers.settings/databases/settings.db - 表安全 -/data/data/com.google.android.googleapps/databases/gls.db - 表meta – 2011-03-30 15:05:35

48

您可能想要使用ANDROID_ID。

这是你如何可以通过亚行外壳查询其值:

settings get secure android_id 

或者通过查询设置内容提供商:

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

内容似乎不是由shell发现的? – 2013-01-15 19:17:19

+0

只需在查询结尾处转义[']字符即可顺利运行。 – 2013-08-04 11:51:24

+3

或作为一个单一的oneliner:'adb外壳'设置得到安全android_id'' – ccpizza 2016-06-12 01:47:19

8

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

Android的ID是/data/data/com.android.providers.settings/databases/settings.db

所以亚行使用此命令可用。

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

**必须在亚行执行adb为根

+0

Thankyou,这对我有用。 – shshank 2013-10-17 14:23:06

+0

谢谢!它可以帮助我 – exbluesbreaker 2014-08-04 09:29:49

+1

作者已经提到,根设备不是一个选项 – 2015-07-24 20:22:45

4

Android的序列号可以在设备内retreived与getprop

getprop ro.serialno

从Java中,你可能希望执行它与Runtime.exec()

+2

序列号是**不**与android id相同。 – ccpizza 2016-06-12 01:48:37

+0

@ccpizza确切的,但OP要**任何**设备ID – McX 2016-06-13 13:53:48

0

试试这个,并找到除了Android的id。该命令基本上提供有关手机的所有信息。

adb -s <YOUR-DEVICE-ID> shell getprop 
0

我使用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] 
+0

你会认为'adb devices'会默认显示。谢谢你。 – 2018-01-12 18:01:24

+0

啊,它的确如此。你只需要使用'-l'标志来输出长时间。 – 2018-01-12 18:03:16