作为一名 Android 开发人员,adb 命令是不可缺少的技能之一,在日常工作中或多或少会用到这些命令,本篇内容主要是整理了一些常用的 adb 命令,同时加强记忆。

adb 命令启动和关闭

  • adb start-server:检查 adb 服务器进程是否在运行,如果未运行则启动它;
  • adb kill-server:关闭 adb 服务;

adb 常规命令

  • adb version:查看 adb 版本;
  • adb help:输出 adb 支持的命令;
  • adb wait-for-device:等待连接设备;

adb devices 查询设备

此命令会列举出当前电脑上链接的设备,包括模拟器以及实体设备。命令窗口会输出当前链接设备的序列号以及状态:

e6b2a367        device
emulator-5654 device

必须要安装驱动,并且打开开发者模式下的 usb 调试才可以显示出设备

操作多个设备中的一个

通过 adb devices 命令可以看到连接电脑的所有 android 设备,如果要对多个设备中的某个进行操作,需要使用 -s 参数,使用方法如下:

adb [-d|-e|-s serial_number] [shell] command
  • -d:将命令发送到唯一连接的 USB 设备,如果连接多个设备则会报错;
  • -e:将命令发送到唯一运行的模拟器,如果启动了多个模拟器设备,则会报错;

adb forward 设置端口转发

可以使用该命令设置任意端口转发,即对特定主机端口的请求转发到模拟器/实体设备上的其它端口,实现主机和设备之间的通信。

使用方法:

adb forward <local> <remote>

例如以下命令实现主机 6100 端口到模拟器或者实体设备 7100 端口的转发:

adb forward tcp:6100 tcp:7100

adb connect 通过 wifi 使用 adb

命令使用方法:

adb connect <host>[:<port>]

操作步骤:

  • 手机连接 usb 接口;

  • adb devices 列出设备;

  • adb tcpip 5555:在 TCP 模式下重启,端口为5555

  • adb connect #.#.#.# 连接到 #.#.#.#:5555

    参数 #.#.#.# 是 Android 设备的 IP 地址。

adb usb

在 usb 模式下重新连接;

文件操作 push / pull

adb 命令 pushpull将文件从本地拷贝到手机或者从手机拷贝到本地;

使用方法:

adb pull remote local // 从设备拷贝到本地
adb push local remote // 从本地推送到设备

调试命令

  • dumpsys:输出系统数据;
  • dumpstate:输出系统状态;
  • logcat:输出日志;

调用 Activity Manager(am)

使用方法:

adb shell am command

利用该命令可以启动某个 activity、service、发送广播等。

可用的 Activity Manager 命令如下:

  • start [options] intent:启动 intent 指定的 activity。选项主要有如下:

    • -D:启动调试;
    • -W:等待启动完成;
    • --start-profiler file:启动分析器并将结果发送到file;
    • -P file:类似 start-profiler,但是当应用进入空闲状态时停止分析;
    • -R count:重复启动 activity count 次。每次重复前将完成顶部 activity;
    • -S:启动 Activity 前强行停止目标应用;
    • —user user_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行;
  • startservice [options] intent:启动 intent 对应的 Service;

    选项有:

    • —user user_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行;
  • force-stop package_name:强行停止与 package_name(应用包名) 相关联的所有应用

  • kill [options] package_name:终止与 package_name(应用的包名称)关联的所有进程。此命令仅终止可安全终止且不会影响用户体验的进程;

    选项有:

    • —user user_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行;
  • kill-all:终止后台所有进程;

  • broadcast [options] intent:发出广播 intent;

    选项有:

    • —user user_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行;
  • instrument [options] compoent:使用 Instrumentation 实例监控。通常情况下 component 是**test_package/runner_class**;

    可选项有:

    • -r:输出原始结果,否则对report_key_streamresult 进行解码;
    • -e name value:将参数 name 的值设置为 value
    • -p file:将分析数据写入 file;
    • -w:先等待仪器完成,然后再返回,测试运行器需要使用此选项;
    • --no-window-animation:运行时关闭窗口动画;
    • —user user_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行;
  • profile start process file:启动 process 进程的分析器,将结果写入 file;

  • profile start process:停止 process 进程的分析器;

  • dumpheap [options] process file:将 process 进程的内存使用情况保存到 file 文件中;

    可选项有:

    • —user user_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行;
    • -n:保存原生堆,而非托管堆;
  • set-debug-app [options] package:将应用 package 设为调试;

    可选项有:

    • -w:应用启动时等待调试程序;
    • --persistent:保留此值;
  • clear-debug-app:清除设置的调试 软件;

  • monitor [options]:启动对 crash 或 anr 的监控;

  • display-size [reset | width x height]:替换模拟器、设备的显示尺寸,用于处事不同分辨率显示;

  • display-density dpi:替换设备的显示密度;

  • to-uri intent:将 intent 以 URI 的形式输出;

  • to-intent-uri intent:将给定的 intent 规范以 intent:URI 的形式输出;

