Is there an android shell or adb command that I co

2019-01-11 13:00发布

问题:

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.

回答1:

I figured out how to do this. You need to run adb shell dumpsys iphonesubinfo in a shell. It will give you a bit more than you need, but it will also return IMEI or MEID number.

Edit (2017): In Android 5.0+ you'll need to use the service call command. More info about that can be found here.



回答2:

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


回答3:

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).



回答4:

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)


回答5:

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

Android ID=

adb shell settings get secure android_id



回答6:

For IMEI you can use:

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


回答7:

Just run ./adb devices and it lists all connected IMEIs.



标签: android adb