作为一名 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 |
必须要安装驱动,并且打开开发者模式下的 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 命令 push、pull将文件从本地拷贝到手机或者从手机拷贝到本地;
使用方法:
adb pull remote local // 从设备拷贝到本地 |
调试命令
dumpsys:输出系统数据;dumpstate:输出系统状态;logcat:输出日志;
调用 Activity Manager(am)
使用方法:
adb shell am command |
利用该命令可以启动某个 activity、service、发送广播等。
可用的 Activity Manager 命令如下:
-
start[options] intent:启动 intent 指定的 activity。选项主要有如下:-D:启动调试;-W:等待启动完成;--start-profilerfile:启动分析器并将结果发送到file;-Pfile:类似 start-profiler,但是当应用进入空闲状态时停止分析;-Rcount:重复启动 activity count 次。每次重复前将完成顶部 activity;-S:启动 Activity 前强行停止目标应用;—useruser_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行;
-
startservice[options] intent:启动 intent 对应的 Service;选项有:
—useruser_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行;
-
force-stoppackage_name:强行停止与 package_name(应用包名) 相关联的所有应用; -
kill[options] package_name:终止与package_name(应用的包名称)关联的所有进程。此命令仅终止可安全终止且不会影响用户体验的进程;选项有:
—useruser_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行;
-
kill-all:终止后台所有进程; -
broadcast[options] intent:发出广播 intent;选项有:
—useruser_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行;
-
instrument[options] compoent:使用Instrumentation实例监控。通常情况下 component 是**test_package/runner_class**;可选项有:
-r:输出原始结果,否则对report_key_streamresult进行解码;-ename value:将参数 name 的值设置为 value;-pfile:将分析数据写入 file;-w:先等待仪器完成,然后再返回,测试运行器需要使用此选项;--no-window-animation:运行时关闭窗口动画;—useruser_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行;
-
profile startprocess file:启动 process 进程的分析器,将结果写入 file; -
profile startprocess:停止 process 进程的分析器; -
dumpheap[options] process file:将 process 进程的内存使用情况保存到 file 文件中;可选项有:
—useruser_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-densitydpi:替换设备的显示密度; -
to-uriintent:将 intent 以 URI 的形式输出; -
to-intent-uriintent:将给定的 intent 规范以intent:URI的形式输出;
调用软件包管理器 Package Manager(pm)
使用方法:
adb shell pm command |
可用的命令有:
-
list packages[options] filter:输出 所有包含 filter 文本的软件包,默认列出所有的软件包;可选项有:
-f:查看它们的关联文件;-d:进行过滤以仅显示已停用的软件包;-e:进行过滤以仅显示已启用的软件包;-s:进行过滤以仅显示系统软件包;-3:进行过滤以仅显示第三方软件包;-i:查看软件包的安装程序;-u:包括卸载的软件包;--useruser_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:列出设备系统上所有的用户; -
pathpackage:输出给定packge 的 apk 路径; -
install[options] path:将软件安装到 path 指定的路径选项有:
-l:安装具有锁定功能的软件包;-r:覆盖现有应用,保留用户数据;-t:允许安装测试 apk;-iinstall_package_name:指定安装程序软件包名称;-s:在共享的大容量存储(如 sdcard)上安装软件包;-f:在内部系统内存上安装软件包;-d:允许版本降级安装;-g:授予应用清淡中列出的所有权限;
-
uninstall[options] package:从系统中移除软件;选项有:
-k:移除软件后保留数据和缓存目录;
-
clearpackage:删除与软件包关联的所有数据; -
enablepackage_or_component:启用给定软件包或组件(作为“package/class”写入); -
disablepackage_or_component:停用给定软件包或组件(作为“package/class”写入); -
disable-user[options] package_or_component选项有:
—useruser_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行;
-
允许/撤销权限:
-
grantpackage_name permission:授予应用权限; -
revokepackage_name permission:撤销应用权限;在运行 Android 6.0(API 级别 23)及更高版本的设备上,可以是应用清单中声明的任何权限。在运行 Android 5.1(API 级别 22)和更低版本的设备上,必须是应用定义的可选权限。
-
-
设置/获取应用安装位置:
-
set-install-locationlocation:更改默认安装位置; -
get-install-location:获取默认安装位置;上述命令设置或者获取结果都是三个值:
0:自动—让系统决定最佳位置。1:内部—安装在内部设备存储上。2:外部—安装在外部介质上。
使用此命令会导致应用中断和其它意外行为
-
-
set-permission-enforcedpermission [true|false]:指定是否强制执行给定的权限; -
trim-cachesdesired_free_space:减少缓存文件以达到给定的可用空间; -
create-useruser_name:创建新用户 user_name; -
remove-useruser_id: 移除 user_id 对应的用户,删除与该用户关联的所有数据; -
get-max-users:输出设备支持的最大用户数;
截图(screencap)以及录制视频(screenrecord)
-
截图
adb shell screencap /sdcard/screen.png
-
录制视频:
adb shell screenrecord [options] filename
- 音频和视频不能同时录制;
- 按 Control + C 停止屏幕录制,否则,到三分钟或
--time-limit设置的时间限制时,录制将自动停止;
视频录制的参数:
-
--help:显示帮助命令; -
--sizewidth x height:设置视频大小,默认是设备的元素显示分辨率(如果支持),如果不支持则使用1280 x 720; -
--bit-raterate:设置视频的视频比特率(以兆比特每秒为单位)。默认值为 4Mbps。您可以增加比特率以提升视频质量,但这么做会导致影片文件变得更大;// 设置比特率为6Mbps
adb shell screenrecord --bit-rate 6000000 /sdcard/demo.mp4 -
--time-limittime:设置最大录制时间,单位为 s,默认值为 3分钟; -
--rotate:视频输出旋转90度(实验功能); -
--verbose:啰嗦模式;