跳过内容

MASTG-TECH-0001: 访问设备 Shell

测试应用程序时,最常见的操作之一是访问设备 shell。在本节中,我们将了解如何从主机计算机远程访问 Android shell(无论是否使用 USB 电缆),以及如何从设备本地访问 Android shell。

远程 Shell

为了从您的主机计算机连接到 Android 设备的 shell, adb 通常是您的首选工具(除非您喜欢使用远程 SSH 访问,例如 通过 Termux)。

在本节中,我们假设您已正确启用开发者模式和 USB 调试,如“在真机上测试”中所述。通过 USB 连接 Android 设备后,您可以通过运行以下命令访问远程设备的 shell

adb shell

按 Control + D 或键入 exit 退出

进入远程 shell 后,如果您的设备已 root 或者您正在使用模拟器,则可以通过运行 su 获得 root 访问权限

bullhead:/ $ su
bullhead:/ # id
uid=0(root) gid=0(root) groups=0(root) context=u:r:su:s0

仅当您正在使用模拟器时,您也可以使用命令 adb root 重新启动具有 root 权限的 adb,这样下次您输入 adb shell 时,您已经拥有 root 访问权限。 这还允许在您的主机和 Android 文件系统之间双向传输数据,即使访问只有 root 用户才能访问的位置(通过 adb push/pull)。 有关数据传输的更多信息,请参见下面的 主机设备数据传输

连接到多个设备

如果您有多个设备,请记住在所有 adb 命令中包含 -s 标志,后跟设备序列号(例如,adb -s emulator-5554 shelladb -s 00b604081540b7c6 shell)。 您可以使用以下命令获取所有连接设备及其序列号的列表

adb devices
List of devices attached
00c907098530a82c    device
emulator-5554    device

通过 Wi-Fi 连接到设备

您也可以不使用 USB 电缆访问您的 Android 设备。 为此,您必须将主机计算机和 Android 设备连接到同一个 Wi-Fi 网络,并按照以下步骤操作

  • 使用 USB 电缆将设备连接到主机计算机,并将目标设备设置为侦听端口 5555 上的 TCP/IP 连接:adb tcpip 5555
  • 从目标设备断开 USB 电缆,然后运行 adb connect <device_ip_address>。 通过运行 adb devices 检查设备现在是否可用。
  • 使用 adb shell 打开 shell。

但是,请注意,这样做会将您的设备暴露给同一网络中知道您设备 IP 地址的任何人。 您可能更喜欢使用 USB 连接。

例如,在 Nexus 设备上,您可以在设置 -> 系统 -> 关于手机 -> 状态 -> IP 地址中找到 IP 地址,或者转到 Wi-Fi 菜单并点击一次您连接的网络。

请参阅 Android 开发者文档 中的完整说明和注意事项。

通过 SSH 连接到设备

如果您愿意,您还可以启用 SSH 访问。 一个方便的选择是使用 Termux,您可以轻松 配置为提供 SSH 访问(使用密码或公钥身份验证),并使用命令 sshd 启动它(默认在端口 8022 上启动)。 为了通过 SSH 连接到 Termux,您可以简单地运行命令 ssh -p 8022 <ip_address>(其中 ip_address 是实际的远程设备 IP)。 此选项还有一些额外的好处,因为它还允许通过 SFTP 在端口 8022 上访问文件系统。

设备上 Shell 应用

虽然通常使用设备上 shell(终端模拟器),例如 Termux 与远程 shell 相比可能非常繁琐,但在调试时可能会证明很方便,例如,在出现网络问题或检查某些配置的情况下。