adb常用命令整理

本文用于记录Android开发过程中常用的adb命令,本文持续更新…

概述

Android 调试桥 (adb) 是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。该工具作为一个客户端-服务器程序,包括三个组件:

  • 客户端(adb-client),该组件发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令从命令行终端调用客户端。
  • 后台程序(adbd),该组件在设备上运行命令。后台程序在每个模拟器或设备实例上作为后台进程运行。
  • 服务器(adb-server),该组件管理客户端和后台程序之间的通信。服务器在开发计算机上作为后台进程运行。

具体实现如图所示:

global options

-d :当 没有设备通过USB连接 或者 有两个或两个以上设备通过USB连接 时,使用该选项会报错;当有多个设备连接且 仅有一个设备通过USB连接 时,使用该选项会直接安装到通过USB连接的设备中

-e :当 没有设备通过TCP/IP连接 或者 有两个或两个以上设备通过TCP/IP连接 时,使用该选项会报错;当有多个设备连接且 仅有一个设备通过TCP/IP连接 时,使用该选项会直接安装到通过TCP/IP连接的设备中

-s SERIAL :同时连接多个设备时,可通过该选项根据 SERIAL 指定调试设备。SERIAL为设备序列号,可通过 adb devices 命令获取

-H :指定adb服务的host地址,默认为localhost

-P :指定adb服务的端口,默认为5037

general commands

adb devices :简要显示设备列表信息

adb devices -l :详细显示设备列表信息

adb help :最常用,不用记命令,即时查阅

adb version :显示adb版本信息及安装目录

networking

adb无线连接

执行以下两步即可:

  • adb tcpip 端口号
  • adb connect 设备当前所连WIFI的ip地址:端口号

connect

adb connect device_ip_address :连接ip地址为 device_ip_address ,端口为 5555 的设备。

adb connect device_ip_address:port :连接ip地址为 device_ip_address ,端口为 port 的设备

  • 若出现 unable to connect to device_ip_address:5555: Connection refused 错误,则需要先执行 adb tcpip device_ip_address 命令

disconnect

adb disconnect :断开所有通过TCP/IP连接的设备

adb disconnect device_ip_address :断开ip地址为 device_ip_address ,端口为 5555 的设备

adb disconnect device_ip_address:port :断开ip地址为 device_ip_address ,端口为 port 的设备

forward

adb forward tcp:port_pc tcp:port_device :开启adb端口转发,把发往电脑监听的 port_pc 端口的数据转发到设备监听的端口 port_device 中去, 尚未实际运用

adb forward --remove tcp:port_pc :停止 port_pc 端口的转发, 尚未实际运用

adb forward --remove-all :停止所有端口的转发, 尚未实际运用

file transfer

adb pull filepath_in_device filepath_in_pc :将设备中的文件上传到电脑

  • 例如: adb pull /sdcard/test.txt ./ 意思是将设备的sdcard目录下的test.txt文件上传到当前命令窗口中的当前目录下

adb push filepath_in_pc filepath_in_device :将电脑中的文件下载到设备中

  • 例如: adb push ./test.txt /sdcard/ 意思是将当前命令窗口中当前目录下的test.txt文件下载到设备的sdcard目录下

adb sync :把电脑端改动的内容拷贝到设备(默认为/system、/vendor、/oem(从Lollipop开始被添加,管理一些运营商的数据,如启动屏幕与铃声等等)、/data), 尚未理解

shell(只操作设备,不操作PC)

adb shell :运行设备的shell(命令行)

adb shell dmesg :输出设备内核日志

adb shell screencap -p filepath_in_device :截取屏幕并保存在 filepath_in_device 中,然后使用 adb pull filepath_in_device 命令即可上传截屏到PC中

adb shell screenrecord -p filepath_in_device :录制屏幕并保存在 filepath_in_device 中,然后使用 adb pull filepath_in_device 命令即可上传视频到PC中

adb shell cd folder_name :进入名称为 folder_name 的文件夹

adb shell rename old_file_path new_file_path :将 old_file_path 文件重命名为 new_file_path

adb shell input keyevent 3 :理论上是执行HMOE键,但是此类模拟按键输入的操作在小米4手机上都不成功。

getprop

adb shell getprop ro.product.model :获取设备型号

adb shell getprop ro.build.version.release :获取设备的Android系统版本

dumpsys

adb shell dumpsys battery :获取设备的电池状况

adb shell dumpsys window displays :获取设备显示屏参数信息

adb shell dumpsys iphonesubinfo :若设备Android版本小于等于4.4则可获取IMEI信息,反之需要root设备,再通过以下几步才能解决,注: 尚未验证

  • adb shell
  • su
  • service call iphonesubinfo 1

