深入认识adb工具

前言

官方文档

本篇文章是对官方文档的理解和总结,大部分内容来自官方文档。

adb即Android 调试桥,是一个通用命令行工具,其允许我们与模拟器实例或连接的 Android 设备进行通信。

和Git、MySQL等一样,adb也有图形化工具,给我们更友好的交互体验。

但不管是Android Studio开发环境还是豌豆荚等工具,实质都是用的adb命令和设备通信。

因此,真正去了解adb是什么,如何使用,有利于我们更好地去发挥它的作用和解决问题。

你可能也会发现,它很有趣~

adb的组成

adb工具位于android_sdk目录/platform-tools/,作为一个客户端-服务器程序,它包括三个组件:

客户端,该组件发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令从命令行终端调用客户端。

后台程序,该组件在设备上运行命令。后台程序在每个模拟器或设备实例上作为后台进程运行。

服务器,该组件管理客户端和后台程序之间的通信。服务器在开发计算机上作为后台进程运行。

启动一个 adb 客户端时,此客户端首先检查是否有已运行的 adb 服务器进程。如果没有,它将启动服务器进程。

当服务器启动时,它与本地 TCP 端口 5037 绑定,之后所有 adb 客户端均通过该端口 与 adb 服务器通信。

然后,服务器设置与所有运行的模拟器/设备实例的连接。

它通过扫描 5555 到 5585 之间(模拟器/设备使用的范围)的奇数号端口查找模拟器/设备实例。

服务器一旦发现 adb 后台程序,它将设置与该端口的连接。

请注意,每个模拟器/设备实例将获取一对按顺序排列的端口:

用于控制台连接的偶数号端口

用于 adb 连接的奇数号端口。例如:

模拟器 1,控制台:5554

模拟器 1,adb:5555

模拟器 2,控制台:5556

模拟器 2,adb:5557

以此类推…

如上所示,在端口 5555 与 adb 连接的模拟器实例与侦听端口 5554 的控制台的实例相同。

常用的命令(更多命令可以自行探索~):

停止adb服务器

adb kill-server
之后使用任一adb命令会重启adb服务器

查看设备

adb devices
输出:
List of devices attached
[* daemon not running. starting it now on port 5037 *]
[* daemon started successfully *]
serial_number state

将命令发送至特定设备

adb -s serial_number command 

选定目标设备

-d 将 adb 命令发送至唯一连接的 USB 设备
-e 将 adb 命令发送至唯一运行的模拟器实例
-s 将 adb 命令发送至该序列号表示的设备实例

安装app

adb install apk_path

安装选项

-r 替换设备上已有的APP
-d 允许降版本安装
-t 允许安装测试包
-g 授予所有运行时权限
-s 安装在sd卡上
-l 安装具有转发锁定功能的软件包。

卸载app

adb uninstall [-k] 包名
 -k 保留缓存

重启设备

adb reboot

Wifi连接设备

//设置目标设备以侦听端口 5555 上的 TCP/IP 连接
adb tcpip 5555
//连接到设备的ip地址
adb connect device_ip_address

将文件复制到设备

adb push local remote
如:
adb push foo.txt /sdcard/foo.txt

从设备复制文件

adb pull remote local

shell命令

在目标设备中发出 shell 命令,然后退出远程 shell

adb [-d|-e|-s serial_number] shell shell_command

在目标设备中启动远程 shell

 adb [-d|-e|-s serial_number] shell
 以下shell命令按此示例

离开shell环境

 exit

调用 Activity Manager (am)

//示例:启动Activity
 am start -n com.example.app/.ExampleActivity
 //启动Activity
 am start [options] intent
 //启动Service
 am startservice [options] intent
 //启动广播
 am broadcast [options] intent
//强制关闭APP
 am force-stop package
 [options]:
 -a action
 -c category
 -d data_uri
 -t mime_type
 -n component (指定带有软件包名称前缀的组件名称以创建显式 intent)

调用软件包管理器 (pm)

//列出所有软件包
pm list packages [包含的文本]
//列出所有测试包
pm list instrumentation
//列出系统所有功能
pm list features
//列出设备支持的所有库
pm list libraries
//列出设备上的所有用户
pm list users
//输出给定 package 的 APK 的路径
pm path package
//安装app
pm install [options] path
//卸载app
pm uninstall [options] package
//删除与软件包关联的所有数据
pm clear package

截屏

screencap /sdcard/screen.png
//将图片复制到电脑
adb pull /sdcard/screen.png

录制视频

screenrecord [options] /sdcard/demo.mp4
[options]:
--size widthxheight
--bit-rate rate 默认值为 4Mbps(4000000)
--time-limit time 设置最大录制时长(以秒为单位)。默认值和最大值均为 180(3 分钟)
--rotate 将输出旋转 90 度。此功能是实验性的
--verbose 显示命令行屏幕上的日志信息

删除文件

rm file_path

删除整个文件夹

rm -r dir_path
cat /data/misc/wifi/*.conf

设备型号

getprop ro.product.model

查看android版本

getprop ro.build.version.release

屏幕分辨率

wm size

屏幕密度

wm density

电池情况

dumpsys battery

input 交互

//输入文本到设备上处于焦点的文本框
shell input text hello
其他输入input查看

Monkey压力测试(官方文档)

adb shell monkey -p your.package.name -v 500

猜你喜欢

转载自blog.csdn.net/recordGrowth/article/details/79146038