Onde posso encontrar o ANDROID_ID no meu dispositivo?

11

Eu sei que você pode encontrar o endereço IMEI e MAC e outros acessando Settings -> About phone -> Status. Você também pode encontrar IMEI digitando *#06#no teclado. Existe alguma maneira de obter o ANDROID_ID no próprio telefone, ao contrário desse código?

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

Respostas:

8

Você pode fazer isso via adb. Não requer raiz, tanto quanto eu sei (testado em um Galaxy Nexus executando 4.2.1 construído a partir da fonte 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
fonte
2
Se estiver executando através de um aplicativo emulador de terminal, é necessário fazer root.
Liam W
O adb tem mais privilégios que o usuário local do shell. Com o Android 4.x (ICS e superior), você pode até fazer um backup completo via ADB em um dispositivo não raiz - o que o usuário do shell com certeza não pode.
Izzy
6

settings get secure android_idde adb shellé o mais simples, eu acho - sem saída estranha e não requer raiz. (A partir de um terminal comum no dispositivo, é necessário root.)

shell@mydevice:/ $ settings get secure android_id
0123456789abcdef
shell@mydevice:/ $ 
Matthew Read
fonte
Para entrar no shell adb: 1. Vá para android_sdk/platform-tools/com o cmd ou outro terminal. 2. adb devicespara verificar se o seu celular pode ser encontrado via USB. 3 adb shell. 4. Execute o comando nesta resposta.
NumesSanguis 5/05
2

Como a variante eldarerathis não funcionou para mim e eu não queria instalar um aplicativo apenas para isso, encontrei uma maneira diferente. Única desvantagem possível: requer raiz.

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

O android_idé encontrado na terceira coluna aqui (anonimizado no exemplo).


EDITAR:

Observe que esse NÃO é o android_idusado pelos aplicativos do Google. O Google parece ter decidido por alguma confusão aqui. Para o Play Services , há um arquivo separado android_idarmazenado pelo GTalk , como apontado por uma postagem do blog (também veja esta resposta por HassleFixes , que é o autor do StripSearch , e felizmente apontou isso nos comentários):

  • ligue para seu discador
  • discar *#*#8255#*#*
  • atente para "ID do dispositivo"
  • remova o líder android-
  • o que resta é o android_idusado pelos serviços do Google

Eu verifiquei que: o android_idrecuperado dessa maneira funciona bem em um dispositivo sem o Google Apps instalado (usado com o BlankStore fornecido pelo projeto NOGAPPS ).

Izzy
fonte
2

A resposta acima tem $ content query --uri content://settings/secure --projection value --where "name='android_id'"nele

Se você estiver executando isso no shell, precisará escapar das aspas em torno de android_id, caso contrário elas serão interpretadas e a instrução SQL não as possui, resultando em uma coluna desconhecida.

Meu comando completo do bash parece linha ...
$ adb shell content query --uri content://settings/secure --projection value --where "name=\'android_id\'"

^ Reputação insuficiente para comentar a resposta que a sugeriu acima

chrisinajar
fonte
Mais ou menos. A resposta de @ eldarerathis iniciou um shell no dispositivo e adb shell, em seguida, executou outro comando dentro desse shell. Isso funciona bem sem escapar das aspas. Sua resposta está executando um único comando na máquina principal; para isso, você precisa escapar das aspas.
Mark