adb命令及使用
adb命令及使用
ADB(Android Debug Bridge)是Android开发和调试中常用的工具,它允许开发者通过命令行与Android设备进行交互。本文将详细介绍ADB的运行原理、安装方法以及常用命令的使用,帮助读者更好地掌握这一强大工具。
一、ADB运行原理
ADB分为三个部分:PC上的adb client、adb server和手机(也可能是PC上的模拟器)上的adb daemon。这是一个多对多连接的设计。即一台PC可以连接多个手机,一台手机也可以连接多个PC。
1、Client本质上就是Shell,用来发送命令给Server。发送命令时,首先检测PC上有没有启动Server,如果没有Server,则自动启动一个Server,绑定 TCP 的 5037 端口,然后将命令发送到Server,并不关心命令发送过去以后会怎样。
2、ADB Server:运行在PC上的后台程序,目的是检测USB接口何时连接或者移除设备。ADB Server维护着一个“已连接的设备的链表”,并且为每一个设备标记了一个状态:offline,bootloader,recovery或者online;Server一直在做一些循环和等待,,监听从 clients 发来的命令,协调client和Server还有daemon之间的通信。
3、ADB Daemon:程序“adbd”作为一个后台进程在Android设备或模拟器系统中运行。它的作用是连接ADB服务器,并且为运行在主机上的客户端提供一些服务;
当在电脑命令行窗口中输入adb 命令时,会先执行adb客户端,客户端拿到命令之后,会发送给adb服务端,server再将命令传给Daemon,最后在手机上执行。假如在手机上安装一个应用,会有一个返回信息,会将信息传递给adb服务器,adb 在给客户端,最后显示在命令行。
Client和Server之间通过TCP/IP通信,Server侦听本机的5037端口,Client试图去连接这个端口。基于ADB的工具有 DDMS 、monkey 测试等
当您启动某个 adb 客户端时,该客户端会先检查是否有 adb 服务器进程已在运行。如果没有,它会启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令。
二、ADB安装
adb 包含在 Android SDK 平台工具软件包中,有两种方法安装adb工具:【具体安装过程不过多描述,可网上搜具体教程】
- 使用SDK Manager安装,会安装到 platform-tools 目录下。具体安装方法可参考Appium 介绍及环境安装中的安装Android SDK部分。 地址:https://www.androiddevtools.cn/
安装完成后,找到安装目录(安装之前一定要安装Java JDK 版本必须大于1.5)网上也有安装教程
三、命令使用
在设备上启用 adb 调试
如要在通过 USB 连接的设备上使用 adb,您必须在设备的系统设置中启用 USB 调试(位于开发者选项下)。在 Android 4.2(API 级别 17)及更高版本中,开发者选项屏幕默认处于隐藏状态。如需将其显示出来,请启用开发者选项。
现在,您已经可以通过 USB 连接设备了。您可以通过从 android_sdk/platform-tools/ 目录执行 adb devices 来验证设备是否已连接。如果已连接,您将看到设备名称以“设备”形式列出。
注意:当您连接搭载 Android 4.2.2(API 级别17)或更高版本的设备时,系统会显示一个对话框,询问您是否接受允许通过此计算机进行调试的 RSA密钥。这种安全机制可以保护用户设备,因为它可以确保用户只有在能够解锁设备并确认对话框的情况下才能执行 USB 调试和其他 adb 命令。
服务的启动与停止命令
- 开启adb服务
adb start-server
- 关掉adb服务
adb kill-server
- 指定 adb server 的网络端口<adb默认端口为5037>
adb -P <port> start-server
在发送adb命令时,如果没有pc没有启动Server,则会自动启动一个Server,然后将命令发送到Server。
- 通过adb usb打开设备上的tcpip服务并绑定一个端口
adb tcpip 5555
adb -s 611DKBQC22SH2 tcpip 5555 # 设备在 5555 端口监听 TCP/IP 连接
无线连接要将 Android 设备与将运行 adb 的电脑连接到同一个局域网
- ADB Client通过命令adb connect ip连接远程的终端
adb connect 127.0.0.1:62001 #夜游神模拟器
adb connect 127.0.0.1:7555 #网易mumu模拟器
adb disconnect <device-ip-address> # 断开连接
查看电脑连接的设备列表
adb devices
或者
adb devices -l
或者
adb get-state
使用该指令将返回设备状态信息,该状态信息包含三种
devices状态:表示移动设备或者模拟器已经连接到adb服务器上
offline状态:表示移动设备或者模拟器没有连接到adb服务器或者没有响应
no devices状态:表示没有设备或者模拟器连接
以 root 权限运行 adbd
adb root
adb -s 611DKBQC22SH2 root
- 重启手机
adb reboot
安装卸载apk包
# 卸载
adb uninstall 包名
# 安装
adb install app.apk
adb install -r app.apk # 强制安装
install 参数介绍
uninstall参数
查看appPackage和appActivity
测试某个APP时,通常是先拉起这个APP,需要知道APP包名appPackage,appium启动APP时还需要知道APP某个页面的activity名称appActivity,可以通过adb命令来获取。
- 获取所有活动
adb shell dumpsys activity | grep tencent # linux
adb shell dumpsys activity | findstr tencent # windows
- 获取当前APP的Package和Activity名【需要手机打开对应的APP】
adb shell dumpsys activity activities | findstr mResumedActivity
- 获取最顶层的activity,也可用来获取当前打开应用的Package和Activity名。
adb shell dumpsys activity top
上面的命令会打印大量日志信息,需要过滤一下:
adb shell dumpsys activity | findstr mFocusedActivity
adb shell dumpsys window windows|findstr "mCurrentFocus"
dumpsys 是一种在 Android 设备上运行的工具,可提供有关系统服务的信息。可以使用 Android 调试桥 (adb) 从命令行调用 dumpsys,获取在连接的设备上运行的所有系统服务的诊断输出。
此输出通常比您想要的更详细,因此请使用此页面上的命令行选项仅获取您所需的系统服务的输出。本页还介绍了如何使用 dumpsys 完成常见的任务,如检查输入、RAM、电池或网络诊断信息。
使用 dumpsys 的一般语法如下:
adb shell dumpsys [-t timeout] [--help | -l | --skip services | service [arguments] | -c | -h]
查看应用列表
adb shell pm list packages #所有应用列表
adb shell pm list packages -s # 系统应用
adb shell pm list packages -3 # 第三方应用
adb shell pm list packages smart # 包名包含smart字符串的应用
拉起、停止Activity
- adb shell am start [options] :调起 Activity
- adb shell am force-stop : 强制停止应用
adb shell am start -n com.tenda.smarthome.app/.activity.main.MainActivity # 打开smarthome APP
adb shell am force-stop com.tenda.smarthome.app # 强制停止应用
adb shell pm clear <packagename> # 清除应用数据与缓存
adb shell am start -a android.intent.action.VIEW -d https://www.baidu.com # 打开网页