ADB—查看设备信息

ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。
注: 有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。

  • [查看设备信息]
    • [型号]
    • [电池状况]
    • [屏幕分辨率]
    • [屏幕密度]
    • [显示屏参数]
    • [android_id]
    • [IMEI]
    • [Android 系统版本]
    • [IP 地址]
    • [Mac 地址]
    • [CPU 信息]
    • [内存信息]
    • [更多硬件与系统属性]
查看设备信息 型号
命令:
adb shell getprop ro.product.model

输出示例:
Nexus 5

电池状况
命令:
adb shell dumpsys battery

输入示例:
Current Battery Service state: AC powered: false USB powered: true Wireless powered: false status: 2 health: 2 present: true level: 44 scale: 100 voltage: 3872 temperature: 280 technology: Li-poly

其中 scale 代表最大电量,level 代表当前电量。上面的输出表示还剩下 44% 的电量。
屏幕分辨率
命令:
adb shell wm size

输出示例:
Physical size: 1080x1920

该设备屏幕分辨率为 1080px * 1920px。
如果使用命令修改过,那输出可能是:
Physical size: 1080x1920 Override size: 480x1024

表明设备的屏幕分辨率原本是 1080px * 1920px,当前被修改为 480px * 1024px。
屏幕密度
命令:
adb shell wm density

输出示例:
Physical density: 420

【ADB—查看设备信息】该设备屏幕密度为 420dpi。
如果使用命令修改过,那输出可能是:
Physical density: 480 Override density: 160

表明设备的屏幕密度原来是 480dpi,当前被修改为 160dpi。
显示屏参数
命令:
adb shell dumpsys window displays

输出示例:
WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays) Display: mDisplayId=0 init=1080x1920 420dpi cur=1080x1920 app=1080x1794 rng=1080x1017-1810x1731 deferred=false layoutNeeded=false

其中 mDisplayId 为 显示屏编号,init 是初始分辨率和屏幕密度,app 的高度比 init 里的要小,表示屏幕底部有虚拟按键,高度为 1920 - 1794 = 126px 合 42dp。
android_id
命令:
adb shell settings get secure android_id

输出示例:
51b6be48bac8c569

IMEI
在 Android 4.4 及以下版本可通过如下命令获取 IMEI:
adb shell dumpsys iphonesubinfo

输出示例:
Phone Subscriber Info: Phone Type = GSM Device ID = 860955027785041

其中的 Device ID 就是 IMEI。
而在 Android 5.0 及以上版本里这个命令输出为空,得通过其它方式获取了(需要 root 权限):
adb shell su service call iphonesubinfo 1

输出示例:
Result: Parcel( 0x00000000: 00000000 0000000f 00360038 00390030 '........8.6.0.9.' 0x00000010: 00350035 00320030 00370037 00350038 '5.5.0.2.7.7.8.5.' 0x00000020: 00340030 00000031'0.4.1...')

把里面的有效内容提取出来就是 IMEI 了,比如这里的是 860955027785041
参考:adb shell dumpsys iphonesubinfo not working since Android 5.0 Lollipop
Android 系统版本
命令:
adb shell getprop ro.build.version.release

输出示例:
5.0.2

IP 地址
每次想知道设备的 IP 地址的时候都得「设置」-「关于手机」-「状态信息」-「IP地址」很烦对不对?通过 adb 可以方便地查看。
命令:
adb shell ifconfig | grep Mask

输出示例:
inet addr:10.130.245.230Mask:255.255.255.252 inet addr:127.0.0.1Mask:255.0.0.0

那么 10.130.245.230 就是设备 IP 地址。
在有的设备上这个命令没有输出,如果设备连着 WiFi,可以使用如下命令来查看局域网 IP:
adb shell ifconfig wlan0

输出示例:
wlan0: ip 10.129.160.99 mask 255.255.240.0 flags [up broadcast running multicast]


wlan0Link encap:UNSPEC inet addr:10.129.168.57Bcast:10.129.175.255Mask:255.255.240.0 inet6 addr: fe80::66cc:2eff:fe68:b6b6/64 Scope: Link UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1 RX packets:496520 errors:0 dropped:0 overruns:0 frame:0 TX packets:68215 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3000 RX bytes:116266821 TX bytes:8311736

如果以上命令仍然不能得到期望的信息,那可以试试以下命令(部分系统版本里可用):
adb shell netcfg

