「Android」adb常用命令整理
Opened this issue · 0 comments
概述
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_name
的receiver_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 -l
中usb
的信息
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服务
monkey
adb shell monkey -v -p package_name number
:为包名为package_name
的应用跑number次monkey测试