调用软件包管理器 Package Manager(pm)

使用方法:

adb shell pm command

可用的命令有:

  • list packages [options] filter:输出 所有包含 filter 文本的软件包,默认列出所有的软件包;

    可选项有:

    • -f:查看它们的关联文件;
    • -d:进行过滤以仅显示已停用的软件包;
    • -e:进行过滤以仅显示已启用的软件包;
    • -s:进行过滤以仅显示系统软件包;
    • -3:进行过滤以仅显示第三方软件包;
    • -i:查看软件包的安装程序;
    • -u:包括卸载的软件包;
    • --user user_id:要查询的用户空间;
  • list permission-groups:输出所有已知的权限组;

  • list permissions [options] group:输出所有已知权限,或者,仅输出 group 中的权限;

    可选项有:

    • -g:按组加以组织;
    • -f:输出所有信息;
    • -s:仅输出间断摘要;
    • -d:仅列出危险权限;
    • -u:仅列出用户看到的权限;
  • **list instrumentation [options] **:列出所有的测试软件包;

    选项有:

    • -f:列出用于测试软件包的 apk 文件;
    • target_package:列出仅用于此应用的测试软件包;
  • list features:列出系统的所有功能;

  • list libraries:列出支持的所有库;

  • list users:列出设备系统上所有的用户;

  • path package:输出给定packge 的 apk 路径;

  • install [options] path:将软件安装到 path 指定的路径

    选项有:

    • -l:安装具有锁定功能的软件包;
    • -r:覆盖现有应用,保留用户数据;
    • -t:允许安装测试 apk;
    • -i install_package_name:指定安装程序软件包名称;
    • -s:在共享的大容量存储(如 sdcard)上安装软件包;
    • -f:在内部系统内存上安装软件包;
    • -d:允许版本降级安装;
    • -g:授予应用清淡中列出的所有权限;
  • uninstall [options] package:从系统中移除软件;

    选项有:

    • -k:移除软件后保留数据和缓存目录;
  • clear package:删除与软件包关联的所有数据;

  • enable package_or_component:启用给定软件包或组件(作为“package/class”写入);

  • disable package_or_component:停用给定软件包或组件(作为“package/class”写入);

  • disable-user[options] package_or_component

    选项有:

    • —user user_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行;
  • 允许/撤销权限:

    • grant package_name permission:授予应用权限;

    • revoke package_name permission:撤销应用权限;

      在运行 Android 6.0(API 级别 23)及更高版本的设备上,可以是应用清单中声明的任何权限。在运行 Android 5.1(API 级别 22)和更低版本的设备上,必须是应用定义的可选权限。

  • 设置/获取应用安装位置:

    • set-install-location location:更改默认安装位置;

    • get-install-location:获取默认安装位置;

      上述命令设置或者获取结果都是三个值:

      • 0:自动—让系统决定最佳位置。
      • 1:内部—安装在内部设备存储上。
      • 2:外部—安装在外部介质上。

      使用此命令会导致应用中断和其它意外行为

  • set-permission-enforced permission [true|false]:指定是否强制执行给定的权限;

  • trim-caches desired_free_space:减少缓存文件以达到给定的可用空间;

  • create-user user_name:创建新用户 user_name;

  • remove-user user_id: 移除 user_id 对应的用户,删除与该用户关联的所有数据;

  • get-max-users:输出设备支持的最大用户数;

截图(screencap)以及录制视频(screenrecord)

  • 截图

    adb shell screencap /sdcard/screen.png
  • 录制视频:

    adb shell screenrecord [options] filename
    • 音频和视频不能同时录制;
    • 按 Control + C 停止屏幕录制,否则,到三分钟或 --time-limit 设置的时间限制时,录制将自动停止;

    视频录制的参数:

    • --help:显示帮助命令;

    • --size width x height:设置视频大小,默认是设备的元素显示分辨率(如果支持),如果不支持则使用1280 x 720

    • --bit-rate rate:设置视频的视频比特率(以兆比特每秒为单位)。默认值为 4Mbps。您可以增加比特率以提升视频质量,但这么做会导致影片文件变得更大;

      // 设置比特率为6Mbps
      adb shell screenrecord --bit-rate 6000000 /sdcard/demo.mp4
    • --time-limit time:设置最大录制时间,单位为 s,默认值为 3分钟;

    • --rotate:视频输出旋转90度(实验功能);

    • --verbose:啰嗦模式;