是否有一个android shell或adb命令,我可以使用它来获取设备的IMEI / MEID?

时间:2011-07-27 22:40:47

标签: android adb

是否有一些我可以运行的adb或android shell命令会返回设备的IMEI或MEID号码?最好是返回所有内容。

9 个答案:

答案 0 :(得分:51)

我想出了如何做到这一点。您需要在shell中运行adb shell dumpsys iphonesubinfo。它会给你一些比你需要的更多,但它也会返回IMEI或MEID号码。

编辑(2017):在Android 5.0+中,您需要使用service call命令。有关详细信息,请访问here

答案 1 :(得分:4)

以下ADB命令对我有用,以获得IMEI:

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

答案 2 :(得分:3)

对于ESN,您可以

服务电话iphonesubinfo 16

至少它给了我一个关于摩托罗拉Photon Q的正确的。

要清理它(假设你在设备上有shell并且有一个有能力的busybox,如果不是我强烈推荐一个):

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

对于带清理的MEID:

 <a href="url/RollBearing.html" id="various2">
 <img class="rollingbearingdefects" src="img/hotspot.png"
    onmouseover="this.src='img/RollingBearingDefects2.png';"
    onmouseout="this.src='img/hotspot.png';" /></a>

答案 3 :(得分:2)

由于iphonesubinfo 1命令在许多设备上不起作用,因此这里有一些解决方法可以在大多数Android版本以及root和无根设备上保持一致:

如果您已经有自己的应用程序可以安装在想要了解IMEI的设备上,请将此BroadcastReceiver添加到您的应用中:

public class GetImeiReceiver extends BroadcastReceiver {

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

}

AndroidManifest.xml

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

通过亚行呼叫您的接收方:

adb shell am broadcast -a com.myapp.GET_IMEI

...输出结果如下:

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

...其中data是设备IMEI。

如果您没有现成的应用程序来集成此解决方案,我创建了这个简单的应用程序,其中包含所需的代码: https://github.com/saschoar/android-imei-getter(还包括APK和完整说明)。

答案 4 :(得分:1)

这适用于我的nexus 5和moto 5G。

<强>输出:

[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]

脚本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 ' ')]"

需要:

答案 5 :(得分:1)

对于IMEI,您可以使用:

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

答案 6 :(得分:0)

IMEI- adb shell服务调用iphonesubinfo 1 | awk -F&#34;&#39;&#34; &#39; {print $ 2}&#39; | sed&#39; 1 d&#39; | sed's /.// g&#39; | awk&#39; {print}&#39; ORS =&#39;&#39;

Android ID =

adb shell设置获得安全android_id

答案 7 :(得分:0)

对于IMEI,也许此命令更容易理解

db -s <device id> shell  service call iphonesubinfo 1 | cut -c 52-66 | tr -d '.[:space:]'
    例如,
  • db -s <device id> shell service call iphonesubinfo 1获得完整结果
Result: Parcel(
      0x00000000: 00000000 0000000f 00350033 00340037 '........3.5.7.4.'
      0x00000010: 00350032 00370030 00310032 00390039 '2.5.0.7.2.1.9.9.'
      0x00000020: 00370034 00000032                   '4.7.2...        ')
  • cut -c 52-66使用上述示例修剪掉52-66以外的所有列
........3.5.7.4
2.5.0.7.2.1.9.9
4.7.2...       
  • tr -d '.[:space:]'修剪掉所有的'。'和空白,使用上面的示例
357425072199472

警告 这种方法的缺点是它很脆弱,从某种意义上说,输出必须始终采用相同的格式,并具有完全相同的列。我已经在CentO和OS X上对其进行了验证,但是对adb版本的更新可能仅通过调整输出中的空格即可破坏此命令。

答案 8 :(得分:-18)

只需运行./adb devices,它就会列出所有连接的IMEI。