如何通过adb获取IMEI?

How to obtain IMEI via adb?

我正在尝试跟踪设备、SIM 卡和通话时间卡以进行测试。我有多个设备插入计算机,自从最近更新到 Android 12 后,我无法获取设备的 IMEI。 IMEI 基本上是设备的 FCC 要求的序列号,可以相对容易地从 UI 获得,但我如何通过 ADB 或在来自多个运营商和 OEM 的多个设备上以某种自动化方法获得它?

在 Android 12 FEB 补丁之前,我会使用 service call iphonesubinfo 1service call iphonesubinfo 4。但不幸的是,在更新之后我收到了 Result: Parcel(ffffffffc ffffffff 00000000 '................') 而之前我会收到一个包含 IMEI 的包裹以通过脚本进行处理。

有没有办法在 Android 12+ 上获取 IMEI?我试图远离使用应用程序。这是一件简单的事情,来自特权用户 (adb shell)。这似乎是跟踪和物流目的的基本必需品。

此命令可用于获取 IMEI。它的工作原理是按拨号键,然后键入 *#06#,然后解析屏幕上的文本以找到 IMEI 标签和下一个包含实际 IMEI 的元素。最后,它通过删除 text=" 之前和 ".

之后的所有内容来解析该元素
adb shell "imei=$(input keyevent KEYCODE_CALL;sleep 1;input text '*#06#'; uiautomator dump --compressed /dev/stdout|sed s/\>\<\/\n/g|grep -A1 IMEI|tail -n1|sed -e 's/.*text=\"//' -e 's/\".*//'); echo ${imei}"

要仅获取不带校验和的 16 位 IMEI,请将最后的 echo 语句替换为 echo ${imei:0:16}