Android 调试桥(adb) | Android 开发者
文章推薦指數: 80 %
Android 调试桥(adb) 是一种功能多样的命令行工具,可让您与设备进行通信。
adb 命令可用于执行各种设备操作(例如安装和调试应用),并提供对Unix shell(可用来在设备 ...
平台
AndroidStudio
GooglePlay
Jetpack
Kotlin
文档
游戏
Language
English
BahasaIndonesia
Español–AméricaLatina
Português–Brasil
TiếngViệt
中文–简体
日本語
한국어
登录
AndroidStudio
下载
新变化
用户指南
预览
平台
AndroidStudio
下载
新变化
用户指南
预览
GooglePlay
Jetpack
Kotlin
文档
游戏
探索AndroidStudio
概览安装AndroidStudio迁移至AndroidStudio配置IDE键盘快捷键无障碍功能更新IDE和工具
工作流基础知识
管理项目
概览创建项目Play功能分发简介
添加C和C++代码
概览安装NDK和CMake为AGP配置NDK配置CMake关联Gradle创建Android库设置持续集成
编写您的应用
概览从模板添加代码查找示例代码为新设备添加模块创建Java类或类型使用Java8语言功能Java8语言支持表添加应用资源使用布局编辑器构建界面使用MotionEditor制作动画管理您应用的界面资源设计应用主题背景添加多密度矢量图形使用ImageAssetStudio创建图标创建可调整大小的位图(9-Patch)创建WebP图片本地化界面添加Android应用链接连接到Firebase使用Lint检查改进您的代码使用注解改进代码检查工具属性参考
构建和运行您的应用
概览
在模拟器上运行应用
概览创建和管理虚拟设备从命令行启动模拟器发送模拟器控制台命令设置模拟器网络配置硬件加速模拟器功能比较对模拟器进行问题排查
在硬件设备上运行应用
概览安装原始设备制造商(OEM)USB驱动程序获取GoogleUSB驱动程序创建运行/调试配置从命令行构建您的应用
配置build
概览配置应用模块添加build依赖项配置build变体使用AndroidGradle插件升级助理Gradle提示与诀窍迁移至Kotlin脚本
优化构建速度
概览排查构建性能问题对build进行性能剖析使用MavenPublish插件管理清单文件缩减应用大小启用multidex扩展AndroidGradle插件集成自定义C/C++构建系统
调试应用
概览配置开发者选项写入和查看日志分析堆栈轨迹使用布局检查器调试布局使用NetworkInspector检查网络流量使用DatabaseInspector调试数据库使用后台任务检查器调试WorkManager工作器查看设备上的文件调试预构建的APK截屏录制视频获取并阅读bug报告使用APK分析器分析您的build
测试应用
概览在AndroidStudio中测试从命令行进行测试高级测试设置
其他测试工具
概览Espresso测试记录器应用抓取工具MonkeyTesting
monkeyrunner参考
概览MonkeyDeviceMonkeyImageMonkeyRunner
分析应用性能
概览
AndroidStudio性能分析器
概览
对CPU活动进行性能分析
概览录制轨迹导出轨迹导入轨迹检查轨迹界面卡顿检测通过检测应用生成轨迹日志分析内存用量分析能耗情况使用预构建APK进行性能分析
对您的应用进行基准测试
概览
Microbenchmark
概览编写基准对基准进行性能分析插桩参数不使用Gradle进行构建
Macrobenchmark
编写基准捕获指标控制您的应用插桩参数持续集成跟踪和分析性能使用BaselineProfiles提升应用性能
衡量性能
概览示例
发布应用
概览准备发布对您的应用进行版本控制对应用进行签名上传应用
发布库
概览准备发布配置发布内容变体配置测试夹具以供发布上传库
命令行工具
概览aapt2adbapkanalyzerapksigneravdmanagerbmgrbundletoold8dmtracedumpdumpsysetc1tooljobbjetifier-standalonelogcatmksdcardretracesdkmanagersystraceperfettozipalign环境变量
问题排查
已知问题
报告bug
Android开发者
AndroidStudio
用户指南
Android调试桥(adb)
Android调试桥(adb)是一种功能多样的命令行工具,可让您与设备进行通信。
adb命令可用于执行各种设备操作(例如安装和调试应用),并提供对Unixshell(可用来在设备上运行各种命令)的访问权限。
它是一种客户端-服务器程序,包括以下三个组件:
客户端:用于发送命令。
客户端在开发机器上运行。
您可以通过发出adb命令从命令行终端调用客户端。
守护程序(adbd):用于在设备上运行命令。
守护程序在每个设备上作为后台进程运行。
服务器:用于管理客户端与守护程序之间的通信。
服务器在开发机器上作为后台进程运行。
adb包含在AndroidSDK平台工具软件包中。
您可以使用SDK管理器下载此软件包,该管理器会将其安装在android_sdk/platform-tools/下。
或者,如果您需要独立的AndroidSDK平台工具软件包,也可以点击此处进行下载。
如需了解如何连接设备以使用ADB,包括如何使用ConnectionAssistant对常见问题进行排查,请参阅在硬件设备上运行应用。
adb的工作原理
当您启动某个adb客户端时,该客户端会先检查是否有adb服务器进程正在运行。
如果没有,它会启动服务器进程。
服务器在启动后会与本地TCP端口5037绑定,并监听adb客户端发出的命令-所有adb客户端均通过端口5037与adb服务器通信。
然后,服务器会与所有正在运行的设备建立连接。
它通过扫描5555到5585之间(该范围供前16个模拟器使用)的奇数号端口查找模拟器。
服务器一旦发现adb守护程序(adbd),便会与相应的端口建立连接。
请注意,每个模拟器都使用一对按顺序排列的端口-用于控制台连接的偶数号端口和用于adb连接的奇数号端口。
例如:
模拟器1,控制台:5554
模拟器1,adb:5555
模拟器2,控制台:5556
模拟器2,adb:5557
依此类推
如上所示,在端口5555处与adb连接的模拟器与控制台监听端口为5554的模拟器是同一个。
服务器与所有设备均建立连接后,您便可以使用adb命令访问这些设备。
由于服务器管理与设备的连接,并处理来自多个adb客户端的命令,因此您可以从任意客户端(或从某个脚本)控制任意设备。
在设备上启用adb调试
如要在通过USB连接的设备上使用adb,您必须在设备的系统设置中启用USB调试(位于开发者选项下)。
如需在通过WLAN连接的设备上使用adb,请参阅通过WLAN连接到设备。
在搭载Android4.2及更高版本的设备上,“开发者选项”屏幕默认情况下处于隐藏状态。
如需将其显示出来,请依次转到设置>关于手机,然后点按版本号七次。
返回上一屏幕,在底部可以找到开发者选项。
在某些设备上,“开发者选项”屏幕所在的位置或名称可能有所不同。
现在,您已经可以通过USB连接设备。
您可以通过从android_sdk/platform-tools/目录执行adbdevices验证设备是否已连接。
如果已连接,您将看到设备名称以“设备”形式列出。
注意:当您连接搭载Android4.2.2或更高版本的设备时,系统会显示一个对话框,询问您是否接受允许通过此计算机进行调试的RSA密钥。
这种安全机制可以保护用户设备,因为它可以确保只有在您能够解锁设备并确认对话框的情况下才能执行USB调试和其他adb命令。
要详细了解如何通过USB连接到设备,请参阅在硬件设备上运行应用。
通过Wi-Fi连接到设备(Android11及更高版本)
注意:以下说明不适用于搭载Android11的Wear设备。
如需了解详情,请参阅调试WearOS应用指南。
Android11及更高版本支持使用Android调试桥(adb)从工作站以无线方式部署和调试应用。
例如,您可以将可调试应用部署到多台远程设备,而无需通过USB实际连接设备。
这样就可以避免常见的USB连接问题,例如驱动程序安装方面的问题。
在开始使用无线调试功能之前,您必须先完成以下步骤:
确保您的工作站和设备已连接到同一无线网络。
确保您的设备搭载的是Android11或更高版本。
如需了解详情,请参阅查看和更新Android版本。
确保您具有AndroidStudioBumblebee。
您可以在此处下载。
在工作站上,更新到最新版本的SDK平台工具。
如需使用无线调试功能,您必须使用二维码或配对码将设备与工作站配对。
您的工作站和设备必须连接到同一无线网络。
如需连接到您的设备,请按以下步骤操作:
在设备上启用开发者选项:
在设备上,找到版本号选项。
在以下设备上,您可以在下面这些位置找到此选项:
设备
设置
GooglePixel
设置>关于手机>版本号
SamsungGalaxyS8及更高版本
设置>关于手机>软件信息>版本号
LGG6及更高版本
设置>关于手机>软件信息>版本号
HTCU11及更高版本
设置>关于>软件信息>更多>版本号或设置>系统>关于手机>软件信息>更多>版本号
一加5T及更高版本
设置>关于手机>版本号
连续点按版本号选项七次,直到您看到消息Youare
nowadeveloper!这会在您的手机上启用开发者选项。
在您的设备上启用通过Wi-Fi调试:
在设备上找到开发者选项。
在以下设备上,您可以在下面这些位置找到此选项:
设备
设置
GooglePixel、一加5T及更高版本
设置>系统>开发者选项
SamsungGalaxyS8及更高版本、LGG6及更高版本、HTCU11及更高版本
设置>开发者选项
在开发者选项中,向下滚动到调试部分,然后开启无线调试。
在要允许通过此网络进行无线调试吗?弹出式窗口中,选择允许。
打开AndroidStudio,然后从运行配置下拉菜单中选择PairDevicesUsingWi-Fi。
图1.运行配置下拉菜单。
系统会弹出PairdevicesoverWi-Fi窗口,如下所示。
图2.使用二维码或配对码配对设备的弹出式窗口
在您的设备上,点按无线调试,然后配对您的设备:
图3.GooglePixel手机上的无线调试设置屏幕截图。
如需使用二维码配对您的设备,请从上面的PairdevicesoverWi-Fi窗口中选择PairdevicewithQRcode。
如需使用配对码配对您的设备,请从上面的PairdevicesoverWi-Fi弹出式窗口中选择Pairdevicewithpairingcode。
在设备上,选择Pairusingpairingcode,并记下6位数的PIN码。
您的设备显示在PairdevicesoverWi-Fi窗口中后,您可以选择Pair,并输入设备上显示的6位数PIN码。
图4.6位数PIN码输入示例。
配对后,您可以尝试将应用部署到设备。
如需与其他设备配对,或在工作站上取消保存此设备,请在设备上转到无线调试部分,在已配对的设备下点按工作站名称,然后选择取消保存。
如果您想快速开启和关闭无线调试功能,可以利用快捷设置开发者图块进行无线调试(可在开发者选项>快捷设置开发者图块中找到)。
图5.通过快捷设置开发者图块设置,您可以快速开启和关闭无线调试功能。
或者,要想在不使用AndroidStudio的情况下通过命令行连接到您的设备,请按以下步骤操作:
如上所述,在设备上启用开发者选项。
如上所述,在设备上启用无线调试。
在工作站上,打开一个终端窗口并转到android_sdk/platform-tools。
选择Pairdevicewithpairingcode,找到您的IP地址、端口号和配对码。
记下设备上显示的IP地址、端口号和配对码。
在工作站的终端上,运行adbpairipaddr:port。
请使用上述IP地址和端口号。
出现提示时,输入配对码,如下所示。
图6.表明设备已成功配对的消息。
解决无线连接问题
如果您通过无线方式连接到设备时遇到问题,可以尝试通过以下问题排查步骤来解决问题。
检查您的工作站和设备是否满足前提条件
若要满足无线调试的前提条件,请确保:
您的工作站和设备已连接到同一无线网络。
您的设备搭载的是Android11或更高版本。
如需了解详情,请参阅查看并更新Android版本。
您具有AndroidStudioBumblebee。
您可以在此处下载。
您的工作站上装有最新版本的SDK平台工具。
检查是否存在其他已知问题
下面列出了AndroidStudio中目前已知的无线调试问题及其解决办法。
无法连接到Wi-Fi:某些Wi-Fi网络(如企业Wi-Fi网络)可能会阻止点对点连接,并且不允许您通过Wi-Fi进行连接。
请尝试通过网线连接,或连接其他Wi-Fi网络。
“通过Wi-Fi使用adb”的功能有时会自动关闭:如果设备切换Wi-Fi网络或断开网络连接,就可能会发生这种情况。
通过Wi-Fi连接到设备(Android10及更低版本)
注意:以下说明不适用于搭载Android10或更低版本的Wear设备。
如需了解详情,请参阅调试WearOS应用指南。
一般情况下,adb通过USB与设备进行通信,但您也可以通过Wi-Fi使用adb。
如要连接到搭载Android10或更低版本的设备,您必须通过USB执行一些初始步骤,如下所述:
将Android设备和adb主机连接到这两者都可以访问的同一Wi-Fi网络。
请注意,并非所有接入点都适用;您可能需要使用防火墙已正确配置为支持adb的接入点。
如果您要连接到WearOS设备,请关闭手机上与该设备配对的蓝牙。
使用USB线将设备连接到主机。
设置目标设备以监听端口5555上的TCP/IP连接。
adbtcpip5555
拔掉连接目标设备的USB线。
找到Android设备的IP地址。
例如,对于Nexus设备,您可以在设置>关于平板电脑(或关于手机)>状态>IP地址下找到IP地址。
或者,对于WearOS设备,您可以在设置>WLAN设置>高级>IP地址下找到IP地址。
通过IP地址连接到设备。
adbconnectdevice_ip_address:5555
确认主机已连接到目标设备:
$adbdevices
Listofdevicesattached
device_ip_address:5555device
现在,您可以开始操作了!
如果adb连接断开:
确保主机仍与Android设备连接到同一个WLAN网络。
通过再次执行adbconnect步骤重新连接。
如果上述操作未解决问题,重置adb主机:
adbkill-server
然后,从头开始操作。
查询设备
在发出adb命令之前,了解哪些设备实例已连接到adb服务器会很有帮助。
您可以使用devices命令生成已连接设备的列表。
adbdevices-l
作为回应,adb会针对每个设备输出以下状态信息:
序列号:由adb创建的字符串,用于通过端口号唯一标识设备。
下面是一个序列号示例:emulator-5554
状态:设备的连接状态可以是以下几项之一:
offline:设备未连接到adb或没有响应。
device:设备现已连接到adb服务器。
请注意,此状态并不表示Android系统已完全启动并可正常运行,因为在设备连接到adb时系统仍在启动。
不过,在启动后,这将是设备的正常运行状态。
nodevice:未连接任何设备。
说明:如果您包含-l选项,devices命令会告知您设备是什么。
当您连接了多个设备时,此信息很有用,可帮助您将它们区分开来。
以下示例展示了devices命令及其输出。
有三个设备正在运行。
列表中的前两行表示模拟器,第三行表示连接到计算机的硬件设备。
$adbdevices
Listofdevicesattached
emulator-5556deviceproduct:sdk_google_phone_x86_64model:Android_SDK_built_for_x86_64device:generic_x86_64
emulator-5554deviceproduct:sdk_google_phone_x86model:Android_SDK_built_for_x86device:generic_x86
0a388e93deviceusb:1-1product:razormodel:Nexus_7device:flo
模拟器未列出
adbdevices命令的极端命令序列会导致正在运行的模拟器不显示在adbdevices输出中(即使在您的桌面上可以看到该模拟器)。
当满足以下所有条件时,就会发生这种情况:
adb服务器未在运行,
您在使用emulator命令时,将-port或-ports选项的端口值设为5554到5584之间的奇数,
您选择的奇数号端口处于空闲状态,因此可以与指定端口号的端口建立连接,或者该端口处于忙碌状态,模拟器切换到了符合第2条中要求的另一个端口,以及
启动模拟器后才启动adb服务器。
避免出现这种情况的一种方法是让模拟器自行选择端口,并且每次运行的模拟器数量不要超过16个。
另一种方法是始终先启动adb服务器,然后再使用emulator命令,如下例所示。
示例1:在下面的命令序列中,adbdevices命令启动了adb服务器,但是设备列表未显示。
停止adb服务器,然后按照所示顺序输入以下命令。
对于avd名称,请提供系统中有效的avd名称。
如需获取avd名称列表,请输入emulator-list-avds。
emulator命令位于android_sdk/tools目录下。
$adbkill-server
$emulator-avdNexus_6_API_25-port5555
$adbdevices
Listofdevicesattached
*daemonnotrunning.startingitnowonport5037*
*daemonstartedsuccessfully*
示例2:在下面的命令序列中,adbdevices显示了设备列表,因为先启动了adb服务器。
如果想在adbdevices输出中看到模拟器,请停止adb服务器,然后在使用emulator命令之后、使用adbdevices命令之前,重新启动该服务器,如下所示:
$adbkill-server
$emulator-avdNexus_6_API_25-port5557
$adbstart-server
$adbdevices
Listofdevicesattached
emulator-5557device
如需详细了解模拟器命令行选项,请参阅使用命令行参数。
将命令发送至特定设备
如果有多个设备在运行,您在发出adb命令时必须指定目标设备。
为此,请使用devices命令获取目标设备的序列号。
获得序列号后,请结合使用-s选项与adb命令来指定序列号。
如果您要发出很多adb命令,可以将$ANDROID_SERIAL环境变量设为包含序列号。
如果您同时使用-s和$ANDROID_SERIAL,-s会替换$ANDROID_SERIAL。
在以下示例中,先获得了已连接设备的列表,然后使用其中一个设备的序列号在该设备上安装了helloWorld.apk。
$adbdevices
Listofdevicesattached
emulator-5554device
emulator-5555device
$adb-semulator-5555installhelloWorld.apk
注意:如果您在多个设备可用时发出命令但未指定目标设备,adb会生成错误。
如果有多个可用设备,但只有一个是模拟器,请使用-e选项将命令发送至该模拟器。
同样,如果有多个设备,但只连接了一个硬件设备,请使用-d选项将命令发送至该硬件设备。
安装应用
您可以使用adb的install命令在模拟器或连接的设备上安装APK:
adbinstallpath_to_apk
安装测试APK时,必须在install命令中使用-t选项。
如需了解详情,请参阅-t。
要详细了解如何创建可安装在模拟器/设备实例上的APK文件,请参阅构建和运行应用。
请注意,如果您使用的是AndroidStudio,则无需直接使用adb在模拟器/设备上安装您的应用。
AndroidStudio会为您执行应用的打包和安装操作。
设置端口转发
您可以使用forward命令设置任意端口转发,将特定主机端口上的请求转发到设备上的其他端口。
以下示例设置了主机端口6100到设备端口7100的转发:
adbforwardtcp:6100tcp:7100
以下示例设置了主机端口6100到local:logd的转发:
adbforwardtcp:6100local:logd
将文件复制到设备/从设备复制文件
您可以使用pull和push命令将文件复制到设备或从设备复制文件。
与install命令(仅将APK文件复制到特定位置)不同,使用pull和push命令可将任意目录和文件复制到设备中的任何位置。
如需从设备中复制某个文件或目录(及其子目录),请使用以下命令:
adbpullremotelocal
如需将某个文件或目录(及其子目录)复制到设备,请使用以下命令:
adbpushlocalremote
将local和remote替换为开发机器(本地)和设备(远程)上的目标文件/目录的路径。
例如:
adbpushfoo.txt/sdcard/foo.txt
停止adb服务器
在某些情况下,您可能需要终止adb服务器进程,然后重启以解决问题(例如,如果adb不响应命令)。
如需停止adb服务器,请使用adbkill-server命令。
然后,您可以通过发出其他任何adb命令来重启服务器。
发出adb命令
您可以从开发机器上的命令行发出adb命令,也可以通过脚本发出。
用法如下:
adb[-d|-e|-sserial_number]command
如果只有一个模拟器在运行或者只连接了一个设备,系统会默认将adb命令发送至该设备。
如果有多个模拟器正在运行并且/或者连接了多个设备,您需要使用-d、-e或-s选项指定应向其发送命令的目标设备。
您可以使用以下命令来查看所有支持的adb命令的详细列表:
adb--help
发出shell命令
您可以使用shell命令通过adb发出设备命令,也可以启动交互式shell。
如需发出单个命令,请使用shell命令,如下所示:
adb[-d|-e|-sserial_number]shellshell_command
要在设备上启动交互式shell,请使用shell命令,如下所示:
adb[-d|-e|-sserial_number]shell
要退出交互式shell,请按Ctrl+D键或输入exit。
注意:在Android平台工具23及更高版本中,adb处理参数的方式与ssh(1)命令相同。
这项变更解决了很多命令注入方面的问题,还使安全执行包含shell元字符的命令(如adbinstallLet\'sGo.apk)成为可能。
不过,这项变更还意味着,对包含shell元字符的所有命令的解释也发生了变化。
例如,adbshellsetpropfoo'ab'命令现在会返回错误,因为单引号(')会被本地shell消去,设备看到的是adbshellsetpropfooab。
如需使该命令正常运行,请引用两次,一次用于本地shell,另一次用于远程shell,与处理ssh(1)的方法相同。
例如,adbshellsetpropfoo"'ab'"。
Android提供了大多数常见的Unix命令行工具。
如需查看可用工具的列表,请使用以下命令:
adbshellls/system/bin
对于大多数命令,都可通过--help参数获得命令帮助。
许多shell命令都由toybox提供。
对于所有toybox命令,都可通过toybox--help可获得命令的常规帮助。
另请参阅Logcat命令行工具,该工具对监控系统日志很有用。
调用Activity管理器(am)
在adbshell中,您可以使用Activity管理器(am)工具发出命令以执行各种系统操作,如启动Activity、强行停止进程、广播intent、修改设备屏幕属性,等等。
在shell中,相应的语法为:
amcommand
您也可以直接从adb发出Activity管理器命令,无需进入远程shell。
例如:
adbshellamstart-aandroid.intent.action.VIEW
表2.可用的Activity管理器命令
命令
说明
start[options]intent
启动由intent指定的Activity。
请参阅intent参数的规范。
具体选项包括:
-D:启用调试功能。
-W:等待启动完成。
--start-profilerfile:启动性能剖析器并将结果发送至file。
-Pfile:类似于--start-profiler,但当应用进入空闲状态时剖析停止。
-Rcount:重复启动Activitycount次。
在每次重复前,将完成顶层Activity。
-S:在启动Activity前,强行停止目标应用。
--opengl-trace:启用OpenGL函数的跟踪。
--useruser_id|current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行。
startservice[options]intent
启动由intent指定的Service。
请参阅intent参数的规范。
具体选项包括:
--useruser_id|current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行。
force-stoppackage
强行停止与package(应用的软件包名称)关联的所有进程。
kill[options]package
终止与package(应用的软件包名称)关联的所有进程。
此命令仅终止可安全终止且不会影响用户体验的进程。
具体选项包括:
--useruser_id|all|current:指定要终止哪个用户的进程;如果未指定,则终止所有用户的进程。
kill-all
终止所有后台进程。
broadcast[options]intent
发出广播intent。
请参阅intent参数的规范。
具体选项包括:
[--useruser_id|all|current]:指定要发送给哪个用户;如果未指定,则发送给所有用户。
instrument[options]component
使用Instrumentation实例启动监控。
通常情况下,目标component采用test_package/runner_class格式。
具体选项包括:
-r:输出原始结果(否则,对report_key_streamresult进行解码)。
与[-eperftrue]结合使用可生成性能测量的原始输出。
-enamevalue:将参数name设为value。
对于测试运行程序,通用格式为
-etestrunner_flagvalue[,value...]。
-pfile:将剖析数据写入file。
-w:等待插桩完成后再返回。
测试运行程序需要使用此选项。
--no-window-animation:运行时关闭窗口动画。
--useruser_id|current:指定以哪个用户身份运行插桩;如果未指定,则以当前用户身份运行。
profilestartprocessfile
启动process的性能剖析器,将结果写入file。
profilestopprocess
停止process的性能剖析器。
dumpheap[options]processfile
转储process的堆,写入file。
具体选项包括:
--user[user_id|current]:提供进程名称时,指定要转储的进程的用户;如果未指定,则使用当前用户。
-n:转储原生堆,而非托管堆。
set-debug-app[options]package
设置要调试的应用package。
具体选项包括:
-w:应用启动时等待调试程序。
--persistent:保留此值。
clear-debug-app
清除之前使用set-debug-app设置的待调试软件包。
monitor[options]
开始监控崩溃或ANR。
具体选项包括:
--gdb:在崩溃/ANR时,在给定的端口上启动gdbserv。
screen-compat{on|off}package
控制package的屏幕兼容性模式。
display-size[reset|widthxheight]
替换设备显示尺寸。
此命令支持使用大屏设备模仿小屏幕分辨率(反之亦然),对于在不同尺寸的屏幕上测试应用非常有用。
示例:amdisplay-size1280x800
display-densitydpi
替换设备显示密度。
此命令支持使用低密度屏幕在高密度屏幕环境上进行测试(反之亦然),对于在不同密度的屏幕上测试应用非常有用。
示例:amdisplay-density480
to-uriintent
以URI的形式输出给定的intent规范。
请参阅intent参数的规范。
to-intent-uriintent
以intent:URI的形式输出给定的intent规范。
请参阅intent参数的规范。
intent参数的规范
对于采用intent参数的Activity管理器命令,您可以使用以下选项指定intent:
全部显示
-aaction
指定intent操作,如android.intent.action.VIEW。
只能声明一次。
-ddata_uri
指定intent数据URI,如content://contacts/people/1。
只能声明一次。
-tmime_type
指定intentMIME类型,如image/png。
只能声明一次。
-ccategory
指定intent类别,如android.intent.category.APP_CONTACTS。
-ncomponent
指定带有软件包名称前缀的组件名称以创建显式intent,如com.example.app/.ExampleActivity。
-fflags
向setFlags()支持的intent添加标记。
--esnextra_key
添加一个空extra。
URIintent不支持此选项。
-e|--esextra_keyextra_string_value
以键值对的形式添加字符串数据。
--ezextra_keyextra_boolean_value
以键值对的形式添加布尔值数据。
--eiextra_keyextra_int_value
以键值对的形式添加整数型数据。
--elextra_keyextra_long_value
以键值对的形式添加长整型数据。
--efextra_keyextra_float_value
以键值对的形式添加浮点型数据。
--euextra_keyextra_uri_value
以键值对的形式添加URI数据。
--ecnextra_keyextra_component_name_value
添加组件名称,该名称作为ComponentName对象进行转换和传递。
--eiaextra_keyextra_int_value[,extra_int_value...]
添加整数数组。
--elaextra_keyextra_long_value[,extra_long_value...]
添加长整数数组。
--efaextra_keyextra_float_value[,extra_float_value...]
添加浮点数数组。
--grant-read-uri-permission
添加FLAG_GRANT_READ_URI_PERMISSION标记。
--grant-write-uri-permission
添加FLAG_GRANT_WRITE_URI_PERMISSION标记。
--debug-log-resolution
添加FLAG_DEBUG_LOG_RESOLUTION标记。
--exclude-stopped-packages
添加FLAG_EXCLUDE_STOPPED_PACKAGES标记。
--include-stopped-packages
添加FLAG_INCLUDE_STOPPED_PACKAGES标记。
--activity-brought-to-front
添加FLAG_ACTIVITY_BROUGHT_TO_FRONT标记。
--activity-clear-top
添加FLAG_ACTIVITY_CLEAR_TOP标记。
--activity-clear-when-task-reset
添加FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET标记。
--activity-exclude-from-recents
添加FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS标记。
--activity-launched-from-history
添加FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY标记。
--activity-multiple-task
添加FLAG_ACTIVITY_MULTIPLE_TASK标记。
--activity-no-animation
添加FLAG_ACTIVITY_NO_ANIMATION标记。
--activity-no-history
添加FLAG_ACTIVITY_NO_HISTORY标记。
--activity-no-user-action
添加FLAG_ACTIVITY_NO_USER_ACTION标记。
--activity-previous-is-top
添加FLAG_ACTIVITY_PREVIOUS_IS_TOP标记。
--activity-reorder-to-front
添加FLAG_ACTIVITY_REORDER_TO_FRONT标记。
--activity-reset-task-if-needed
添加FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记。
--activity-single-top
添加FLAG_ACTIVITY_SINGLE_TOP标记。
--activity-clear-task
添加FLAG_ACTIVITY_CLEAR_TASK标记。
--activity-task-on-home
添加FLAG_ACTIVITY_TASK_ON_HOME标记。
--receiver-registered-only
添加FLAG_RECEIVER_REGISTERED_ONLY标记。
--receiver-replace-pending
添加FLAG_RECEIVER_REPLACE_PENDING标记。
--selector
需要使用-d和-t选项设置intent数据和类型。
URIcomponentpackage
如果不受上述任一选项的限制,您可以直接指定URI、软件包名称和组件名称。
当某个参数不受限制时,如果该参数包含“:”(冒号),那么该工具会假定参数是URI;如果该参数包含“/”(正斜线),那么该工具会假定参数是组件名称;如果并非上述两种情况,那么该工具会假定参数是软件包名称。
调用软件包管理器(pm)
在adbshell中,您可以使用软件包管理器(pm)工具发出命令,以对设备上安装的应用软件包执行操作和查询。
在shell中,相应的语法为:
pmcommand
您也可以直接从adb发出软件包管理器命令,无需进入远程shell。
例如:
adbshellpmuninstallcom.example.MyApp
表3.可用的软件包管理器命令。
命令
说明
listpackages[options]filter
输出所有软件包,或者,仅输出软件包名称包含filter中的文本的软件包。
具体选项:
-f:查看它们的关联文件。
-d:进行过滤以仅显示已停用的软件包。
-e:进行过滤以仅显示已启用的软件包。
-s:进行过滤以仅显示系统软件包。
-3:进行过滤以仅显示第三方软件包。
-i:查看软件包的安装程序。
-u:也包括已卸载的软件包。
--useruser_id:要查询的用户空间。
listpermission-groups
输出所有已知的权限组。
listpermissions[options]group
输出所有已知的权限,或者,仅输出group中的权限。
具体选项:
-g:按组进行整理。
-f:输出所有信息。
-s:简短摘要。
-d:仅列出危险权限。
-u:仅列出用户将看到的权限。
listinstrumentation[options]
列出所有测试软件包。
具体选项:
-f:列出测试软件包的APK文件。
target_package:仅列出此应用的测试软件包。
listfeatures
输出系统的所有功能。
listlibraries
输出当前设备支持的所有库。
listusers
输出系统中的所有用户。
pathpackage
输出给定package的APK的路径。
install[options]path
将软件包(通过path指定)安装到系统。
具体选项:
-r:重新安装现有应用,并保留其数据。
-t:允许安装测试APK。
仅当您运行或调试了应用或者使用了AndroidStudio的Build>BuildAPK命令时,Gradle才会生成测试APK。
如果是使用开发者预览版SDK(如果targetSdkVersion是字母,而非数字)构建的APK,那么安装测试APK时必须在install命令中包含-t选项。
-iinstaller_package_name:指定安装程序软件包名称。
--install-locationlocation:使用以下某个值设置安装位置:
0:使用默认安装位置。
1:在内部设备存储上安装。
2:在外部介质上安装。
-f:在内部系统内存上安装软件包。
-d:允许版本代码降级。
-g:授予应用清单中列出的所有权限。
--fastdeploy:通过仅更新已更改的APK部分来快速更新安装的软件包。
--incremental:仅安装APK中启动应用所需的部分,同时在后台流式传输剩余数据。
如要使用此功能,您必须为APK签名,创建一个APK签名方案v4文件,并将此文件放在APK所在的目录中。
只有部分设备支持此功能。
此选项会强制adb使用该功能,如果该功能不受支持,则会失败(并提供有关失败原因的详细信息)。
附加--wait选项,可等到APK完全安装完毕后再授予对APK的访问权限。
--no-incremental可阻止adb使用此功能。
uninstall[options]package
从系统中移除软件包。
具体选项:
-k:移除软件包后保留数据和缓存目录。
clearpackage
删除与软件包关联的所有数据。
enablepackage_or_component
启用给定的软件包或组件(写为“package/class”)。
disablepackage_or_component
停用给定的软件包或组件(写为“package/class”)。
disable-user[options]package_or_component
具体选项:
--useruser_id:要停用的用户。
grantpackage_namepermission
向应用授予权限。
在搭载Android6.0(API级别23)及更高版本的设备上,该权限可以是应用清单中声明的任何权限。
在搭载Android5.1(API级别22)及更低版本的设备上,该权限必须是应用定义的可选权限。
revokepackage_namepermission
从应用撤消权限。
在搭载Android6.0(API级别23)及更高版本的设备上,该权限可以是应用清单中声明的任何权限。
在搭载Android5.1(API级别22)及更低版本的设备上,该权限必须是应用定义的可选权限。
set-install-locationlocation
更改默认安装位置。
位置值如下:
0:自动:让系统决定最合适的位置。
1:内部:在内部设备存储上安装。
2:外部:在外部介质上安装。
注意:此命令仅用于调试目的;使用此命令可能会导致应用中断和其他意外行为。
get-install-location
返回当前安装位置。
返回值如下:
0[auto]:让系统决定最合适的位置
1[internal]:在内部设备存储上安装
2[external]:在外部介质上安装
set-permission-enforcedpermission[true|false]
指定是否应强制执行指定权限。
trim-cachesdesired_free_space
减少缓存文件以达到给定的可用空间。
create-useruser_name
创建具有给定user_name的新用户,从而输出该用户的新用户标识符。
remove-useruser_id
移除具有给定user_id的用户,从而删除与该用户关联的所有数据。
get-max-users
输出设备支持的最大用户数。
调用设备政策管理器(dpm)
为便于您开发和测试设备管理(或其他企业)应用,您可以向设备政策管理器(dpm)工具发出命令。
使用该工具可控制活动管理应用,或更改设备上的政策状态数据。
在shell中,语法如下:
dpmcommand
您也可以直接从adb发出设备政策管理器命令,无需进入远程shell:
adbshelldpmcommand
表4.可用的设备政策管理器命令
命令
说明
set-active-admin[options]component
将component设为活动管理。
具体选项包括:
--useruser_id:指定目标用户。
您也可以传递--usercurrent以选择当前用户。
set-profile-owner[options]component
将component设为活动管理,并将其软件包设为现有用户的个人资料所有者。
具体选项包括:
--useruser_id:指定目标用户。
您也可以传递--usercurrent以选择当前用户。
--namename:指定简单易懂的组织名称。
set-device-owner[options]component
将component设为活动管理,并将其软件包设为设备所有者。
具体选项包括:
--useruser_id:指定目标用户。
您也可以传递--usercurrent以选择当前用户。
--namename:指定简单易懂的组织名称。
remove-active-admin[options]component
停用活动管理。
应用必须在清单中声明android:testOnly。
此命令还会移除设备所有者和个人资料所有者。
具体选项包括:
--useruser_id:指定目标用户。
您也可以传递--usercurrent以选择当前用户。
clear-freeze-period-record
清除设备之前设置的系统OTA更新冻结期记录。
在开发管理冻结期的应用时,这有助于避免设备存在调度方面的限制。
请参阅管理系统更新。
在搭载Android9.0(API级别28)及更高版本的设备上受支持。
force-network-logs
强制系统让任何现有网络日志随时可供DPC检索。
如果有可用的连接或DNS日志,DPC会收到onNetworkLogsAvailable()回调。
请参阅网络活动日志。
此命令有调用频率限制。
在搭载Android9.0(API级别28)及更高版本的设备上受支持。
force-security-logs
强制系统向DPC提供任何现有安全日志。
如果有可用的日志,DPC会收到onSecurityLogsAvailable()回调。
请参阅记录企业设备活动。
此命令有调用频率限制。
在搭载Android9.0(API级别28)及更高版本的设备上受支持。
截取屏幕截图
screencap命令是一个用于对设备显示屏截取屏幕截图的shell实用程序。
在shell中,语法如下:
screencapfilename
如需从命令行使用screencap,请输入以下命令:
adbshellscreencap/sdcard/screen.png
以下屏幕截图会话示例展示了如何使用adbshell截取屏幕截图,以及如何使用pull命令从设备下载屏幕截图文件:
$adbshell
shell@$screencap/sdcard/screen.png
shell@$exit
$adbpull/sdcard/screen.png
录制视频
screenrecord命令是一个用于录制设备(搭载Android4.4(API级别19)及更高版本)显示屏的shell实用程序。
该实用程序将屏幕Activity录制为MPEG-4文件。
您可以使用此文件创建宣传视频或培训视频,或将其用于调试或测试。
在shell中,使用以下语法:
screenrecord[options]filename
如需从命令行使用screenrecord,请输入以下命令:
adbshellscreenrecord/sdcard/demo.mp4
按Ctrl+C键(在Mac上,按Command+C键)可停止屏幕录制;如果不手动停止,到三分钟或--time-limit设置的时间限制时,录制将会自动停止。
如需开始录制设备屏幕,请运行screenrecord命令以录制视频。
然后,运行pull命令以将视频从设备下载到主机。
下面是一个录制会话示例:
$adbshell
shell@$screenrecord--verbose/sdcard/demo.mp4
(pressControl+Ctostop)
shell@$exit
$adbpull/sdcard/demo.mp4
screenrecord实用程序能以您要求的任何支持的分辨率和比特率进行录制,同时保持设备显示屏的宽高比。
默认情况下,该实用程序以本机显示分辨率和屏幕方向进行录制,时长不超过三分钟。
screenrecord实用程序的局限性:
音频不与视频文件一起录制。
无法在搭载WearOS的设备上录制视频。
某些设备可能无法以它们的本机显示分辨率进行录制。
如果在录制屏幕时出现问题,请尝试使用较低的屏幕分辨率。
不支持在录制时旋转屏幕。
如果在录制期间屏幕发生了旋转,则部分屏幕内容在录制时将被切断。
表5.screenrecord选项
选项
说明
--help
显示命令语法和选项
--sizewidthxheight
设置视频大小:1280x720。
默认值为设备的本机显示屏分辨率(如果支持);如果不支持,则为1280x720。
为获得最佳效果,请使用设备的AdvancedVideoCoding(AVC)编码器支持的大小。
--bit-raterate
设置视频的视频比特率(以MB/秒为单位)。
默认值为4Mbps。
您可以增加比特率以提升视频品质,但这样做会导致视频文件变大。
下面的示例将录制比特率设为6Mbps:
screenrecord--bit-rate6000000/sdcard/demo.mp4
--time-limittime
设置最大录制时长(以秒为单位)。
默认值和最大值均为180(3分钟)。
--rotate
将输出旋转90度。
此功能处于实验阶段。
--verbose
在命令行屏幕显示日志信息。
如果您不设置此选项,则该实用程序在运行时不会显示任何信息。
读取应用的ART配置文件
从Android7.0(API级别24)开始,AndroidRuntime(ART)会收集已安装应用的执行配置文件,这些配置文件用于优化应用性能。
您可能需要检查收集的配置文件,以了解在应用启动期间,系统频繁执行了哪些方法和使用了哪些类。
要生成文本格式的配置文件信息,请使用以下命令:
adbshellcmdpackagedump-profilespackage
要检索生成的文件,请使用:
adbpull/data/misc/profman/package.txt
重置测试设备
如果您在多个测试设备上测试应用,则在两次测试之间重置设备可能很有用,例如,可以移除用户数据并重置测试环境。
您可以使用testharnessadbshell命令对搭载Android10(API级别29)或更高版本的测试设备执行恢复出厂设置,如下所示。
adbshellcmdtestharnessenable
使用testharness恢复设备时,设备会自动将允许通过当前工作站调试设备的RSA密钥备份在一个持久性位置。
也就是说,在重置设备后,工作站可以继续调试设备并向设备发出adb命令,而无需手动注册新密钥。
此外,为了帮助您更轻松且更安全地继续测试您的应用,使用testharness恢复设备还会更改以下设备设置:
设备会设置某些系统设置,以便不会出现初始设备设置向导。
也就是说,设备会进入一种状态,供您快速安装、调试和测试您的应用。
设置:
停用锁定屏幕
停用紧急提醒
停用帐户自动同步
停用自动系统更新
其他:
停用预装的安全应用
如果您的应用需要检测并适应testharness命令的默认设置,您可以使用ActivityManager.isRunningInUserTestHarness()。
sqlite
sqlite3可启动用于检查sqlite数据库的sqlite命令行程序。
它包含用于输出表格内容的.dump以及用于输出现有表格的SQLCREATE语句的.schema等命令。
您也可以从命令行执行SQLite命令,如下所示。
$adb-semulator-5554shell
$sqlite3/data/data/com.example.app/databases/rssitems.db
SQLiteversion3.3.12
Enter".help"forinstructions
要了解详情,请参阅sqlite3命令行文档。
ContentandcodesamplesonthispagearesubjecttothelicensesdescribedintheContentLicense.JavaandOpenJDKaretrademarksorregisteredtrademarksofOracleand/oritsaffiliates.
Lastupdated2022-04-11UTC.
[{
"type":"thumb-down",
"id":"missingTheInformationINeed",
"label":"没有我需要的信息"
},{
"type":"thumb-down",
"id":"tooComplicatedTooManySteps",
"label":"太复杂/步骤太多"
},{
"type":"thumb-down",
"id":"outOfDate",
"label":"内容需要更新"
},{
"type":"thumb-down",
"id":"translationIssue",
"label":"翻译问题"
},{
"type":"thumb-down",
"id":"samplesCodeIssue",
"label":"示例/代码问题"
},{
"type":"thumb-down",
"id":"otherDown",
"label":"其他"
}]
[{
"type":"thumb-up",
"id":"easyToUnderstand",
"label":"易于理解"
},{
"type":"thumb-up",
"id":"solvedMyProblem",
"label":"解决了我的问题"
},{
"type":"thumb-up",
"id":"otherUp",
"label":"其他"
}]
Twitter
在Twitter上关注@AndroidDev
YouTube
在YouTube上访问“AndroidDevelopers”频道
LinkedIn
在LinkedIn上与Android开发者社区交流沟通
关于Android
Android
适用于企业的Android
安全
源代码
新闻
博客
播客
发现
游戏
机器学习
隐私权政策
5G
Android设备
大屏幕
WearOS
AndroidTV
AndroidforCars
AndroidThings
Chrome操作系统设备
版本
Android11
Android10
Pie
Oreo
Nougat
Marshmallow
Lollipop
KitKat
文档和下载
AndroidStudio指南
开发者指南
API参考
下载Studio
AndroidNDK
支持
报告平台错误
报告文档错误
GooglePlaysupport
参加调查研究
Android
Chrome
Firebase
GoogleCloudPlatform
所有产品
隐私权政策
许可
品牌指南
通过电子邮件接收资讯和提示
订阅
Language
English
BahasaIndonesia
Español–AméricaLatina
Português–Brasil
TiếngViệt
中文–简体
日本語
한국어
延伸文章資訊
- 1windows下载安装adb(极其简单)_x2584179909的博客
介绍adb工具包是由Google开发的一款专为安卓手机用户提供服务的系统辅助工具。adb工具包功能强大,可以帮助用户管理你的所有安卓手机设备甚至是模拟器,也 ...
- 2如何在WIN10 安裝Android ADB工具 - 菜鸟学院
ADB 全名是Android Debug Bridge,是開發或使用Android 時很常用到的工具。可以從電腦透過USB 連線到Android 手機上,利用指令列來控制你得手機。
- 3adb工具包官方下载「最新版」 - 华军软件园
adb工具包是由Google开发的一款专为安卓手机用户提供服务的系统辅助工具。adb工具包功能强大,可以帮助用户管理你的所有安卓手机设备甚至是模拟器,也 ...
- 4Android 调试桥(adb) | Android 开发者
Android 调试桥(adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用),并提供对Unix shell(可用来在设备 ...
- 5谷歌提供的ADB工具包Google官方下载Windows/Mac/Linux
ADB的全名叫做Android Debug Bridge,它的功能是调试桥。 使用adb工具,我们可以管理设备或手机模拟器的状态; 还有许多手机操作,例如安装软件、升级 ...