我们曾经使用以下命令获取设备ID/IMEI:
adb shell dumpsys iphonesubinfo
但自从上一次 Android 更新(5.0 - 棒棒糖)以来,该命令不再返回任何内容。我在 Nexus 4 和 Nexus 5 上都进行了测试。
我知道我可以从代码中获取 IMEI,这仍然有效,但是否有人有 ADB 的解决方法?
我们曾经使用以下命令获取设备ID/IMEI:
adb shell dumpsys iphonesubinfo
但自从上一次 Android 更新(5.0 - 棒棒糖)以来,该命令不再返回任何内容。我在 Nexus 4 和 Nexus 5 上都进行了测试。
我知道我可以从代码中获取 IMEI,这仍然有效,但是否有人有 ADB 的解决方法?
您始终可以使用service call
命令调用服务方法。
android-5.0.0_r1
中iphonesubinfo
服务的交易代码如下:
1 getDeviceId
2 getDeviceIdForSubscriber
3 getImeiForSubscriber
4 getDeviceSvn
5 getSubscriberId
6 getSubscriberIdForSubscriber
7 getGroupIdLevel1
8 getGroupIdLevel1ForSubscriber
9 getIccSerialNumber
10 getIccSerialNumberForSubscriber
11 getLine1Number
12 getLine1NumberForSubscriber
13 getLine1AlphaTag
14 getLine1AlphaTagForSubscriber
15 getMsisdn
16 getMsisdnForSubscriber
17 getVoiceMailNumber
18 getVoiceMailNumberForSubscriber
19 getCompleteVoiceMailNumber
20 getCompleteVoiceMailNumberForSubscriber
21 getVoiceMailAlphaTag
22 getVoiceMailAlphaTagForSubscriber
23 getIsimImpi
24 getIsimDomain
25 getIsimImpu
26 getIsimIst
27 getIsimPcscf
28 getIsimChallengeResponse
29 getIccSimChallengeResponse
大多数方法需要root
权限。但幸运的是,获取设备IMEI/MEID所需的getDeviceId
不需要。
要在设备端正确解析service call
命令输出并且不依赖于外部组件,请参阅我的这里的回答。
还可以阅读从ADB Shell调用Android服务了解更多详情。
getDeviceId
不需要 root
。 - Alex P.Sim卡1的IMEI
adb shell service call iphonesubinfo 1 | awk -F "'" '{print $2}' | sed '1 d' | tr -d '.' | awk '{print}' ORS=
adb shell“service call iphonesubinfo 1 | awk -F \"'\" '{print $2}' | sed '1 d' | tr -d '.' | awk '{print}' ORS="
- Robyer获取设备IMEI的ADB命令:
adb shell "service call iphonesubinfo 1 | cut -c 52-66 | tr -d '.[:space:]'"
获取设备手机号码的ADB命令:
adb shell "service call iphonesubinfo 18 | cut -c 52-66 | tr -d '.[:space:]+'"
获取Android ID的ADB命令:
adb shell settings get secure android_id
获取设备序列号的ADB命令:
adb shell getprop ro.serialno
注意:以上所有命令均无需root权限。
我同意Alex P和Jeremy的看法,我们可以通过服务调用获取电话IMEI,但这会产生复杂的数据包,难以查看。由于我不是程序员,所以经过很多尝试和研究命令行,我找到了一个解决方案,可以单独获取IMEI,并决定分享它,因为它可以帮助很多人。
以下是我制作的从Lollypop 5.1中获取IMEI的脚本,它适用于非root手机。
@echo off
setlocal enabledelayedexpansion
for /f "tokens=6*" %%a in ('adb shell "service call iphonesubinfo 1 ^| grep -m 1 \"'\""') do (
set imei1=%%a)
for /f "tokens=6*" %%b in ('adb shell "service call iphonesubinfo 1 ^| grep -m 2 \"'\""') do (
set imei2=%%b)
for /f "tokens=4*" %%c in ('adb shell "service call iphonesubinfo 1 ^| grep -m 3 \"'\""') do (
set imei3=%%c)
set imei=!imei1!!imei2!!imei3!
echo !imei! > imei.txt
for /f "delims=" %%d in (imei.txt) do (
set DeviceIMEI=%%d
set DeviceIMEI=!DeviceIMEI:'=!
set DeviceIMEI=!DeviceIMEI:.=!
set OIMEI=Phone IMEI !DeviceIMEI!
)
echo %OIMEI%
pause
这将导致“手机IMEI '无论是什么手机IMEI'”。 请记住,它只会显示默认用于呼叫的SIM卡插槽的IMEI。 如果有人可以简化此脚本,那就太棒了。
adb shell dumpsys iphonesubinfo > info.txt
,4.4.2将信息放入了文件中,而5.0没有。 - BlackHatSamurai