web-dev-qa-db-fra.com

Existe-t-il un Android Shell ou une commande adb que je pourrais utiliser pour obtenir l'IMEI/MEID d'un périphérique?

Existe-t-il une commande adb ou Android Shell que je pourrais exécuter qui renverrait le numéro IMEI ou MEID d'un périphérique? De préférence c'est tout ce qui serait retourné. 

28
someoneHuman

J'ai compris comment faire cela. Vous devez exécuter adb Shell dumpsys iphonesubinfo dans un shell. Cela vous donnera un peu plus que ce dont vous avez besoin, mais cela retournera également un numéro IMEI ou MEID.

Modifier (2017): sous Android 5.0+, vous devez utiliser la commande service call. Plus d'informations à ce sujet peuvent être trouvées ici .

51
someoneHuman

Pour ESN, vous pouvez faire

appel de service iphonesubinfo 16

au moins ça me donne le bon sur Motorola Photon Q.

Pour le nettoyer (en supposant que vous avez Shell sur l'appareil et que vous disposez d'une busybox capable, sinon je vous en recommande une):

    service call iphonesubinfo 16 | busybox awk -F "'" '{print $2}' | busybox sed 's/[^0-9A-F]*//g' | busybox tr -d '\n' && echo

Pour MEID avec nettoyage:

service call iphonesubinfo 1 | busybox awk -F "'" '{print $2}' | busybox sed 's/[^0-9A-F]*//g' | busybox tr -d '\n' && echo
3
Sasha Pachev

Comme la commande iphonesubinfo 1 ne fonctionne pas sur de nombreux périphériques, voici une solution de contournement qui devrait fonctionner de manière cohérente sur la plupart des versions d'Android et sur les périphériques enracinés et non enracinés:

Si vous possédez déjà une propre application que vous pouvez installer sur le périphérique à partir duquel vous souhaitez connaître l'IMEI, ajoutez cette BroadcastReceiver à votre application:

public class GetImeiReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String imei = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
        setResultData(imei);
    }

}

et au AndroidManifest.xml:

<receiver Android:name=".GetImeiReceiver">
  <intent-filter>
    <action Android:name="com.myapp.GET_IMEI"/>
  </intent-filter>
</receiver>

Appelez votre récepteur via ADB:

adb Shell am broadcast -a com.myapp.GET_IMEI

... et le résultat sera quelque chose comme:

Broadcast completed: result=0, data="000000000000000"

... où data est le périphérique IMEI.

Si vous n'avez pas d'application existante pour intégrer cette solution, j'ai créé celle-ci simple qui inclut le code requis: https://github.com/saschoar/Android-imei-getter ( comprend également l'APK et les instructions complètes).

2
saschoar

Cela fonctionne pour moi sur mon Nexus 5 et moto 5G. 

sortie:

[build.id]: [M4B30X]
[build.version.release]: [6.0.1]
[build.version.sdk]: [23]
[build.version.security_patch]: [2016-10-05]
[product.brand]: [google]
[product.manufacturer]: [LGE]
[product.model]: [Nexus 5]
[product.name]: [hammerhead]
[serialno]: [05xxxxxxxxxxx4]
[device.imei]: [xxxxxxxxxxxx]
[device.phonenumber]: [+xxxxxxxxxx]

Script: get.deviceinfo.bash

#!/bin/bash
# Get the device properties
adb Shell getprop | grep "model\|version.sdk\|manufacturer\|ro.serialno\|product.name\|brand\|version.release\|build.id\|security_patch" | sed 's/ro\.//g'
# get the device ime
echo "[device.imei]: [$(adb Shell service call iphonesubinfo 1 | awk -F "'" '{print $2}' | sed '1 d'| tr -d '\n' | tr -d '.' | tr -d ' ')]"
# get the device phone number
echo "[device.phonenumber]: [$(adb Shell service call iphonesubinfo 19 | awk -F "'" '{print $2}' | sed '1 d'| tr -d '\n' | tr -d '.' | tr -d ' ')]"

Cela requiert: 

1
angelous

IMEI - Appel du service shell adb iphonesubinfo 1 | awk -F "'"' {print $ 2} '| sed '1 d' | sed 's /.// g' | awk '{print}' ORS = ''

Identifiant Android =

les paramètres du shell adb sont sécurisés sous Android_id

0
mitesh

Pour IMEI, vous pouvez utiliser:

adb Shell service call iphonesubinfo 1 | awk -F "'" '{print $2}' | sed '1 d' | tr -d '.' | awk '{print}' ORS=
0
Joolah