• Adb命令详解


    Android调试桥

    备注:此文来自与官方文档,个人纯手工翻译,翻译的不好,还望支持,谢谢;

    Android Debug Bridge(adb)是一个多功能的命令行工具,可让您与模拟器实例或连接的Android设备进行通信。它是一个客户端 - 服务器程序,包括三个组件:

    • 一个在您的开发机器上运行的客户端。您可以通过发出adb命令从shell调用客户端。其他Android工具(如ADT插件和DDMS)也会创建adb客户端。
    • 一个服务器,作为开发机器上的后台进程运行。服务器管理客户端和在仿真器或设备上运行的adb守护程序之间的通信。
    • 一个守护进程,作为每个仿真器或设备实例上的后台进程运行。

    你可以找到adb工具<sdk>/platform-tools/

    当您启动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功能并管理仿真器/设备状态的命令。请注意,如果您在Eclipse中开发Android应用程序并安装了ADT插件,则不需要从命令行访问adb。ADT插件可将adb透明地集成到Eclipse IDE中。但是,您仍然可以直接使用adb,如调试。

    发布adb命令

    您可以从开发机器或脚本的命令行发出adb命令。用法是:

    adb [ - d |  - e |  - s <serialNumber> ] <command>  

    当您发出命令时,程序将调用adb客户端。客户端并不与任何仿真器实例相关联,因此,如果正在运行多个仿真器/设备,则需要使用该-d选项来指定该命令所针对的目标实例

    查询仿真器/设备实例

    在发布adb命令之前,了解哪些仿真器/设备实例连接到adb服务器是有帮助的。您可以使用以下devices命令生成附加的仿真器/设备列表:

    adb devices

    作为回应,adb打印每个实例的状态信息:

    • 序列号 - 由adb创建的字符串,以通过其控制台端口号唯一标识模拟器/设备实例。序列号的格式为<type>-<consolePort>。以下是序列号示例:emulator-5554
    • 状态 - 实例的连接状态。支持三个州:
      • offline - 实例未连接到adb或没有响应。
      • device - 该实例现在已连接到adb服务器。请注意,这种状态并不意味着Android系统是完全引导和可操作的,因为在系统仍在启动时,实例连接到adb。但是,启动后,这是仿真器/设备实例的正常操作状态。

    每个实例的输出格式如下:

    [ serialNumber ] [ state ] 

    这是一个显示devices命令及其输出的示例:

    $ adb devices
    List of devices attached 
    emulator-5554  device
    emulator-5556  device
    emulator-5558  device

    如果没有模拟器/设备运行,adb返回no device

    将命令定向到特定的仿真器/设备实例

    如果正在运行多个仿真器/设备实例,则需要在发出adb命令时指定目标实例。为此,请使用-s命令中的选项。该-s选项的用法是:

    adb - s <serialNumber> <command>  

    如图所示,您可以使用其adb分配的序列号指定命令的目标实例。您可以使用该devices命令来获取正在运行的仿真器/设备实例的序列号。

    这是一个例子:

    adb -s emulator-5556 install helloWorld.apk

    安装应用程序

    您可以使用adb从开发计算机复制应用程序,并将其安装在仿真器/设备实例上。为此,请使用该install命令。使用该命令,您必须指定要安装的.apk文件的路径:

    adb install <path_to_apk>

    请注意,如果您使用Eclipse IDE并安装了ADT插件,则不需要直接使用adb(或aapt)来将仿真器/设备上安装应用程序。相反,ADT插件会为您处理应用程序的打包和安装。

    转发端口

    您可以使用该forward命令设置任意端口转发 - 将特定主机端口上的请求转发到仿真器/设备实例上的其他端口。以下是如何将主机端口6100转发到仿真器/设备端口7100:

    adb forward tcp :6100 tcp :7100

    您还可以使用adb将转发设置为命名的抽象UNIX域套接字,如下所示:

    adb forward tcp :6100 local :logd 

    将文件复制到仿真器/设备实例或从仿真器/设备实例复制文件

    您可以使用adb命令pullpush并将文件复制到仿真器/设备实例的数据文件中。与install仅将.apk文件复制到特定位置的命令不同pullpush命令可以将任意目录和文件复制到仿真器/设备实例中的任何位置。

    要复制一个文件或目录(递归)模拟器或设备,使用

    adb pull <remote> <local> 

    要将文件或目录(递归)复制到仿真器或设备,请使用

    adb push <local> <remote> 

    在命令中,<local><remote>参考开发机器(本地)和仿真器/设备实例(远程)上目标文件/目录的路径。

    以下是一个例子:

    adb push foo.txt /sdcard/foo.txt

    adb命令列表

    下表列出了所有支持的adb命令,并说明了它们的含义和用法。

    类别命令描述注释
    选项 -d 将adb命令直接连接到唯一连接的USB设备。 如果连接多个USB设备,则返回错误。
    -e 将adb命令指向唯一运行的模拟器实例。 如果运行多个仿真器实例,则返回错误。
    -s <serialNumber> 将adb命令指向特定的仿真器/设备实例,由其adb分配的序列号引用(例如“emulator-5556”)。 如果没有指定,adb会产生错误。
    一般 devices 打印所有连接的仿真器/设备实例的列表。 有关详细信息,请参阅查询仿真器/设备实例。
    help 打印支持的adb命令列表。  
    version 打印adb版本号。  
    调试 logcat [<option>] [<filter-specs>] 将日志数据打印到屏幕。  
    bugreport 打印dumpsysdumpstatelogcat数据到屏幕上,对错误报告的目的。  
    jdwp 在给定的设备上打印可用的JDWP进程列表。 您可以使用forward jdwp:<pid>端口转发规范连接到特定的JDWP进程。例如:
    adb forward tcp:8000 jdwp:472
    jdb -attach localhost:8000
    数据 install <path-to-apk> 将Android应用程序(指定为.apk文件的完整路径)推送到仿真器/设备的数据文件。  
    pull <remote> <local> 将指定的文件从仿真器/设备实例复制到开发计算机。  
    push <local> <remote> 将指定的文件从开发计算机复制到仿真器/设备实例。  
    端口和网络 forward <local> <remote> 从指定的本地端口向模拟器/设备实例上指定的远程端口转发套接字连接。 端口规格可以使用这些方案:
    • tcp:<portnum>
    • local:<UNIX domain socket name>
    • dev:<character device name>
    • jdwp:<pid>
    ppp <tty> [parm]... 通过USB运行PPP。
    • <tty> - PPP流的tty。例如dev:/dev/omap_csmi_ttyl
    • [parm]... -零个或多个PPP / PPPD选项,例如defaultroutelocalnotty等。

    请注意,您不应该自动启动PPP连接。

     
    脚本 get-serialno 打印adb实例序列号字符串。 有关详细信息,请参阅查询仿真器/设备实例。
    get-state 打印仿真器/设备实例的adb状态。
    wait-for-device 阻止执行,直到设备联机 - 即,直到实例状态为止device 您可以将此命令添加到其他adb命令,在这种情况下,adb将等待直到仿真器/设备实例连接才能发出其他命令。以下是一个例子:
    亚行的等待- - 设备外壳getprop
    请注意,此命令不会导致adb等到整个系统完全启动。因此,您不应该将其添加到需要完全引导系统的其他命令。例如,install需要Android软件包管理器,该软件包管理器仅在系统完全启动后可用。一个命令,如
    ADB等待- - 设备安装<应用> APK
    install一旦仿真器或设备实例连接到adb服务器,但在Android系统完全引导之前, 它将发出命令,因此会导致错误。
    服务器 start-server 检查adb服务器进程是否正在运行并启动它(如果没有)。  
    kill-server 终止adb服务器进程。  
    贝壳 shell 在目标模拟器/设备实例中启动一个远程shell。 有关详细信息,请参阅颁发Shell命令
    shell [<shellCommand>] 在目标模拟器/设备实例中发出一个shell命令,然后退出远程shell。

    发布Shell命令

    Adb提供了一个可用于在仿真器或设备上运行各种命令的灰壳。命令二进制文件存储在仿真器或设备的文件系统中,位于此位置:

    / system / bin / ...

    您可以使用shell命令发出命令,无论是否在仿真器/设备上输入adb远程shell。

    要在不输入远程shell的情况下发出单个命令,请使用如下shell命令:

    adb [ - d |  - e |  - s {< serialNumber >}] shell <shellCommand>

    要放在仿真器/设备实例的远程shell中,请使用如下shell命令:

    adb [ - d |  - e |  - s {< serialNumber >}] shell

    当您准备退出远程shell时,请使用CTRL+Dexit结束shell会话。

    从远程Shell检查sqlite3数据库

    从adb远程shell,您可以使用 sqlite3命令行程序来管理由Android应用程序创建的SQLite数据库。该 sqlite3工具包括许多有用的命令,例如 .dump打印表的内容并 .schema打印现有表的SQL CREATE语句。该工具还使您能够即时执行SQLite命令。

    要使用sqlite3,请在仿真器实例上输入远程shell,如上所述,然后使用该sqlite3命令调用该工具。或者,调用sqlite3时可以指定要探索的数据库的完整路径。模拟器/设备实例将SQLite3数据库存储在文件夹中。/data/data/<package_name>/databases/

    以下是一个例子:

    $ adb -s emulator-5554 shell
    # sqlite3 /data/data/com.example.google.rss.rssexample/databases/rssitems.db
    SQLite version 3.3.12
    Enter ".help" for instructions
    .... enter commands, then quit...
    sqlite> .exit 

    旦你被调用sqlite3,你可以sqlite3在shell 中发出命令。要退出并返回到adb远程shell,请使用exitCTRL+D

    UI/Application Exerciser Monkey

    Monkey是一个在您的仿真器或设备上运行的程序,并生成诸如点击,触摸或手势之类的用户事件的伪随机流,以及许多系统级事件。您可以使用Monkey来以随机但可重复的方式对正在开发的应用进行压力测试。

    最简单的方法是使用以下命令,它将启动您的应用程序并向其发送500个伪随机事件。

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

    其他Shell命令

    下表列出了几个可用的adb shell命令。有关命令和程序的完整列表,请启动仿真器实例并使用该adb -help命令。

    adb shell ls / system / bin
    命令描述注释
    dumpsys 将系统数据转储到屏幕。 Dalvik的调试监视器服务器 (DDMS)工具提供集成的调试环境,你可能会发现更容易使用。
    dumpstate 转储状态为文件。
    logcat [<option>]... [<filter-spec>]... 启用无线电记录并将输出打印到屏幕。
    dmesg 将内核调试消息打印到屏幕。
    start 启动(重新启动)仿真器/设备实例。  
    stop 停止执行仿真器/设备实例。  

    启用logcat日志记录

    Android日志记录系统提供收集和查看系统调试输出的机制。来自各种应用程序和系统部分的日志被收集在一系列循环缓冲区中,然后可以通过logcat命令查看和过滤。

    您可以使用该logcat命令来查看和跟踪系统日志缓冲区的内容。一般用法是:

    [ adb ] logcat [< option >] ... [< filter - spec >] ...   [ adb ] logcat [< option >] ... [< filter - spec >] ...   

    您可以使用logcat开发计算机中的命令或仿真器/设备实例中的远程adb shell。要查看开发计算机中的日志输出,请使用

    $ adb logcat

    停止adb服务器

    在某些情况下,您可能需要终止adb服务器进程,然后重新启动它。例如,如果adb没有响应命令,您可以终止服务器并重新启动它,这可能会解决问题。

    要停止adb服务器,请使用kill-server。然后,您可以通过发出任何adb命令重新启动服务器。

  • 相关阅读:
    java实现拼出漂亮的表格
    java实现金额组合
    java实现金额组合
    java实现金额组合
    java实现金额组合
    java实现Playfair 密码
    Mblog 部署手册
    配置Tomcat apr运行模式
    Duboo入门示例(Idea开发环境)
    Font-Awesome最新版完整使用教程
  • 原文地址:https://www.cnblogs.com/crstyl/p/6906548.html
Copyright © 2020-2023  润新知