作为一名 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-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
:啰嗦模式;