Gdzie mogę znaleźć ANDROID_ID na moim urządzeniu?

11

Wiem, że możesz znaleźć IMEI i adres MAC i inne, przechodząc do Settings -> About phone -> Status. Możesz także znaleźć IMEI, pisząc *#06#na klawiaturze. Czy jest jakiś sposób na uzyskanie ANDROID_ID na samym telefonie, w przeciwieństwie do tego za pomocą tego kodu?

Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID);
Kalinka
źródło

Odpowiedzi:

8

Możesz to zrobić za pośrednictwem adb. O ile mi wiadomo nie wymaga rootowania (testowane na Galaxy Nexus z systemem 4.2.1 zbudowanym ze źródła AOSP):

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
źródło
2
W przypadku uruchamiania za pomocą aplikacji emulatora terminali wymagany jest root.
Liam W
adb ma więcej uprawnień niż lokalny użytkownik powłoki. W Androidzie 4.x (ICS i nowsze) możesz nawet wykonać pełną kopię zapasową za pomocą ADB na nie uruchomionym urządzeniu - czego z pewnością użytkownik powłoki nie może.
Izzy
6

settings get secure android_idz adb shelljest najprostszy, uważam - bez obcych danych wyjściowych i nie wymaga rootowania. (Ze zwykłego terminala na urządzeniu wymagany jest root).

shell@mydevice:/ $ settings get secure android_id
0123456789abcdef
shell@mydevice:/ $ 
Matthew Read
źródło
Aby dostać się do powłoki adb: 1. Przejdź do android_sdk/platform-tools/cmd lub innego terminala. 2. adb devicesaby sprawdzić, czy twój telefon komórkowy można znaleźć przez USB. 3 adb shell. 4. Uruchom polecenie w tej odpowiedzi.
NumesSanguis
2

Ponieważ wariant Eldarerathisa nie zadziałał i nie chciałem instalować aplikacji tylko do tego celu, znalazłem inny sposób. Jedyna możliwa wada: Wymaga rootowania.

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

android_idZnajduje się w trzeciej kolumnie (anonimowej tutaj w tym przykładzie).


EDYTOWAĆ:

Pamiętaj, że NIE jest to android_idużywane przez aplikacje Google. Wydaje się, że Google zdecydowało się na pewne zamieszanie. W przypadku Usług Play istnieje osobna pamięćandroid_id przechowywana przez GTalk , jak wskazał post na blogu (zobacz również odpowiedź HassleFixes , która jest autorką StripSearch i na szczęście wskazała to w komentarzach):

  • zadzwoń do swojego dialera
  • Wybierz *#*#8255#*#*
  • uważaj na „identyfikator urządzenia”
  • usuń wiodące android-
  • pozostaje, z czego android_idkorzystają usługi Google

Sprawdziłem, że: android_idpobrany w ten sposób sposób działa poprawnie na urządzeniu bez zainstalowanych Google-Apps (używanych z BlankStore dostarczonym przez projekt NOGAPPS ).

Izzy
źródło
2

Powyższa odpowiedź ma $ content query --uri content://settings/secure --projection value --where "name='android_id'"w sobie

Jeśli wykonujesz to z powłoki, musisz uciec od cudzysłowów wokół android_id, ponieważ zostaną one zinterpretowane, a instrukcja SQL ich nie ma, co spowoduje powstanie nieznanej kolumny.

Moje pełne polecenie z bash wygląda na linię ...
$ adb shell content query --uri content://settings/secure --projection value --where "name=\'android_id\'"

^ Za mało reputacji, aby skomentować odpowiedź, która sugerowała to powyżej

chrisinajar
źródło
Rodzaj. Odpowiedź @ eldarerathis uruchomiła powłokę na urządzeniu adb shell, a następnie uruchomiła inne polecenie w tej powłoce. Działa to dobrze bez uciekania się do cytatów. Twoja odpowiedź polega na uruchomieniu pojedynczego polecenia na głównym komputerze; w tym celu musisz uciec od cytatów.
Mark