输出示例:
wlan0UP10.129.160.99/200x00001043 f8:a9:d0:17:42:4d loUP127.0.0.1/80x00000049 00:00:00:00:00:00 p2p0UP0.0.0.0/00x00001003 fa:a9:d0:17:42:4d sit0DOWN0.0.0.0/00x00000080 00:00:00:00:00:00 rmnet0DOWN0.0.0.0/00x00000000 00:00:00:00:00:00 rmnet1DOWN0.0.0.0/00x00000000 00:00:00:00:00:00 rmnet3DOWN0.0.0.0/00x00000000 00:00:00:00:00:00 rmnet2DOWN0.0.0.0/00x00000000 00:00:00:00:00:00 rmnet4DOWN0.0.0.0/00x00000000 00:00:00:00:00:00 rmnet6DOWN0.0.0.0/00x00000000 00:00:00:00:00:00 rmnet5DOWN0.0.0.0/00x00000000 00:00:00:00:00:00 rmnet7DOWN0.0.0.0/00x00000000 00:00:00:00:00:00 rev_rmnet3 DOWN0.0.0.0/00x00001002 4e:b7:e4:2e:17:58 rev_rmnet2 DOWN0.0.0.0/00x00001002 4e:f0:c8:bf:7a:cf rev_rmnet4 DOWN0.0.0.0/00x00001002 a6:c0:3b:6b:c4:1f rev_rmnet6 DOWN0.0.0.0/00x00001002 66:bb:5d:64:2e:e9 rev_rmnet5 DOWN0.0.0.0/00x00001002 0e:1b:eb:b9:23:a0 rev_rmnet7 DOWN0.0.0.0/00x00001002 7a:d9:f6:81:40:5a rev_rmnet8 DOWN0.0.0.0/00x00001002 4e:e2:a9:bb:d0:1b rev_rmnet0 DOWN0.0.0.0/00x00001002 fe:65:d0:ca:82:a9 rev_rmnet1 DOWN0.0.0.0/00x00001002 da:d8:e8:4f:2e:fe

可以看到网络连接名称、启用状态、IP 地址和 Mac 地址等信息。
Mac 地址
命令:
adb shell cat /sys/class/net/wlan0/address

输出示例:
f8:a9:d0:17:42:4d

这查看的是局域网 Mac 地址,移动网络或其它连接的信息可以通过前面的小节「IP 地址」里提到的 adb shell netcfg 命令来查看。
CPU 信息
命令:
adb shell cat /proc/cpuinfo

输出示例:
Processor: ARMv7 Processor rev 0 (v7l) processor: 0 BogoMIPS: 38.40processor: 1 BogoMIPS: 38.40processor: 2 BogoMIPS: 38.40processor: 3 BogoMIPS: 38.40Features: swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt CPU implementer : 0x51 CPU architecture: 7 CPU variant: 0x2 CPU part: 0x06f CPU revision: 0Hardware: Qualcomm MSM 8974 HAMMERHEAD (Flattened Device Tree) Revision: 000b Serial: 0000000000000000

这是 Nexus 5 的 CPU 信息,我们从输出里可以看到使用的硬件是 Qualcomm MSM 8974,processor 的编号是 0 到 3,所以它是四核的,采用的架构是 ARMv7 Processor rev 0 (v71)
内存信息
命令:
adb shell cat /proc/meminfo

输出示例:
MemTotal:1027424 kB MemFree:486564 kB Buffers:15224 kB Cached:72464 kB SwapCached:24152 kB Active:110572 kB Inactive:259060 kB Active(anon):79176 kB Inactive(anon):207736 kB Active(file):31396 kB Inactive(file):51324 kB Unevictable:3948 kB Mlocked:0 kB HighTotal:409600 kB HighFree:132612 kB LowTotal:617824 kB LowFree:353952 kB SwapTotal:262140 kB SwapFree:207572 kB Dirty:0 kB Writeback:0 kB AnonPages:265324 kB Mapped:47072 kB Shmem:1020 kB Slab:57372 kB SReclaimable:7692 kB SUnreclaim:49680 kB KernelStack:4512 kB PageTables:5912 kB NFS_Unstable:0 kB Bounce:0 kB WritebackTmp:0 kB CommitLimit:775852 kB Committed_AS:13520632 kB VmallocTotal:385024 kB VmallocUsed:61004 kB VmallocChunk:209668 kB

其中,MemTotal 就是设备的总内存,MemFree 是当前空闲内存。
更多硬件与系统属性
设备的更多硬件与系统属性可以通过如下命令查看:
adb shell cat /system/build.prop

这会输出很多信息,包括前面几个小节提到的「型号」和「Android 系统版本」等。
输出里还包括一些其它有用的信息,它们也可通过 adb shell getprop <属性名> 命令单独查看,列举一部分属性如下:
属性名 含义
ro.build.version.sdk SDK 版本
ro.build.version.release Android 系统版本
ro.build.version.security_patch Android 安全补丁程序级别
ro.product.model 型号
ro.product.brand 品牌
ro.product.name 设备名
ro.product.board 处理器型号
ro.product.cpu.abilist CPU 支持的 abi 列表[节注一]
persist.sys.isUsbOtgEnabled 是否支持 OTG
dalvik.vm.heapsize 每个应用程序的内存上限
ro.sf.lcd_density 屏幕密度
节注一:
一些小厂定制的 ROM 可能修改过 CPU 支持的 abi 列表的属性名,如果用 ro.product.cpu.abilist 属性名查找不到,可以这样试试:
adb shell cat /system/build.prop | grep ro.product.cpu.abi

示例输出:
ro.product.cpu.abi=armeabi-v7a ro.product.cpu.abi2=armeabi

    推荐阅读