adb 命令

参考:https://developer.android.com/studio/command-line/adb?hl=zh-cn

##  Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限。它是一种客户端-服务器程序,包括以下三个组件:

  • 客户端:用于发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令从命令行终端调用客户端。
  • 守护程序 (adbd):用于在设备上运行命令。守护程序在每个设备上作为后台进程运行。
  • 服务器:用于管理客户端与守护程序之间的通信。服务器在开发机器上作为后台进程运行。

  当您启动某个 adb 客户端时,该客户端会先检查是否有 adb 服务器进程正在运行。如果没有,它会启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令 - 所有 adb 客户端均通过端口 5037 与 adb 服务器通信。

  然后,服务器会与所有正在运行的设备建立连接。它通过扫描 5555 到 5585 之间(该范围供前 16 个模拟器使用)的奇数号端口查找模拟器。服务器一旦发现 adb 守护程序 (adbd),便会与相应的端口建立连接。请注意,每个模拟器都使用一对按顺序排列的端口 - 用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。

 

##  pm工具为包管理(package manager)-->安装和查询应用包的信息、系统权限、控制应用

  adb  shell pm list packages [ options] filter: --->[-f/d/s/3  ===>-s为过滤仅显示第三方软件包。

 

## am -->activity manager  调用Activity管理器--->启动activity、强行停止进程、广播intent、修改设备屏幕属性。。。

 

##   截图 adb shell screencap /sdcard/screen.png  截图并保存到设备  sdcard/screen.png

        保存 adb pull /sdcard/screen.png  下载到本地。

 

## 视频录制:

screenrecord [options] filename
adb shell screenrecord /sdcard/demo.mp4

按 Ctrl + C 键(在 Mac 上,按 Command + C 键)可停止屏幕录制;如果不手动停止,到三分钟或 --time-limit 设置的时间限制时,录制将会自动停止。

如需开始录制设备屏幕,请运行 screenrecord 命令以录制视频。然后,运行 pull 命令以将视频从设备下载到主机。下面是一个录制会话示例:

$ adb shell
shell@ $ screenrecord --verbose /sdcard/demo.mp4
(press Control + C to stop)
shell@ $ exit
$ adb pull /sdcard/demo.mp4

-------------------
原理图:https://cloud.tencent.com/developer/article/1877117
注意:所有 adb 客户端均使用端口 5037 与 adb 服务器通信。

 

 

 

 

每个模拟器都使用一对按顺序排列的端口:一个用于控制台连接的偶数号端口,另一个用于 adb 连接的奇数号端口。例如:

模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
依此类推。

 

举个例子:

  1. 我们通过Android Studio工具或者命令行界面直接或间接的调用某个adb命令,比如adb install或者adb devices
  2. 这时候adb进程会fork出一个子进程作为adb server,而这个fork出的进程将常驻PC端,监听来自Client端的请求
  3. adb server查找当前连接的真机或者模拟器,并接收来自Client端发出的请求
  4. adb server处理请求:如果是本地能直接处理的请求比如:adb devices就直接处理,如果是本地处理不了的请求就会转发给连接的真机或者模拟器来进行处理,可以通过数据线和TCP/IP的方式通信
  5. 位于真机或者模拟器后台的adbd进程接收到请求后,通过JDWP协议转发给对应的Java虚拟机进程处理
  6. adbd将处理后的结果返回给adb server
  7. adb server再将结果返回给Client,这时候我们就在命令行界面中看到展示结果了


 

posted @ 2021-01-25 14:08  小毛编  阅读(106)  评论(0编辑  收藏  举报