Obtenga el número IMEI con el comando ADB

Estoy trabajando con ADB en mi dispositivo Samsung Galaxy. Quiero obtener el número IMEI del dispositivo usando ADB, pero no he podido hacerlo.

Intenté lo siguiente:

adb shell dumpsys iphonesubinfo

pero no devuelve nada.

También probé con el comando de llamada de servicio:

adb shell service call iphonesubinfo

pero me da un resultado extraño como este:

Result: Parcel(                                                        
0x00000000: 00000000 0000000f 00350033 00390038 '........3.5.8.9.'    
0x00000010: 00320037 00380030 00350034 00350031 '7.2.0.8.4.5.1.5.'   
0x00000020: 00300031 00000033                   '1.0.3...        ')

Puede alguien ayudarme con esto?

Podría intentar llamar a una intención como la siguiente: am start -a android.intent.action.DIAL -d "tel:*%2306%23"
@esQmo_ Pero eso solo abrirá el Marcador con el código de obtención de IMEI. No uso para hacer nada manualmente.

Respuestas (7)

Intenta poner este código en un archivo .bat y ejecútalo:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=6*" %%a in ('adb shell "service call iphonesubinfo 1 ^| grep -m 1 \"'\""') do (
set imei1=%%a)
for /f "tokens=6*" %%b in ('adb shell "service call iphonesubinfo 1 ^| grep -m 2 \"'\""') do (
set imei2=%%b)
for /f "tokens=4*" %%c in ('adb shell "service call iphonesubinfo 1 ^| grep -m 3 \"'\""') do (
set imei3=%%c) 
set imei=!imei1!!imei2!!imei3!
echo !imei! > imei.txt
for /f "delims=" %%d in (imei.txt) do (
set DeviceIMEI=%%d
set DeviceIMEI=!DeviceIMEI:'=!
set DeviceIMEI=!DeviceIMEI:.=!
set OIMEI=Phone IMEI  !DeviceIMEI!
)
echo %OIMEI%
pause

Lo obtuve de este hilo de StackOverflow: https://stackoverflow.com/a/34362809/8173870

Dada la etiqueta , asumo que tiene o está apuntando a Android Nougat. Android Nougat viene con toybox que actúa como una alternativa a busybox y tiene algunas utilidades útiles. Me las arreglé para usar esas herramientas para imprimir IMEI así:

adb shell
service call iphonesubinfo 1 | toybox cut -d "'" -f2 | toybox grep -Eo '[0-9]' | toybox xargs | toybox sed 's/\ //g'

Dado que no obtendría un shell interactivo al usar un script o una aplicación, puede pasar los comandos de esta manera:

adb shell "service call iphonesubinfo 1 | toybox cut -d \"'\" -f2 | toybox grep -Eo '[0-9]' | toybox xargs | toybox sed 's/\ //g'"

El siguiente comando ADB funciona en mi PC con Windows para obtener un resultado claro de IMEI:

adb shell "service call iphonesubinfo 4 | cut -c 52-66 | tr -d '.[:space:]'"

gracias por compartir el mejor código. Obtengo el resultado de IMEI con este código, pero solo muestra el primer IMEI. Si quiero obtener el resultado 2nd IMEI, ¿cuál deberíamos poner el código? gracias por las respuestas
Cambié el código de iphonesubinfo 1a iphonesubinfo 4, que es el código de servicio correcto para obtener el IMEI completo . Así que intente: adb shell "service call iphonesubinfo 4 | cut -c 52-66 | tr -d '.[:space:]'", y vea si obtiene también IMEI 2.

Usando android-svc :

android-svc --adb call 'iphonesubinfo.getDeviceId();'

devolvería algo como esto:

358972084515103

Puede que no te hayas dado cuenta, pero en realidad has publicado la respuesta a tu propia pregunta:

  Result: Parcel(                                                        
0x00000000: 00000000 0000000f 00350033 00390038 '........3.5.8.9.'    
0x00000010: 00320037 00380030 00350034 00350031 '7.2.0.8.4.5.1.5.'   
0x00000020: 00300031 00000033                   '1.0.3...        ')

Específicamente, la porción a la derecha:

'........3.5.8.9.'
'7.2.0.8.4.5.1.5.'         
'1.0.3...        '

Simplemente póngalo todo en una línea y elimine las comillas simples y se convierte en:

........3.5.8.9.7.2.0.8.4.5.1.5.1.0.3...

Ahora quita los puntos y obtienes:

358972084515103 

(también conocido como su número IMEI)

esim imei está disponible a través de:

input keyevent KEYCODE_CALL;
sleep 1;
input text '*#06#'; 
uiautomator dump --compressed /dev/stdout\
    |tr ' ' '\n'\
    |awk -F'"' '{print $2}'|grep "^[0-9]\{15\}$" \
    |nl -w 1 -s':'\
    |sed 's/^/IMEI/g'
IMEI1:xxxxxxxxxxxxx
IMEI2:xxxxxxxxxxxxx

adb shell dumpsys iphonesubinfofunciona solo para teléfonos por debajo de Android 5 Lolipop.

Debido a que Android Nougat tiene más de 5.0, necesita:adb shell service call iphonesubinfo 1 | awk -F "'" '{print $2}' | sed '1 d' | tr -d '.' | awk '{print}' ORS=

estoy usando Windows como sistema operativo, por lo que me da error awk no encontrado. ¿Cuál sería el equivalente de awk en el símbolo del sistema de Windows?
No hay equivalente a awk en Windows. Pero simplemente puede instalar todas las herramientas * nix también en Windows. Una forma muy sencilla de hacerlo es scoop. O debe crear una herramienta de Windows que analice el resultado de la línea de comandos sin esas herramientas.