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é.
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 .
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
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).
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:
adb
( Outils de la plateforme du SDK Android )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
Pour IMEI, vous pouvez utiliser:
adb Shell service call iphonesubinfo 1 | awk -F "'" '{print $2}' | sed '1 d' | tr -d '.' | awk '{print}' ORS=