2011-03-30 110 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