Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

「Android」adb常用命令整理 #33

Open
fengqingxiuyi opened this issue Jun 30, 2017 · 0 comments
Open

「Android」adb常用命令整理 #33

fengqingxiuyi opened this issue Jun 30, 2017 · 0 comments

Comments

@fengqingxiuyi
Copy link

fengqingxiuyi commented Jun 30, 2017

本文来自尚妆Android团队青峰
发表于尚妆博客

概述

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

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

具体实现如图所示:

ADB连接逻辑图

ADB连接具体实现

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服务

monkey

adb shell monkey -v -p package_name number:为包名为package_name的应用跑number次monkey测试

参考链接

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant