ADB也就是Android Debug Bridge,是我们开发调试Android时必不可少的工具。ADB功能强大操作简单,那么就让我们一起来看下都有哪些奇技淫巧吧。Here we go!

adb start-server

注:要是英语好,本文绝大多数命令都可以通过 adb --help 找到

常用命令

adb基本命令

# 开启ADB服务
adb start-server
# 关闭ADB服务
adb kill-server
# 查看连接的设备
adb devices
# 安装应用
adb install <apkfile>
# 卸载应用
adb uninstall <package>
# 将手机中的文件下载到电脑中(前一个参数是文件在设备中的路径,后一个参数是要将文件下载到的路径)
adb pull /sdcard/Download/xxx ~/Desktop/
# 将电脑中的文件上传到手机中(前一个参数是文件在电脑中的路径,后一个参数是要将文件上传到的路径)
adb push ~/Desktop/xxx /sdcard/Download/
# 重启手机
adb reboot
# 查看指定 tag 日志
adb logcat -s <tag>
# 清除日志缓存
adb logcat -c
# 通过 tcp/ip 连接手机,默认端口 5555(需要在手机中开启wifi adb)
adb connect <host:port>

adb shell下的命令

# 通过scheme启动APP(示例中是微信的scheme)
adb shell am start -d weixin://
# 通过包名/Activity类名启动APP
adb shell am start -n <package/package-activity>
# 通过包名强制停止APP
adb shell am force-stop <package>
# 查看当前手机安装的所有包名
adb shell pm list packages
# 列出指定包名对应的apk路径
adb shell pm path <package>
# 清空指定包名对应的应用的数据和缓存文件
adb shell pm clear <package>
# 录制屏幕操作视频到sd卡并命名为 test.mp4
# 如果想停止录制,按 Ctrl + C,否则三分钟后会自动停止录制
adb shell screenrecord /sdcard/test.mp4
# 截屏命令
adb shell screencap -p /sdcard/screen.png

奇技淫巧

adb基本命令

# 从电脑端踢出连接以强制重新连接
adb reconnect
# 从手机端踢开连接强制重新连接
adb reconnect device
# 重置脱机/未授权设备以强制重新连接
adb reconnect offline
# 获取当前状态 offline | bootloader | device
adb get-state
# 等待设备变成期待的状态
# State包含: device, recovery, sideload, or bootloader
# Transport可选包含: usb, local, or any [default=any]
adb wait-for[-TRANSPORT]-STATE
# 获取序列号
adb get-serialno
# 覆盖安装(保留数据和缓存文件,重新安装apk)
adb install -r <apkfile>
# 安装apk到sd卡
adb install -s <apkfile>
# 卸载app但保留数据和缓存文件
adb uninstall -k <package>
# 重启到bootloader,即刷机模式
adb reboot bootloader
# 重启到recovery,即恢复模式
adb reboot recovery
# 查看指定 tag 日志,tag中:后面为log等级
# V—明细 D—调试 I—信息 W—警告 E—错误 F—严重错误 S—无记载
adb logcat <tag:level>
# 按照格式输出日志
# brief — 显示优先级/标记和原始进程的PID (默认格式)
# process — 仅显示进程PID
# tag — 仅显示优先级/标记
# thread — 仅显示进程:线程和优先级/标记
# raw — 显示原始的日志信息,没有其他的元数据字段
# time — 显示日期,调用时间,优先级/标记,PID
# long —显示所有的元数据字段并且用空行分隔消息内容
adb logcat -v <format>
# 选择打印日志的缓冲区
# radio — 查看包含在无线/电话相关的缓冲区消息
# events — 查看事件相关的消息
# main — 查看主缓冲区 (默认缓冲区)
adb logcat -b <buffer>
# 收集状态信息,里面包含有dmesg,dumpstate和dumpsys
adb bugreport > bugreport.log
# 收集kernel的log凡是跟kernel相关的,比如driver出了问题(相机,蓝牙,usb,启动,等等吧)
adb shell dmesg > ldmesg_kernel.log
# 收集所有关于系统的内容
adb shell dumpsys > dumpsys.txt

adb shell下的命令

实际为手机目录 /bin 下的命令,下面主要介绍Android特有的命令,其他命令和Linux无太大差别。

am

# 启动Service
adb shell am startservice [options] intent
# 发送广播
adb shell am broadcast [options] intent
adb shell am broadcast -a adnroid.intent.action.ACTION_SCREEN_ON
# 使用 Instrumentation 实例启动监控。通常,目标 component 是表单 test_package/runner_class
adb shell am instrument [options] component
# 强行停止与 package(应用的包名称)关联的所有应用
adb shell am force-stop package
# 终止与 package(应用的包名称)关联的所有进程。仅终止可安全终止且不会影响用户体验的进程。
adb shell am kill [options] package

ifconfig

# WIFI状态下查看当前IP
adb shell ifconfig | grep 192.168

dumpsys

