Android 调试桥 (adb)
1- 基本用法
1.1- 命令语法
adb 命令的基本语法如下:
adb [-d|-e|-s <serialNumber>] <command>
如果只有一个设备/模拟器连接时,可以省略掉 [-d|-e|-s ] 这一部分,直接使用 adb 。
如果有多个设备/模拟器连接,则需要为命令指定目标设备。
参数 | 含义 |
---|---|
-d | 指定当前唯一通过 USB 连接的 Android 设备为命令目标 |
-e | 指定当前唯一运行的模拟器为命令目标 |
-s <serialNumber> | 指定相应 serialNumber 号的设备/模拟器为命令目标 |
在多个设备/模拟器连接的情况下较常用的是 -s 参数,serialNumber 可以通过 adb devices 命令获取
1.2- 启动/停止
启动 adb server 命令:
adb start-server
(一般无需手动执行此命令,在运行 adb 命令时若发现 adb server 没有启动会自动调起。)
停止 adb server 命令:
adb kill-server
1.3- 查看 adb 版本
adb version
示例输出:
apple@fenglolodeMacBook-Pro ~ % adb devices -l
List of devices attached
8b112f28 device usb:336658432X product:virgo model:MI_NOTE_LTE device:virgo transport_id:3
1.4- 以 root 权限运行 adbd
adb 的运行原理是 PC 端的 adb server 与手机端的守护进程 adbd 建立连接,然后 PC 端的 adb client 通过 adb server 转发命令,adbd 接收命令后解析运行。
所以如果 adbd 以普通权限执行,有些需要 root 权限才能执行的命令无法直接用 adb xxx 执行。这时可以 adb shell 然后 su 后执行命令,也可以让 adbd 以 root 权限执行,这个就能随意执行高权限命令了。
命令:
adb root
正常输出:
restarting adbd as root
现在再运行 adb shell,看看命令行提示符是不是变成 # 了?
有些手机 root 后也无法通过 adb root 命令让 adbd 以 root 权限执行,比如三星的部分机型,会提示 adbd cannot run as root in production builds,此时可以先安装 adbd Insecure,然后 adb root 试试。
相应地,如果要恢复 adbd 为非 root 权限的话,可以使用 adb unroot 命令。
1.5- 指定 adb server 的网络端口
命令:
adb -P <port> start-server
默认端口为 5037。
2- 设备连接管理
2.1- 查询已连接设备/模拟器
命令:
adb devices
输出示例:
List of devices attached
cf264b8f device
emulator-5554 device
10.129.164.6:5555 device
输出格式为 [serialNumber] [state],serialNumber 即我们常说的 SN,state 有如下几种:
offline —— 表示设备未连接成功或无响应。
device —— 设备已连接。注意这个状态并不能标识 Android 系统已经完全启动和可操作,在设备启动过程中设备实例就可连接到 adb,但启动完毕后系统才处于可操作状态。
no device —— 没有设备/模拟器连接。
3- 应用管理
3.1- 查看应用列表
查看应用列表的基本命令格式是
adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]
即在 adb shell pm list packages 的基础上可以加一些参数进行过滤查看不同的列表,支持的过滤参数如下:
参数 | 显示列表 |
---|---|
无 | 所有应用 |
-f | 显示应用关联的 apk 文件 |
-d | 只显示 disabled 的应用 |
-e | 只显示 enabled 的应用 |
-s | 只显示系统应用 |
-3 | 只显示第三方应用 |
-i | 显示应用的 installer |
-u | 包含已卸载应用 |
<FILTER> | 包名包含 <FILTER> 字符串 |
所有应用
命令:
adb shell pm list packages
系统应用
命令:
adb shell pm list packages -s
第三方应用
命令:
adb shell pm list packages -3
3.2- 安装 APK
命令格式:
adb install [-lrtsdg] <path_to_apk>
参数:
adb install 后面可以跟一些可选参数来控制安装 APK 的行为,可用参数及含义如下:
参数 | 含义 |
---|---|
-l | 将应用安装到保护目录 /mnt/asec |
-r | 允许覆盖安装 |
-t | 允许安装 AndroidManifest.xml 里 application 指定 android:testOnly=“true” 的应用 |
-s | 将应用安装到 sdcard |
-d | 允许降级覆盖安装 |
-g | 授予所有运行时权限 |
3.3- 卸载应用
命令:
adb uninstall [-k] <packagename>
<packagename> 表示应用的包名,-k 参数可选,表示卸载应用但保留数据和缓存目录。
命令示例:
adb uninstall com.qihoo360.mobilesafe
表示卸载 360 手机卫士。
3.4- 清除应用数据与缓存
命令:
adb shell pm clear <packagename>
<packagename> 表示应用名包,这条命令的效果相当于在设置里的应用信息界面点击了「清除缓存」和「清除数据」。
命令示例:
adb shell pm clear com.qihoo360.mobilesafe
表示清除 360 手机卫士的数据和缓存。
3.5- 查看应用详细信息
命令:
adb shell dumpsys package <packagename>
输出中包含很多信息,包括 Activity Resolver Table、Registered ContentProviders、包名、userId、安装后的文件资源代码等路径、版本信息、权限信息和授予状态、签名版本信息等。
<packagename> 表示应用包名。
输出示例:
Activity Resolver Table:
Schemes:
ytmbank:
67a95af com.zjrc.cba/com.yitong.mobile.biz.launcher.app.SplashActivity
Non-Data Actions:
android.intent.action.MAIN:
67a95af com.zjrc.cba/com.yitong.mobile.biz.launcher.app.SplashActivity
cn.jiguang.privates.intent.PushActivity:
273dbc com.zjrc.cba/cn.jiguang.privates.push.ui.PushActivity
cn.jiguang.privates.intent.JNotifyActivity:
ecc145 com.zjrc.cba/cn.jiguang.privates.push.service.JNotifyActivity
Receiver Resolver Table:
Non-Data Actions:
cn.jpush.android.intent.WakedReceiver:
80f809a com.zjrc.cba/.push.biz.PushWakedResultReceiver
com.xiaomi.mipush.MESSAGE_ARRIVED:
8e4ddcb com.zjrc.cba/cn.jiguang.privates.push.xiaomi.receiver.XiaomiMessageReceiver
com.xiaomi.mipush.ERROR:
8e4ddcb com.zjrc.cba/cn.jiguang.privates.push.xiaomi.receiver.XiaomiMessageReceiver
com.huawei.android.push.intent.REGISTRATION:
b0879a8 com.zjrc.cba/com.huawei.hms.support.api.push.PushReceiver
android.net.conn.CONNECTIVITY_CHANGE:
79d2cc1 com.zjrc.cba/cn.jiguang.privates.core.service.PushReceiver
fd50c66 com.zjrc.cba/com.xiaomi.push.service.receivers.NetworkStatusReceiver
com.huawei.intent.action.PUSH_DELAY_NOTIFY:
4618ba7 com.zjrc.cba/com.huawei.hms.support.api.push.PushMsgReceiver
cn.jiguang.privates.intent.NOTIFICATION_RECEIVED_PROXY:
79d2cc1 com.zjrc.cba/cn.jiguang.privates.core.service.PushReceiver
com.zjrc.cba.config.action:
3f8854 com.zjrc.cba/.config.biz.ConfigReceiver
com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK:
b8ed3fd com.zjrc.cba/cn.jiguang.privates.push.meizu.receiver.MeizuMessageReceiver
cn.jiguang.privates.intent.RECEIVE_MESSAGE:
31588f2 com.zjrc.cba/.push.biz.PushMessageReceiver
com.huawei.android.push.intent.RECEIVE:
b0879a8 com.zjrc.cba/com.huawei.hms.support.api.push.PushReceiver
com.meizu.c2dm.intent.RECEIVE:
b8ed3fd com.zjrc.cba/cn.jiguang.privates.push.meizu.receiver.MeizuMessageReceiver
com.vivo.pushclient.action.RECEIVE:
d113b43 com.zjrc.cba/cn.jiguang.privates.push.vivo.receiver.VivoMessageReceiver
com.meizu.cloud.pushservice.action.PUSH_SERVICE_START:
936d5c0 com.zjrc.cba/com.meizu.cloud.pushsdk.SystemReceiver
com.meizu.flyme.push.intent.MESSAGE:
b8ed3fd com.zjrc.cba/cn.jiguang.privates.push.meizu.receiver.MeizuMessageReceiver
com.meizu.c2dm.intent.REGISTRATION:
b8ed3fd com.zjrc.cba/cn.jiguang.privates.push.meizu.receiver.MeizuMessageReceiver
android.intent.action.USER_PRESENT:
79d2cc1 com.zjrc.cba/cn.jiguang.privates.core.service.PushReceiver
com.xiaomi.push.PING_TIMER:
3f9b2f9 com.zjrc.cba/com.xiaomi.push.service.receivers.PingReceiver
com.xiaomi.mipush.RECEIVE_MESSAGE:
8e4ddcb com.zjrc.cba/cn.jiguang.privates.push.xiaomi.receiver.XiaomiMessageReceiver
com.meizu.flyme.push.intent.REGISTER.FEEDBACK:
b8ed3fd com.zjrc.cba/cn.jiguang.privates.push.meizu.receiver.MeizuMessageReceiver
com.huawei.intent.action.PUSH:
4618ba7 com.zjrc.cba/com.huawei.hms.support.api.push.PushMsgReceiver
Service Resolver Table:
Non-Data Actions:
com.huawei.push.msg.NOTIFY_MSG:
b6f423e com.zjrc.cba/com.huawei.hms.support.api.push.service.HmsMsgService
cn.jpush.android.intent.DaemonService:
e82489f com.zjrc.cba/cn.jpush.android.service.DaemonService
com.heytap.mcs.action.RECEIVE_MCS_MESSAGE:
9938dec com.zjrc.cba/cn.jiguang.privates.push.oppo.service.OppoHeytapService
com.coloros.mcs.action.RECEIVE_MCS_MESSAGE:
99985b5 com.zjrc.cba/cn.jiguang.privates.push.oppo.service.OppoColorosService
com.huawei.push.msg.PASSBY_MSG:
b6f423e com.zjrc.cba/com.huawei.hms.support.api.push.service.HmsMsgService
cn.jiguang.privates.intent.USER_SERVICE:
c19444a com.zjrc.cba/.push.biz.PushService
com.huawei.push.action.MESSAGING_EVENT:
4cccfbb com.zjrc.cba/cn.jiguang.privates.push.huawei.service.HuaweiMessageService
Permissions:
Permission [com.zjrc.cba.permission.PROCESS_PUSH_MSG] (8219cd8):
sourcePackage=com.zjrc.cba
uid=10091 gids=null type=0 prot=signature|privileged
perm=Permission{b29c831 com.zjrc.cba.permission.PROCESS_PUSH_MSG}
packageSetting=PackageSetting{2af5b16 com.zjrc.cba/10091}
Permission [com.zjrc.cba.permission.PUSH_WRITE_PROVIDER] (b6eac97):
sourcePackage=com.zjrc.cba
uid=10091 gids=null type=0 prot=signature|privileged
perm=Permission{a7fae84 com.zjrc.cba.permission.PUSH_WRITE_PROVIDER}
packageSetting=PackageSetting{2af5b16 com.zjrc.cba/10091}
Permission [com.zjrc.cba.push.permission.MESSAGE] (da1b66d):
sourcePackage=com.zjrc.cba
uid=10091 gids=null type=0 prot=signature
perm=Permission{8be12a2 com.zjrc.cba.push.permission.MESSAGE}
packageSetting=PackageSetting{2af5b16 com.zjrc.cba/10091}
Permission [com.zjrc.cba.permission.JPUSH_MESSAGE] (de77b33):
sourcePackage=com.zjrc.cba
uid=10091 gids=null type=0 prot=signature
perm=Permission{f8b2ef0 com.zjrc.cba.permission.JPUSH_MESSAGE}
packageSetting=PackageSetting{2af5b16 com.zjrc.cba/10091}
Permission [com.zjrc.cba.permission.C2D_MESSAGE] (4304c69):
sourcePackage=com.zjrc.cba
uid=10091 gids=null type=0 prot=signature
perm=Permission{20eb6ee com.zjrc.cba.permission.C2D_MESSAGE}
packageSetting=PackageSetting{2af5b16 com.zjrc.cba/10091}
Permission [com.zjrc.cba.config.send] (614978f):
sourcePackage=com.zjrc.cba
uid=10091 gids=null type=0 prot=signature
perm=Permission{48c4a1c com.zjrc.cba.config.send}
packageSetting=PackageSetting{2af5b16 com.zjrc.cba/10091}
Permission [com.zjrc.cba.permission.MIPUSH_RECEIVE] (bf84625):
sourcePackage=com.zjrc.cba
uid=10091 gids=null type=0 prot=signature
perm=Permission{3b353fa com.zjrc.cba.permission.MIPUSH_RECEIVE}
packageSetting=PackageSetting{2af5b16 com.zjrc.cba/10091}
Permission [com.zjrc.cba.permission.PUSH_PROVIDER] (44d1dab):
sourcePackage=com.zjrc.cba
uid=10091 gids=null type=0 prot=signature|privileged
perm=Permission{121ec08 com.zjrc.cba.permission.PUSH_PROVIDER}
packageSetting=PackageSetting{2af5b16 com.zjrc.cba/10091}
Registered ContentProviders:
com.zjrc.cba/com.huawei.hms.update.provider.UpdateProvider:
Provider{78c1fa1 com.zjrc.cba/com.huawei.hms.update.provider.UpdateProvider}
com.zjrc.cba/com.yitong.miniprogram.framework.android.provider.YTFileProvider:
Provider{fd2b5c6 com.zjrc.cba/com.yitong.miniprogram.framework.android.provider.YTFileProvider}
com.zjrc.cba/com.huawei.hms.support.api.push.PushProvider:
Provider{d3de987 com.zjrc.cba/com.huawei.hms.support.api.push.PushProvider}
com.zjrc.cba/cn.jiguang.privates.core.service.DataProvider:
Provider{5edc0b4 com.zjrc.cba/cn.jiguang.privates.core.service.DataProvider}
com.zjrc.cba/cn.jpush.android.service.DownloadProvider:
Provider{62a14dd com.zjrc.cba/cn.jpush.android.service.DownloadProvider}
com.zjrc.cba/android.support.v4.content.FileProvider:
Provider{2346852 com.zjrc.cba/android.support.v4.content.FileProvider}
com.zjrc.cba/com.huawei.agconnect.core.provider.AGConnectInitializeProvider:
Provider{9859723 com.zjrc.cba/com.huawei.agconnect.core.provider.AGConnectInitializeProvider}
com.zjrc.cba/com.yitong.mobile.framework.utils.YTFileProvider:
Provider{a003420 com.zjrc.cba/com.yitong.mobile.framework.utils.YTFileProvider}
ContentProvider Authorities:
[com.zjrc.cba.DownloadProvider]:
Provider{62a14dd com.zjrc.cba/cn.jpush.android.service.DownloadProvider}
applicationInfo=ApplicationInfo{2b821d9 com.zjrc.cba}
[com.zjrc.cba.miniprogram.provider]:
Provider{fd2b5c6 com.zjrc.cba/com.yitong.miniprogram.framework.android.provider.YTFileProvider}
applicationInfo=ApplicationInfo{2b821d9 com.zjrc.cba}
[com.zjrc.cba.hms.update.provider]:
Provider{78c1fa1 com.zjrc.cba/com.huawei.hms.update.provider.UpdateProvider}
applicationInfo=ApplicationInfo{2b821d9 com.zjrc.cba}
[com.zjrc.cba.huawei.push.provider]:
Provider{d3de987 com.zjrc.cba/com.huawei.hms.support.api.push.PushProvider}
applicationInfo=ApplicationInfo{2b821d9 com.zjrc.cba}
[com.zjrc.cba.provider]:
Provider{2346852 com.zjrc.cba/android.support.v4.content.FileProvider}
applicationInfo=ApplicationInfo{2b821d9 com.zjrc.cba}
[com.zjrc.cba.AGCInitializeProvider]:
Provider{9859723 com.zjrc.cba/com.huawei.agconnect.core.provider.AGConnectInitializeProvider}
applicationInfo=ApplicationInfo{2b821d9 com.zjrc.cba}
[com.zjrc.cba.DataProvider]:
Provider{5edc0b4 com.zjrc.cba/cn.jiguang.privates.core.service.DataProvider}
applicationInfo=ApplicationInfo{2b821d9 com.zjrc.cba}
Key Set Manager:
[com.zjrc.cba]
Signing KeySets: 198
Packages:
Package [com.zjrc.cba] (2af5b16):
userId=10091
pkg=Package{98cb79e com.zjrc.cba}
codePath=/data/app/com.zjrc.cba-1
dexoptNeeded=false
resourcePath=/data/app/com.zjrc.cba-1
legacyNativeLibraryDir=/data/app/com.zjrc.cba-1/lib
primaryCpuAbi=armeabi-v7a
secondaryCpuAbi=null
versionCode=100 targetSdk=30
versionName=1.1.0
splits=[base]
applicationInfo=ApplicationInfo{2b821d9 com.zjrc.cba}
flags=[ DEBUGGABLE HAS_CODE ALLOW_CLEAR_USER_DATA LARGE_HEAP ]
dataDir=/data/user/0/com.zjrc.cba
supportsScreens=[small, medium, large, xlarge, resizeable, anyDensity]
timeStamp=2020-11-23 16:09:48
firstInstallTime=2020-11-23 16:10:03
lastUpdateTime=2020-11-23 16:10:03
signatures=PackageSignatures{310827f [304724c]}
installPermissionsFixed=true installStatus=1
pkgFlags=[ DEBUGGABLE HAS_CODE ALLOW_CLEAR_USER_DATA LARGE_HEAP ]
declared permissions:
com.zjrc.cba.config.send: prot=signature, INSTALLED
com.zjrc.cba.permission.PROCESS_PUSH_MSG: prot=signature|privileged, INSTALLED
com.zjrc.cba.permission.PUSH_PROVIDER: prot=signature|privileged, INSTALLED
com.zjrc.cba.permission.PUSH_WRITE_PROVIDER: prot=signature|privileged, INSTALLED
com.zjrc.cba.permission.JPUSH_MESSAGE: prot=signature, INSTALLED
com.zjrc.cba.push.permission.MESSAGE: prot=signature, INSTALLED
com.zjrc.cba.permission.C2D_MESSAGE: prot=signature, INSTALLED
com.zjrc.cba.permission.MIPUSH_RECEIVE: prot=signature, INSTALLED
requested permissions:
android.permission.READ_PHONE_STATE
android.permission.ACCESS_NETWORK_STATE
android.permission.INTERNET
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.CALL_PHONE
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_WIFI_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.ACCESS_COARSE_LOCATION
android.permission.USE_FINGERPRINT
android.permission.REQUEST_INSTALL_PACKAGES
android.permission.VIBRATE
android.permission.SYSTEM_ALERT_WINDOW
android.permission.CAMERA
android.permission.FLASHLIGHT
android.permission.READ_CONTACTS
android.permission.READ_EXTERNAL_STORAGE
android.permission.GET_TASKS
android.permission.RESTART_PACKAGES
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.WAKE_LOCK
android.permission.RECEIVE_USER_PRESENT
android.permission.MOUNT_UNMOUNT_FILESYSTEMS
android.permission.ACCESS_BACKGROUND_LOCATION
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
android.permission.READ_PRECISE_PHONE_STATE
com.zjrc.cba.permission.PROCESS_PUSH_MSG
com.zjrc.cba.permission.PUSH_PROVIDER
com.huawei.appmarket.service.commondata.permission.GET_COMMON_DATA
android.permission.WRITE_CONTACTS
android.permission.READ_CALENDAR
android.permission.WRITE_CALENDAR
com.zjrc.cba.permission.JPUSH_MESSAGE
com.meizu.flyme.push.permission.RECEIVE
com.zjrc.cba.push.permission.MESSAGE
com.meizu.c2dm.permission.RECEIVE
com.zjrc.cba.permission.C2D_MESSAGE
com.coloros.mcs.permission.RECIEVE_MCS_MESSAGE
com.heytap.mcs.permission.RECIEVE_MCS_MESSAGE
com.zjrc.cba.permission.MIPUSH_RECEIVE
install permissions:
android.permission.RESTART_PACKAGES: granted=true
com.zjrc.cba.permission.PROCESS_PUSH_MSG: granted=true
com.zjrc.cba.push.permission.MESSAGE: granted=true
android.permission.BLUETOOTH: granted=true
android.permission.GET_TASKS: granted=true
android.permission.INTERNET: granted=true
com.zjrc.cba.permission.JPUSH_MESSAGE: granted=true
android.permission.BLUETOOTH_ADMIN: granted=true
com.zjrc.cba.permission.C2D_MESSAGE: granted=true
com.zjrc.cba.permission.MIPUSH_RECEIVE: granted=true
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS: granted=true
android.permission.CHANGE_WIFI_STATE: granted=true
android.permission.FLASHLIGHT: granted=true
android.permission.ACCESS_NETWORK_STATE: granted=true
android.permission.USE_FINGERPRINT: granted=true
com.zjrc.cba.permission.PUSH_PROVIDER: granted=true
android.permission.VIBRATE: granted=true
android.permission.ACCESS_WIFI_STATE: granted=true
android.permission.REQUEST_INSTALL_PACKAGES: granted=true
android.permission.WAKE_LOCK: granted=true
User 0: installed=true hidden=false stopped=true notLaunched=false enabled=0
gids=[3002, 3003, 3001]
runtime permissions:
android.permission.READ_PHONE_STATE: granted=true
android.permission.CAMERA: granted=true
disabledComponents:
com.xiaomi.push.service.XMPushService
enabledComponents:
cn.jpush.android.service.DaemonService
cn.jpush.android.service.DownloadProvider
3.6- 查看应用安装路径
命令:
adb shell pm path <PACKAGE>
输出应用安装路径
输出示例:
adb shell pm path ecarx.weather
package:/data/app/ecarx.weather-1.apk
4- 文件管理
4.1- 复制设备里的文件到电脑
命令:
adb pull <设备里的文件路径> [电脑上的目录]
其中 电脑上的目录 参数可以省略,默认复制到当前目录。
例:
adb pull /sdcard/sr.mp4 ~/tmp/
小技巧:设备上的文件路径可能需要 root 权限才能访问,如果你的设备已经 root 过,可以先使用 adb shell 和 su 命令在
adb shell 里获取 root 权限后,先 cp /path/on/device /sdcard/filename 将文件复制到
sdcard,然后 adb pull /sdcard/filename /path/on/pc。
4.2- 复制电脑里的文件到设备
命令:
adb push <电脑上的文件路径> <设备里的目录>
例:
adb push ~/sr.mp4 /sdcard/
小技巧:设备上的文件路径普通权限可能无法直接写入,如果你的设备已经 root 过,可以先 adb push /path/on/pc
/sdcard/filename,然后 adb shell 和 su 在 adb shell 里获取 root 权限后,cp
/sdcard/filename /path/on/device。
5- 查看日志
5.1- Android 日志
命令格式:
[adb] logcat [<option>] ... [<filter-spec>] ...
5.1.1- 按级别过滤日志
Android 的日志分为如下几个优先级(priority):
V —— Verbose(最低,输出得最多)
D —— Debug
I —— Info
W —— Warning
E —— Error
F —— Fatal
S —— Silent(最高,啥也不输出)
按某级别过滤日志则会将该级别及以上的日志输出。
比如,命令:
adb logcat *:W
会将 Warning、Error、Fatal 和 Silent 日志输出。
(注: 在 macOS 下需要给 :W 这样以 * 作为 tag 的参数加双引号,如 adb logcat ":W",不然会报错 no
matches found: *:W。)
5.1.2- 按 tag 和级别过滤日志
可以由多个 [:priority] 组成。
比如,命令:
adb logcat ActivityManager:I MyApp:D *:S
表示输出 tag ActivityManager 的 Info 以上级别日志,输出 tag MyApp 的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)。
5.2- 常用打印日志命令
- 命令行打印日志
adb logcat -v time
- 输出日志到本地 log.txt 文件
adb logcat -v time >log.txt
- 清空日志
adb logcat -c
6- 查看设备信息
6.1- 型号
命令:
adb shell getprop ro.product.model
输出示例:
Nexus 5
6.2- 电池状况
命令:
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% 的电量。
6.3- 屏幕分辨率
命令:
adb shell wm size
输出示例:
Physical size: 1080x1920
6.4- android_id
命令:
adb shell settings get secure android_id
输出示例:
51b6be48bac8c569
6.5- Android 系统版本
命令:
adb shell getprop ro.build.version.release
输出示例:
5.0.2
7- 实用功能
7.1- 屏幕截图
截图保存到电脑:
adb exec-out screencap -p > sc.png
如果 adb 版本较老,无法使用 exec-out 命令,这时候建议更新 adb 版本。无法更新的话可以使用以下麻烦点的办法:
先截图保存到设备里:
adb shell screencap -p /sdcard/sc.png
然后将 png 文件导出到电脑:
adb pull /sdcard/sc.png
7.2- 屏幕录制
录制屏幕以 mp4 格式保存到 /sdcard:
adb shell screenrecord /sdcard/filename.mp4
需要停止时按 Ctrl-C,默认录制时间和最长录制时间都是 180 秒。
如果需要导出到电脑:
adb pull /sdcard/filename.mp4
7.3- 重启手机
命令:
adb reboot
7.4- 检测设备是否已 root
命令:
adb shell
su
此时命令行提示符是 $ 则表示没有 root 权限,是 # 则表示已 root。
7.5- 使用 Monkey 进行压力测试
Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。
简单用法:
adb shell monkey -p <packagename> -v 500
表示向 指定的应用程序发送 500 个伪随机事件。