前言
在工作中,因为做的是app/mobile game相关,所以经常会连接手机进行测试。每次装包或者看log都需要经历——找线->连接->识别安装,虽操作不算繁琐,但有线连接也有弊端,如测试设备较多时需要连接额外的扩展坞;线接触不良时会特别痛苦等等。
在Android Studio的Android项目中,每次点击选择设备的下拉菜单时,都能看到"Pair Devices Using Wi-Fi"的字样,发现其实可以通过无线连接来操作手机,然后就接触到了ADB。
Android 调试桥 (adb)
adb(android debug bridge),翻译过来是安卓调试桥。是google对Android设备做的一个命令行工具,adb命令可以执行各种设备操作,例如:安装apk、push/pull文件、无线连接(端口转发)、打开apk等。
它是一种客户端-服务器程序,包括以下三个组件:
客户端:用于发送命令。客户端在开发机器上运行。您可以通过发出 adb 命令从命令行终端调用客户端。
守护程序 (adbd):用于在设备上运行命令。守护程序在每个设备上作为后台进程运行。
服务器:用于管理客户端与守护程序之间的通信。服务器在开发机器上作为后台进程运行。
下载
如果已经安装了AndroidSDK,并在安装时勾选了一起下载platform-tools。
则已经在电脑上下载好了adb,具体位置在:
{AndroidSDK路径}\platform-tools\adb.exe
如果没有platform-tools这个文件夹,说明需要单独下载,单独下载地址:
SDK 平台工具
添加到环境变量
下载完成后,需要在此电脑-属性-高级系统设置-高级选项卡-环境变量-系统变量-path中添加platform-tools路径
点击确定关闭所有窗口后,在命令行中运行
adb --version
看到正常的版本信息打印,那么恭喜你,可以继续下一步啦。
如果还是有报错,则需要再返回上一步倒腾倒腾。
在设备中启用adb调试
想在手机上运行adb调试命令,则必须进入设置-开发者选项,找到并打开USB调试的开关。
关于如何找到开发者选项,不同设备之间有所差距,一般来说都是点击手机系统7次,就能打开开发者选项。
如果方法不管用,具体可以去搜索引擎查询"xx手机系统如何打开开发者选项"。
下面以小米14为例:
打开设置——我的设备——全部参数与信息——点击OS版本7次
开启之后,回到设置的第一个页面,在最下方有一个更多设置,更多设置的最下方有一个开发者选项,进入后找到USB调试开关,打开即可。
(如果需要通过ADB命令安装apk,还需打开USB安装开关)
无线连接到手机
方法一(需要Android 11 API30及以上的设备):
此方法并不实用,且连接不够稳定,有版本限制等,此处不多赘述介绍,笔者主要使用方法二。
方法二(需先进行一次有线连接):
- 将 Android 设备和 adb 主机连接到同一 Wi-Fi 网络。
- 使用 USB 线将设备连接到主机。
- 设置目标设备以监听端口 5555 上的 TCP/IP 连接:
adb tcpip 5555
- 拔掉连接目标设备的 USB 线。
- 找到 Android 设备的 IP 地址。例如,对于 Nexus 设备,您可以在设置 > 关于手机> 状态 > IP 地址下找到 IP 地址。
- 通过 IP 地址连接到设备:
adb connect [device_ip_address]:5555
- 确认主机已连接到目标设备:
打开cmd运行命令adb devices
List of devices attached
[device_ip_address]:5555 device
如果看到以上信息,则该设备现已连接到 adb。
如果与设备的 adb 连接断开:
- 确保主机仍与 Android 设备连接到同一 Wi-Fi 网络。
- 通过再次执行 adb connect 步骤重新连接。
- 如果这样无法解决问题,请重置 adb 主机:
adb kill-server
然后,从头开始操作。
adb常用命令
- 调用adb命令时,有一些命令可以不用指定设备,例如查看设备,停止adb服务器等。
- 而有一些命令是针对设备的操作,需要指定设备。例如安装apk,复制文件等。但仅连接1个设备时,可以省略指定设备。
查看已连接到adb的设备
adb devices
adb devices adb devices -l
查看已连接到电脑adb的所有设备
如果加上-l 则会展示更多信息
停止adb服务器
有时候adb命令执行有问题时,可以停止重启adb服务器
停止:adb kill-server
,然后调用任意代码就能重启adb服务器。
安装apk
[apk_path]
就是电脑上apk的全路径
[-s serial_number]
serial_number就是通过adb devices获取到的名称,用来指定该命令用于哪一个设备。在只连接了1个设备的时候,可以省略该命令
adb [-s serial_number] install [apk_path]
将文件复制到设备/从设备复制文件
[remote_path]
即电脑上文件路径
[local_path]
即手机路径
从设备中复制文件,可以将任意目录的文件复制到任意位置
adb pull [remote_path] [local_path]
复制文件到设备
adb push [local_path] [remote_path]
发出Shell命令
调用activity管理器
启动activity
[options]
有很多选项:
- -D 启动调试功能。
- -W 等待启动完成。
- –start-profiler file:启动性能分析器并将结果发送至 file。
- -P file:类似于 --start-profiler,但当应用进入空闲状态时剖析停止。
- -R count:重复启动 activity count 次。在每次重复前,将完成顶层 activity。
- -S:在启动 activity 前,强行停止目标应用。
- –opengl-trace:启用 OpenGL 函数的跟踪。
- –user user_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行。
[intent]
包名/activity名
adb shell am start [options] [intent]
例如:
adb shell am start tds.demo.util/tds.demo.util.MainActivity
调用软件包管理器(pm)
清除apk所有数据
[package_name]
应用程序包名
adb shell pm clear [package_name]
结语
学会这些命令,可以帮助我在手机上测试提供许多便利,最大的帮助就是从有线变为无线,还有实现和Android studio一样的,点击run就可以装包并打开activity。
为此我写了一个windows版本的flutter工具——tds_android_utils,包装了我平时常用的一些命令,有机会的话下一篇讲讲。