Android ADB详解

作者: Mr槑 | 来源:发表于2018-04-25 13:30 被阅读367次

    ADB

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

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

    ADB 工作方式

    启动一个 adb 客户端时,此客户端首先检查是否有已运行的 adb 服务器进程。如果没有,它将启动服务器进程。当服务器启动时,它与本地 TCP 端口 5037 绑定,并侦听从 adb 客户端发送的命令—所有 adb 客户端均使用端口 5037 与 adb 服务器通信。

    然后,服务器设置与所有运行的模拟器/设备实例的连接。它通过扫描 5555 到 5585 之间(模拟器/设备使用的范围)的奇数号端口查找模拟器/设备实例。服务器一旦发现 adb 后台程序,它将设置与该端口的连接。请注意,每个模拟器/设备实例将获取一对按顺序排列的端口 — 用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。例如:

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

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

    当服务器已设置与所有模拟器实例的连接后,您可以使用 adb 命令访问这些实例。由于服务器管理与模拟器/设备实例的连接,并处理来自多个 adb 客户端的命令,因此,您可以从任意客户端(或从某个脚本)控制任意模拟器/设备实例。

    ADB CS模式解读

    ADB 主要存放在SDK安装目录下的platform-tools文件夹中,它是一个非常强大的命令行工具,通过这个工具你能够与你的Android设备进行交互。同时这是一个包含了以下三部分的CS模式的程序:

    adb client

    从图中,我们知道Client是运行在PC端的,每当我们发起一个adb命令的时候,就会开启一个Client程序。当然,当我们开启DDMS或者ADT的时候,也会自动创建Client。

    当我们开启一个Client的时候,它首先会去检测后台是否已经有一个Server程序在运行着,否则会开启一个adb-server进程。

    所有的Client都是通过5037端口与adb-server进行通信的。

    adb daemon(adbd)

    从图中,我们知道daemon是作为一个后台进程运行在模拟器/真实Android设备中的。

    daemon使用端口的范围是5554-5585,每个模拟器/设备连接到PC端时,总会开启这么一个后台进程,并且为其分配了两个连续的端口,比如:Emulator 1, console: 5554 Emulator 1, adb: 5555

    也正因为每个设备都分一组两个端口,也已adb连接手机的最大数量为16。

    说回端口的作用,在这两个端口中,其中偶数端口是用于server 与设备进行交互的,可以让server直接从设备中读取数据,而奇数端口是用来与设备的adbd进行连接通信的。

    adb server

    从图中,我们同样可以知道,Server也是作为一个后台的程序运行在PC端的,他负责管理Client进程以及adb daemon之间的通信。

    当一个Server开启的时候,他会自动绑定并且监听5037端口,接收Client通过该端口发送过来的命令。同时Server还会对5555-5585间的奇数端口进行扫描,进行对已连接设备的定位。

    Android adb命令大全

    通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK等。

    1. 获取序列号:
      adb get-serialno

    2. 查看连接计算机的设备:
      adb devices

    3. 重启机器:
      adb reboot

    4. 查看log:
      adb logcat

    5. 终止adb服务进程:

    adb kill-server

    1. 重启adb服务进程:

    adb start-server

    1. 获取机器MAC地址:
      adb shell cat /sys/class/net/wlan0/address

    2. 获取CPU序列号:
      adb shell cat /proc/cpuinfo

    3. 安装APK:
      adb install <apkfile> //比如:adb install baidu.apk

    10 .保留数据和缓存文件,重新安装apk:

    adb install -r <apkfile> //比如:adb install -r baidu.apk

    1. 安装apk到sd卡:

    adb install -s <apkfile> // 比如:adb install -s baidu.apk

    1. 卸载APK:
      adb uninstall <package> //比如:adb uninstall com.baidu.search

    2. 卸载app但保留数据和缓存文件:
      adb uninstall -k <package> //比如:adb uninstall -k com.baidu.search

    3. 启动应用:
      adb shell am start -n <package_name>/.<activity_class_name>

    4. 查看设备cpu和内存占用情况:
      adb shell top

    5. 查看占用内存前6的app:
      adb shell top -m 6

    6. 查询各进程内存使用情况:
      adb shell procrank

    7. 杀死一个进程:
      adb shell kill [pid]

    8. 查看进程列表:
      adb shell ps

    9. 查看后台services信息:
      adb shell service list

    10. 查看当前内存占用:
      adb shell cat /proc/meminfo

    11. 从本地复制文件到设备:
      adb push <local> <remote>

    12. 从设备复制文件到本地:
      adb pull <remote> <local>

    发出 shell 命令

    可以使用 shell 命令通过 adb 发出设备命令,可以进入或不进入模拟器/设备实例上的 adb 远程 shell。要在不进入远程 shell 的情况下发出一个命令,请使用如下 shell 命令:
    adb [-d|-e|-s serial_number] shell shell_command
    或者,使用如下命令进入模拟器/设备实例上的远程 shell:
    adb [-d|-e|-s serial_number] shell
    shell 命令二进制文件存储在模拟器或设备的文件系统中,其路径为 /system/bin/

    调用 Activity Manager

    在 adb shell 中,您可以使用 Activity Manager (am) 工具发出命令以执行各种系统操作,如启动 Activity、强行停止进程、广播 intent、修改设备屏幕属性及其他操作。在 shell 中,此语法为:
    am command
    您也可以直接从 adb 发出 Activity Manager 命令,无需进入远程 shell。例如:
    adb shell am start -a android.intent.action.VIEW

    调用软件包管理器

    在 adb shell 中,您可以使用软件包管理器 (pm) 工具发出命令,以对设备上安装的应用软件包进行操作和查询。在 shell 中,此语法为:
    pm command
    您也可以直接从 adb 发出软件包管理器命令,无需进入远程 shell。例如:
    adb shell pm uninstall com.example.MyApp

    进行屏幕截图

    screencap 命令是一个用于对设备显示屏进行屏幕截图的 shell 实用程序。在 shell 中,此语法为:
    screencap filenam
    要从命令行使用 screencap,请输入以下命令:
    $ adb shell screencap /sdcard/screen.png
    以下屏幕截图会话示例向您展示使用 adb shell 捕获屏幕截图,并使用 pull 命令从设备下载此文件:

    $ adb shell
    shell@ $ screencap /sdcard/screen.png
    shell@ $ exit
    $ adb pull /sdcard/screen.png
    

    相关文章

      网友评论

        本文标题:Android ADB详解

        本文链接:https://www.haomeiwen.com/subject/fojslftx.html