adb shell dumpsys activity :获取设备中所有应用的堆栈信息

adb shell dumpsys activity | grep package_name :获取设备中指定 package_name 的堆栈信息

adb shell dumpsys activity | grep mFocusedActivity :获取设备中处于栈顶的Activity信息

/frameworks/base/cmds/

wm(WindowManager)

Android KitKat 4.4.4_r1 源码地址: WM源码

adb shell wm size :获取设备屏幕分辨率

adb shell wm density :获取设备屏幕密度(单位:dpi)

am(ActivityManager)

Android KitKat 4.4.4_r1 源码地址: AM源码

adb shell am :可查看Activity Manager (am) 工具的使用命令,各命令具体含义可查看 adb官方中文文档#am

adb shell am start -n package_name/.activity_name :启动指定 package_name 的指定 activity_name

adb shell am startservice -n package_name/.service_name :启动指定 package_name 的指定 service_name

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n package_name/.receiver_name :向 package_namereceiver_name 发送一个BOOT_COMPLETED的广播

adb shell am force-stop package_name :强制关闭 package_name 对应的应用

pm(PackageManager)

Android KitKat 4.4.4_r1 源码地址: PM源码

adb shell pm :可查看软件包管理器 (pm) 工具的使用命令,各命令具体含义可查看 adb官方中文文档#pm

adb shell pm clear package_name :删除 package_name 对应应用的所有数据,需要有 android.permission.CLEAR_APP_USER_DATA 权限

list

adb shell pm list packages filter_name :显示设备中 包含filter_name的应用的包名 列表

adb shell pm list packages | grep filter_name :显示设备中 包含filter_name的应用的包名 列表

adb shell pm list packages :显示设备中 所有应用的包名 列表

adb shell pm list packages option :根据 option 的值显示设备中应用的信息,其中 option 有以下几种:

  • -f :显示设备中 所有应用的apk文件路径和包名 列表
  • -d :显示设备中 被disabled的应用的包名 列表
  • -e :显示设备中 被enabled的应用的包名 列表
  • -s :显示设备中 所有系统应用的包名 列表
  • -3 :显示设备中 所有第三方应用的包名 列表
  • -i :显示设备中 所有应用的installer(值默认为null,如果是通过应用商品下载的,值为该应用商品的包名) 列表
  • -u :显示设备中 所有已卸载应用的包名 列表, 不一定正确

/system/core/toolbox/

cat

Android KitKat 4.4.4_r1 源码地址: cat源码

adb shell cat /sys/class/net/wlan0/address :获取设备的MAC地址

adb shell cat /proc/cpuinfo :获取设备的CPU信息

adb shell cat /proc/stat :获取设备的CPU信息

adb shell cat /proc/meminfo :获取设备的内存占用信息

adb shell cat /system/build.prop :获取设备硬件与系统属性信息

adb shell cat /system/build.prop | grep product :获取设备基本信息

kill

Android KitKat 4.4.4_r1 源码地址: kill源码

adb shell kill pid_value :杀死ID为 pid_value 的进程

ls

Android KitKat 4.4.4_r1 源码地址: ls源码

adb shell ls :列出根目录下的文件和文件夹

mv

Android KitKat 4.4.4_r1 源码地址: mv源码

adb shell mv old_file_path new_file_path :将 old_file_path 文件移动到 new_file_path

ps

Android KitKat 4.4.4_r1 源码地址: ps源码

adb shell ps :查看进程列表

adb shell ps -x pid_value :查看ID为 pid_value 的状态

rm

Android KitKat 4.4.4_r1 源码地址: rm源码

adb shell rm filepath_in_deivce :删除设备中的 filepath_in_deivce 文件

adb shell rm -r folder_path_in_device :删除设备中的 folder_path_in_device 文件夹及其下面的所有文件

top

Android KitKat 4.4.4_r1 源码地址: top源码

adb shell top :实时查看设备CPU、内存占用等信息

adb shell top -m number :实时查看内存占用排名前 number 的应用

adb shell top -n number :刷新 number 次内存信息,然后返回

app installation

更多内容请查看 PackageManager.java

adb install apk_path :安装APK最普通的方式,若设备中已安装APK则安装失败

adb install -r apk_path :覆盖安装APK且保留设备中已安装APK的数据

adb install -s apk_path :安装APK到设备的sdcard中,若sdcard不存在会出现 INSTALL_FAILED_INSUFFICIENT_STORAGE 错误

adb install -d apk_path :降级(即要安装的APK的versionCode比已安装的APK的versionCode低)覆盖安装APK到设备中

