Wo finde ich die ANDROID_ID auf meinem Gerät?

11

Ich weiß, dass Sie IMEI- und MAC-Adressen und andere finden können, indem Sie zu gehen Settings -> About phone -> Status. Sie können IMEI auch finden, indem Sie *#06#auf der Tastatur tippen. Gibt es eine Möglichkeit, die ANDROID_ID auf dem Telefon selbst abzurufen, anstatt über diesen Code?

Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID);
Kalinka
quelle

Antworten:

8

Sie können dies über tun adb. Benötigt meines Wissens kein Root (getestet auf einem Galaxy Nexus mit 4.2.1, das aus einer AOSP-Quelle erstellt wurde):

shell@android:/ $ content query --uri content://settings/secure --projection value --where "name='android_id'"
  settings/secure --projection value --where "name='android_id'"                
  Row: 0 value=<your ID in hexadecimal>
shell@android:/ $
Eldarerathis
quelle
2
Wenn Sie über eine Terminalemulator-App ausgeführt werden, ist root erforderlich.
Liam W
adb hat mehr Berechtigungen als der lokale Shell-Benutzer. Mit Android 4.x (ICS und höher) können Sie sogar eine vollständige Sicherung über ADB auf einem nicht gerooteten Gerät durchführen - was der Shell-Benutzer mit Sicherheit nicht kann.
Izzy
6

settings get secure android_idfrom adb shellist das einfachste, finde ich - keine fremde Ausgabe und benötigt kein root. (Von einem normalen Terminal auf dem Gerät ist root erforderlich.)

shell@mydevice:/ $ settings get secure android_id
0123456789abcdef
shell@mydevice:/ $ 
Matthew Read
quelle
So gelangen Sie in die ADB-Shell: 1. Gehen Sie android_sdk/platform-tools/mit cmd oder einem anderen Terminal zu. 2. um adb deviceszu überprüfen, ob Ihr Handy über USB gefunden werden kann. 3. adb shell. 4. Führen Sie in dieser Antwort den Befehl aus.
NumesSanguis
2

Da die Eldarerathis-Variante für mich nicht funktioniert hat und ich keine App nur dafür installieren wollte, habe ich einen anderen Weg gefunden. Einziger möglicher Nachteil: Es erfordert root.

adb shell
$ su
# cd /data/data/com.android.providers.settings/databases
# sqlite3 settings.db
sql> select * from secure where name='android_id';
26|android_id|1234567890abcdef1

Das android_idbefindet sich hier in der dritten Spalte (im Beispiel anonymisiert).


BEARBEITEN:

Beachten Sie, dass dies nicht die android_idvon dem Google Apps verwendet. Google scheint sich hier für einige Verwirrung entschieden zu haben. Für Play Services gibt es eine separate android_idvon GTalk gespeicherte Datei , auf die in einem Blogbeitrag hingewiesen wird (siehe auch diese Antwort von HassleFixes , dem Autor von StripSearch , und hat dies dankenswerterweise in den Kommentaren hervorgehoben):

  • Rufen Sie Ihren Dialer an
  • wählen *#*#8255#*#*
  • Achten Sie auf "Geräte-ID"
  • Entfernen Sie die Führung android-
  • Was bleibt, ist das android_idvon Google Services verwendete

Ich habe Folgendes überprüft: Das auf android_iddiese Weise abgerufene Gerät funktioniert auf einem Gerät ohne installierte Google-Apps (verwendet mit dem vom NOGAPPS- Projekt bereitgestellten BlankStore ).

Izzy
quelle
2

Die oben genannte Antwort hat $ content query --uri content://settings/secure --projection value --where "name='android_id'"darin

Wenn Sie dies über die Shell ausführen, müssen Sie die Anführungszeichen um android_id umgehen, da sie sonst interpretiert werden und die SQL-Anweisung sie nicht enthält, was zu einer unbekannten Spalte führt.

Mein voller Befehl von Bash sieht Linie ...
$ adb shell content query --uri content://settings/secure --projection value --where "name=\'android_id\'"

^ Nicht genug Ruf, um die Antwort zu kommentieren, die es oben vorgeschlagen hat

chrisinajar
quelle
So'ne Art. Die Antwort von @ eldarerathis startete eine Shell auf dem Gerät mit adb shellund führte dann einen weiteren Befehl innerhalb dieser Shell aus. Dies funktioniert einwandfrei, ohne den Anführungszeichen zu entgehen. Ihre Antwort besteht darin, einen einzelnen Befehl auf dem Hauptcomputer auszuführen. Dafür müssen Sie den Anführungszeichen entkommen.
Mark