Is there an android shell or adb command that I could use to get a device's IMEI/MEID?

后端 未结 8 890
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-03 02:44

Is there some adb or android shell command that I could run that would return a device\'s IMEI or MEID number? Preferably that\'s all that would be returned.

相关标签:
8条回答
  • 2020-12-03 03:16

    For the IMEI, maybe this command is easier to understand

    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 gets the full result, for example
    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 trims away all columns except 52-66, using the above example
    ........3.5.7.4
    2.5.0.7.2.1.9.9
    4.7.2...       
    
    • and tr -d '.[:space:]' trims off any '.' and white space, using the example above
    357425072199472
    

    Warning A downside of this approach is that it is brittle, in the sense that the output must always be in the same format, having the exact same columns. I verified it on CentOs and OS X, but an update to the adb version could break this command simply by adjusting the whitespace in the output.

    0 讨论(0)
  • 2020-12-03 03:17

    The following ADB command works for me to get the IMEI:

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

    0 讨论(0)
  • 2020-12-03 03:18

    For IMEI you can use:

    adb shell service call iphonesubinfo 1 | awk -F "'" '{print $2}' | sed '1 d' | tr -d '.' | awk '{print}' ORS=
    
    0 讨论(0)
  • 2020-12-03 03:22

    This works for me on my nexus 5 and moto 5G.

    output:

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

    It requires:

    • UBS debugging ON (developer options)
    • adb (Android SDK Platform Tools)
    0 讨论(0)
  • 2020-12-03 03:30

    As the iphonesubinfo 1 command does not work on many devices, here is a little workaround that should work consistently on most Android versions and on rooted and unrooted devices:

    If you already have an own app that you can install on the device that you want to know the IMEI from, add this BroadcastReceiver to your app:

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

    and to the AndroidManifest.xml:

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

    Call your receiver over ADB:

    adb shell am broadcast -a com.myapp.GET_IMEI
    

    ...and the output will be something like:

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

    ...where data is the device IMEI.

    If you have don't have an existing app to integrate this solution into, I created this simple one which includes the required code: https://github.com/saschoar/android-imei-getter (also includes the APK and full instructions).

    0 讨论(0)
  • 2020-12-03 03:31

    For ESN you can do

    service call iphonesubinfo 16

    at least it gives me the right one on Motorola Photon Q.

    To clean it up (assuming you have shell on the device and have a capable busybox there, if not I highly recommend one):

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

    For MEID with cleanup:

    service call iphonesubinfo 1 | busybox awk -F "'" '{print $2}' | busybox sed 's/[^0-9A-F]*//g' | busybox tr -d '\n' && echo
    
    0 讨论(0)
提交回复
热议问题