adb install-multiple apk_path... :安装多个APK最普通的方式,若设备中已安装APK则安装失败

  • 理论上是正确的,实际中出现 INSTALL_FAILED_INVALID_APK: Split null was defined multiple times 错误,网上说是Gradle2.0.0的BUG之类的,但是我的是2.3.2, 尚未解决

adb uninstall package_name :卸载指定包名的APK

adb shell pm uninstall -k package_name :卸载指定包名的APK但保留设备中已安装APK的数据

logcat

adb logcat :输出设备日志到当前窗口中

adb logcat > log.txt :输出设备日志到log.txt文件中

adb logcat -s tag_name :仅输出标签名为 tag_name 的设备日志到当前窗口中

adb logcat -f filepath_in_device :输出设备日志到指定的设备文件中,例如: adb logcat -f /sdcard/log.txt

adb logcat -v format_type :输出指定 format_type 格式的设备日志到当前窗口中,下面是一些常见的输出格式:

  • raw :输出格式为 日志信息
  • tag :输出格式为 优先级/标签:日志信息
  • process :输出格式为 优先级(进程ID):日志信息
  • thread :输出格式为 优先级(进程ID:线程ID):日志信息
  • brief :输出格式为 优先级/标签(进程ID):日志信息
  • time :输出格式为 日期 时间 优先级/标签(进程ID):日志信息
  • threadtime :输出格式为 日期 时间 线程ID 线程ID 优先级 标签:日志信息该命令的格式可能存在错误
  • long :输出格式为 [日期 时间 进程ID:线程ID 优先级/标签]日志信息

adb logcat -c :清空所有的设备日志缓存信息

adb logcat -d :将缓存的设备日志输出到当前窗口中, 并且不会阻塞

adb logcat -t number :输出最近的 number 行日志到当前窗口中, 并且不会阻塞

adb logcat -g :查看设备日志缓冲区信息

adb logcat -b buffer_type :输出指定的日志缓冲区内容到当前窗口中,其中 buffer_type 有以下几种:

  • system :系统相关的日志信息
  • radio :广播电话相关的日志信息
  • events :事件相关的日志信息
  • main :默认的缓冲区

adb logcat -B :以二进制形式输出日志到当前窗口中

adb logcat *:priority_type :输出所有 priority_type 级别以上的设备日志到当前窗口中,例如: adb logcat *:E ,其中 priority_type 有以下几种:

  • V :Verbose(明细)
  • D :Debug(调试)
  • I :Info(信息)
  • W :Warn(警告)
  • E :Error(错误)
  • F :Fatal(严重错误)
  • S :Silent(Super all output)(最高的优先级, 可能不会记载日志)

adb logcat tag_name:priority_type *:S :输出指定标签名为 tag_name 且优先级为 priority_type 的设备日志到当前窗口中,注意必须包含 *:S 否则无效

adb logcat | grep filter_name :仅输出包含 filter_name 的设备日志到当前窗口中,注意: filter_name 区分大小写

adb logcat | grep -i filter_name :仅输出包含 filter_name 的设备日志到当前窗口中,注意: filter_name 忽略大小写

scripting

adb get-state :显示设备的状态,注:设备的状态有以下三种:

  • device :设备连接正常
  • offline :设备连接异常,无响应
  • error: no devices/emulators found :没有设备连接

adb get-serialno :显示设备的序列号

adb get-devpath :显示设备的路径信息,实践发现只显示了 adb devices -lusb 的信息

adb reboot :重启设备

adb reboot reboot_type :根据 reboot_type 重启设备,其中 reboot_type 有以下几种:

  • bootloader :重启到bootloader,即刷机模式
  • recovery :重启到recovery,即恢复模式
  • sideload :重启到Sideload加载模式, 尚不清楚Sideload是什么模式
  • sideload-auto-reboot :重启到Sideload加载模式,命令完成后会自动地重启

adb root :以root权限重启adbd服务。如果成功的话会出现 restarting adbd as root 提示,如果失败的话会出现 adbd cannot run as root in production builds 提示,通过以下几种方式或许能够解决:

  • root手机
  • root手机并安装 adbd Insecure
  • 以MIUI系统为例,如果是稳定版需切换为开发版

adb unroot :以非root权限重启adbd服务,可能会出现 adbd not running as root 错误信息, 尚未解决

adb usb :重启adbd服务,监听USB

adb tcpip PORT :重启adbd服务,监听指定的TCP端口

internal debugging

adb start-server :启动adb服务

adb kill-server :杀死正在运行的adb服务

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章