# 查看最上层Activity名字
adb shell dumpsys activity activities | grep mResumedActivity
# 查看最上层Activity名字
adb shell dumpsys window w | grep / | grep name=
# 查看Activity的任务栈
adb shell dumpsys activity activities
# 显示所有的activities的信息,包括任务栈等:
adb shell dumpsys activity
# 显示accounts信息
adb shell dumpsys account
# 显示CPU信息
adb shell dumpsys cpuinfo
# 显示wifi信息
adb shell dumpsys wifi
# 显示键盘,窗口以及它们的关系
adb shell dumpsys window
# 显示分辨率
adb shell dumpsys window displays | grep DisplayFrames
# 查看UI绘制的各个层级信息
adb shell dumpsys SurfaceFlinger
# 查看耗电量
adb shell dumpsys batterystats <package>
# 获取安装包信息
adb shell dumpsys package <package>
# 查看每个应用的启动次数和时间
adb shell dumpsys usagestats <package>
# 显示状态栏相关的信息
adb shell dumpsys statusbar
# 显示内存信息
adb shell dumpsys meminfo <package/pid>
# 显示磁盘相关信息
adb shell dumpsys diskstats
# 显示电池相关信息
adb shell dumpsys battery
# 显示Alarm信息
adb shell dumpsys alarm

cat

# 查看内存信息
adb shell cat proc/meminfo
# 指定进程内存地址映射
adb shell cat proc/<pid>/maps
# 指定进程内存详细使用信息
adb shell cat proc/<pid>/smaps
# 获取CPU信息
adb shell cat /proc/cpuinfo
# --------- 需要root ---------

adb shell
su

# 获取机器MAC地址 按下面命令顺序执行(需要root的设备)
cat /sys/class/net/wlan0/address
# 查看IO内存分区
cat /proc/iomem
# 查看wifi密码
cat /data/misc/wifi/WifiConfigStore.xml
# 查看设备信息
cat /system/build.prop

exit
exit

getevent

# 查看可输入的设备
adb shell getevent -p

# 获得特定设备的输入信息
adb shell getevent </dev/input/event0>

input

# 点击
adb shell input tap <x> <y>

# 模拟按键 82为菜单键
adb shell input keyevent <keycode>

# 输入文本
adb shell input text XXXX

ps

# 查看相应包名的进程
adb shell ps | grep <package>

service

# 查看后台services信息
adb shell service list

screenrecord

# 限制视频录制时间为10s,如果不限制,默认180s
adb shell screenrecord  --time-limit 10 /sdcard/demo.mp4

# 指定视频分辨率大小
adb shell screenrecord --size 1280*720 /sdcard/demo.mp4

# 指定视频的比特率:
adb shell screenrecord --bit-rate 6000000 /sdcard/demo.mp4

# 在命令行显示log
adb shell screenrecord --time-limit 10 --verbose /sdcard/Download/demo.mp4

getprop

# 获取属性信息
adb shell getprop <key>

monkey

# usage: monkey
# [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
# [-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
# [--ignore-crashes] [--ignore-timeouts]
# [--ignore-security-exceptions]
# [--monitor-native-crashes] [--ignore-native-crashes]
# [--kill-process-after-error] [--hprof]
# [--match-description TEXT]
# [--pct-touch PERCENT] [--pct-motion PERCENT]
# [--pct-trackball PERCENT] [--pct-syskeys PERCENT]
# [--pct-nav PERCENT] [--pct-majornav PERCENT]
# [--pct-appswitch PERCENT] [--pct-flip PERCENT]
# [--pct-anyevent PERCENT] [--pct-pinchzoom PERCENT]
# [--pct-permission PERCENT]
# [--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]
# [--pkg-whitelist-file PACKAGE_WHITELIST_FILE]
# [--wait-dbg] [--dbg-no-events]
# [--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
# [--port port]
# [-s SEED] [-v [-v] ...]
# [--throttle MILLISEC] [--randomize-throttle]
# [--profile-wait MILLISEC]
# [--device-sleep-time MILLISEC]
# [--randomize-script]
# [--script-log]
# [--bugreport]
# [--periodic-bugreport]
# [--permission-target-system]
# COUNT
adb shell monkey -p <package> 500
基本参数 说明
-p 指定一个或多个包
-s 指定一个随机数生成器的seed值
--throttle 指定事件之间的固定延迟(ms)
-v 指定反馈信息级别(信息级别就是日志的详细程度)
-c 指定一个或多个类别名
-f 运行指定的monkey脚本
事件参数 说明
--pct-touch 指定触摸事件百分比
--pct-motion 指定动作事件百分比
--pct-trackball 指定轨迹事件百分比
--pct-syskeys 指定系统按键事件百分比
--pct-nav 指定基本导航事件百分比
--pct-majornav 指定主要导航事件百分比
--pct-appswitch 指定应用启动事件百分比
--pct-flip 指定flip(弹)事件的百分比
--pct-anyevent 指定其他类型事件百分比
--pct-pinchzoom 指定缩放(捏)事件百分比
--pct-permission 指定权限
调试参数 说明
--ignore-crashes 忽略因崩溃或异常引起的停止运行
--ignore-timeouts 忽略应用发生超时错误(ANR)
--ignore-security-exceptions 忽略应用发生任何权限错误
--monitor-native-crashes 监视并报告monkey运行时native code的崩溃事件
--ignore-native-crashes 忽略因native code的崩溃事件
--kill-process-after-error 在应用出错后通知系统杀死发生错误的进程
--hprof 在事件序列前后立即生成profilfing report
--dbg-no-events 监视应用程序所调用的包之间的转换
--wait-dbg 暂停执行中的monkey,直到有调试器与它连接

其他工具

# 查看Android应用包名package和入口activity名称
aapt dump badging ~/Downloads/app-release.apk