android adb命令使用
Posted 奇妙之二进制
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android adb命令使用相关的知识,希望对你有一定的参考价值。
查询设备
在发出 adb 命令之前,了解哪些设备实例已连接到 adb 服务器会很有帮助。您可以使用 devices
命令生成已连接设备的列表。
adb devices -l
作为回应,adb 会针对每个设备输出以下状态信息:
- 序列号:由 adb 创建的字符串,用于通过端口号唯一标识设备。 下面是一个序列号示例:
emulator-5554
- 状态:设备的连接状态可以是以下几项之一:
offline
:设备未连接到 adb 或没有响应。device
:设备现已连接到 adb 服务器。请注意,此状态并不表示 android 系统已完全启动并可正常运行,因为在设备连接到 adb 时系统仍在启动。不过,在启动后,这将是设备的正常运行状态。no device
:未连接任何设备。
- 说明:如果您包含
-l
选项,devices
命令会告知您设备是什么。当您连接了多个设备时,此信息很有用,可帮助您将它们区分开来。
以下示例展示了 devices
命令及其输出。有三个设备正在运行。列表中的前两行表示模拟器,第三行表示连接到计算机的硬件设备。
$ adb devices
List of devices attached
emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64
emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86
0a388e93 device usb:1-1 product:razor model:Nexus_7 device:flo
将命令发送至特定设备
如果有多个设备在运行,您在发出 adb 命令时必须指定目标设备。为此,请使用 devices
命令获取目标设备的序列号。获得序列号后,请结合使用 -s
选项与 adb 命令来指定序列号。如果您要发出很多 adb 命令,可以将 $ANDROID_SERIAL
环境变量设为包含序列号。如果您同时使用 -s
和 $ANDROID_SERIAL
,-s
会替换 $ANDROID_SERIAL
。
在以下示例中,先获得了已连接设备的列表,然后使用其中一个设备的序列号在该设备上安装了 helloWorld.apk
。
$ adb devices
List of devices attached
emulator-5554 device
emulator-5555 device
$ adb -s emulator-5555 install helloWorld.apk
注意:如果您在多个设备可用时发出命令但未指定目标设备,adb 会生成错误。
如果有多个可用设备,但只有一个是模拟器,请使用 -e
选项将命令发送至该模拟器。同样,如果有多个设备,但只连接了一个硬件设备,请使用 -d
选项将命令发送至该硬件设备。
安装应用
您可以使用 adb 的 install
命令在模拟器或连接的设备上安装 APK:
adb install path_to_apk
安装测试 APK 时,必须在 install
命令中使用 -t
选项。如需了解详情,请参阅 -t
。
要详细了解如何创建可安装在模拟器/设备实例上的 APK 文件,请参阅构建和运行应用。
请注意,如果您使用的是 Android Studio,则无需直接使用 adb 在模拟器/设备上安装您的应用。Android Studio 会为您执行应用的打包和安装操作。
设置端口转发
您可以使用 forward
命令设置任意端口转发,将特定主机端口上的请求转发到设备上的其他端口。以下示例设置了主机端口 6100 到设备端口 7100 的转发:
adb forward tcp:6100 tcp:7100
以下示例设置了主机端口 6100 到 local:logd 的转发:
adb forward tcp:6100 local:logd
将文件复制到设备/从设备复制文件
您可以使用 pull
和 push
命令将文件复制到设备或从设备复制文件。与 install
命令(仅将 APK 文件复制到特定位置)不同,使用 pull
和 push
命令可将任意目录和文件复制到设备中的任何位置。
如需从设备中复制某个文件或目录(及其子目录),请使用以下命令:
adb pull remote local
如需将某个文件或目录(及其子目录)复制到设备,请使用以下命令:
adb push local remote
将 local
和 remote
替换为开发机器(本地)和设备(远程)上的目标文件/目录的路径。例如:
adb push foo.txt /sdcard/foo.txt
停止 adb 服务器
在某些情况下,您可能需要终止 adb 服务器进程,然后重启以解决问题(例如,如果 adb 不响应命令)。
如需停止 adb 服务器,请使用 adb kill-server
命令。然后,您可以通过发出其他任何 adb 命令来重启服务器。
发出 adb 命令
您可以从开发机器上的命令行发出 adb 命令,也可以通过脚本发出。用法如下:
adb [-d | -e | -s serial_number] command
如果只有一个模拟器在运行或者只连接了一个设备,系统会默认将 adb 命令发送至该设备。如果有多个模拟器正在运行并且/或者连接了多个设备,您需要使用 -d
、-e
或 -s
选项指定应向其发送命令的目标设备。
您可以使用以下命令来查看所有支持的 adb 命令的详细列表:
adb --help
发出 shell 命令
您可以使用 shell
命令通过 adb 发出设备命令,也可以启动交互式 shell。如需发出单个命令,请使用 shell
命令,如下所示:
adb [-d |-e | -s serial_number] shell shell_command
要在设备上启动交互式 shell,请使用 shell
命令,如下所示:
adb [-d | -e | -s serial_number] shell
要退出交互式 shell,请按 Ctrl + D 键或输入 exit
。
注意:在 Android 平台工具 23 及更高版本中,adb 处理参数的方式与 ssh(1)
命令相同。这项变更解决了很多命令注入方面的问题,还使安全执行包含 shell 元字符的命令(如 adb install Let\\'sGo.apk
)成为可能。不过,这项变更还意味着,对包含 shell 元字符的所有命令的解释也发生了变化。例如,adb shell setprop foo 'a b'
命令现在会返回错误,因为单引号 ('
) 会被本地 shell 消去,设备看到的是 adb shell setprop foo a b
。如需使该命令正常运行,请引用两次,一次用于本地 shell,另一次用于远程 shell,与处理 ssh(1)
的方法相同。例如,adb shell setprop foo "'a b'"
。
Android 提供了大多数常见的 Unix 命令行工具。如需查看可用工具的列表,请使用以下命令:
adb shell ls /system/bin
对于大多数命令,都可通过 --help
参数获得命令帮助。许多 shell 命令都由 toybox 提供。对于所有 toybox 命令,都可通过 toybox --help
可获得命令的常规帮助。
另请参阅 Logcat 命令行工具,该工具对监控系统日志很有用。
以上是关于android adb命令使用的主要内容,如果未能解决你的问题,请参考以下文章
如何在应用程序代码本身中使用 adb 命令卸载 android 应用程序?