adb shell命令参数有哪些常用选项?

99ANYc3cd6
预计阅读时长 15 分钟
位置: 首页 参数 正文

下面我将从基础到高级,详细解释 adb shell 的各种参数和用法。

adb shell 命令参数
(图片来源网络,侵删)

基础用法

adb shell 命令的基本结构如下:

adb shell [command]
  • adb: 是主程序。
  • shell: 是 adb 的一个子命令,表示要启动一个 shell 会话。
  • [command]: 是你想在远程设备上执行的 shell 命令。

启动一个交互式 Shell

如果你只想进入设备的命令行环境,并进行一系列操作,可以不带任何参数直接运行 adb shell

adb shell

执行后,你的终端会切换到设备的 shell 提示符下,通常看起来像这样:

generic_x86:/ $

在这个环境下,你可以输入任何标准的 Linux 命令(ls, pwd, cat 等),要退出这个交互式 shell,可以输入:

adb shell 命令参数
(图片来源网络,侵删)
exit
# 或者使用快捷键 Ctrl+D

在一台设备上执行单个命令

如果你的设备只连接了一台电脑,这是最常见的方式,列出设备根目录下的文件:

adb shell ls /

在多台设备上指定设备执行命令

如果你同时连接了多台 Android 设备或模拟器,你需要使用 -s 参数来指定目标设备,用 adb devices 查看设备序列号:

adb devices
# List of devices attached
# emulator-5554 device
# ZX1G32A12345  device

使用 -s 加上序列号来执行命令:

# 在序列号为 emulator-5554 的设备上执行
adb -s emulator-5554 shell ls /
# 在序列号为 ZX1G32A12345 的真机上执行
adb -s ZX1G32A12345 shell ls /

核心参数详解

以下是 adb shell 命令本身及其父命令 adb 常用的一些参数。

adb shell 命令参数
(图片来源网络,侵删)

adb 全局参数 (适用于 adb shell)

参数 示例 描述
-s <serial> adb -s emulator-5554 shell ... 指定目标设备。<serial>adb devices 列表中的设备 ID。
-d adb -d shell ... 指定连接的物理设备(如果同时有模拟器连接)。
-e adb -e shell ... 指定连接的模拟器(如果同时有物理设备连接)。
-l adb -l shell ... 显示设备时附带更多信息(例如设备的 usb:product_id)。
-H <host> adb -H 192.168.1.100 shell ... 指定 ADB 服务器的 IP 地址,用于无线调试。
-P <port> adb -P 5555 shell ... 指定 ADB 服务器的端口号,默认为 5037。

adb shell 自身参数

adb shell 命令本身也可以接受一些参数,这些参数会传递给设备上启动的 shell 进程。

参数 示例 描述
-e adb shell -e "echo hello" 使用 sh 作为 shell 执行命令。sh 是一个轻量级的 Bourne shell,功能较少。
-c adb shell -c "ls; pwd" 从字符串中读取并执行命令,多个命令可以用分号 分隔。
`` (默认) | adb shell "ls /data" | 如果不指定 -e-c,默认使用设备上的默认 shell(通常是 mkshbash),并将引号内的整个字符串作为命令执行,这是最常用的方式。
-t adb shell -t 强制分配一个伪终端 (pseudo-terminal),这对于运行交互式程序(如 top, vim)很有用。
-T adb shell -T 强制不分配伪终端。
-n adb shell -n 不执行任何命令,只启动一个 shell,这和直接输入 adb shell 类似。
-v adb shell -v 显示 shell 的版本信息。

实用技巧与示例

权限问题:su

默认情况下,adb shell 是以 shell 用户身份运行的,这个用户权限很低,很多系统文件都无法访问,如果你需要 root 权限,你需要使用 su 命令。

# 进入普通 shell
adb shell
# 在设备 shell 内切换到 root 用户
$ su
# 如果成功,提示符会变为 #
# 现在你就可以访问系统级文件了
# cp /system/priv-app/SomeApp/SomeApp.apk /sdcard/

注意:设备必须已经获取 root 权限,su 二进制文件在 PATH 中。

执行复杂命令

你可以通过管道 、重定向 > 等来组合命令。

# 查找并输出所有以 "log" 开头的文件到 /sdcard/log_list.txt
adb shell "find / -name 'log*' > /sdcard/log_list.txt"
# 查看设备内存使用情况,并过滤掉以 'K' 或 'M' 开头的行,只显示数值
adb shell "top -n 1 | grep -E 'Mem|CPU' | grep -vE '^[KM]'"

传递本地变量到远程设备

这是一个非常高级且有用的技巧,如果你想在本地定义一个变量,然后在远程设备上使用它,可以使用 adb shell-c 参数和变量引用。

# 在本地定义变量
PACKAGE_NAME="com.android.settings"
# 使用 -c 参数和引号将变量传递给远程设备
adb shell -c "am force-stop $PACKAGE_NAME"

注意:这种变量替换是由你的本地终端(如 Bash, Zsh)完成的,而不是由 ADB 或远程 shell 完成,确保你的本地 shell 支持这种语法。

使用 ampm (高级 Shell 命令)

adb shell 的真正威力在于执行 Android 特有的系统命令。

  • am (Activity Manager): 用于控制活动、服务等。

    # 启动一个应用
    adb shell am start -n com.android.settings/.Settings
    # 强制停止一个应用
    adb shell am force-stop com.example.myapp
    # 截屏并保存到设备
    adb shell screencap -p /sdcard/screenshot.png
  • pm (Package Manager): 用于管理应用包。

    # 列出所有已安装的应用
    adb shell pm list packages
    # 列出系统应用
    adb shell pm list packages -s
    # 卸载应用 (需要 root)
    adb shell pm uninstall -k --user 0 com.example.myapp

使用 bmgr (Backup Manager)

用于管理应用的备份。

# 列出所有备份集
adb shell bmgr list
# 为指定应用创建备份
adb shell bmgr backup com.example.myapp
# 执行备份操作
adb shell bmgr run

总结表格

目的 命令示例
进入交互式 Shell adb shell
执行单个命令 adb shell "ls /data/data"
在特定设备上执行 adb -s <serial> shell "getprop ro.product.model"
以 root 权限执行 adb shell "su -c 'cat /system/build.prop'"
启动应用 adb shell am start -n com.android.camera/.CameraLauncher
停止应用 adb shell am force-stop com.tencent.mm
卸载应用 adb shell pm uninstall -k --user 0 com.example.app
查看日志 adb logcat (这是 adb 的子命令,但常与 shell 配合使用)
无线连接设备 adb connect <device_ip>:<port> (adb connect 192.168.1.10:5555)

掌握 adb shell 是进行 Android 开发、调试和自动化的关键技能,建议多加练习,熟悉常用命令和参数,这将极大提高你的工作效率。

-- 展开阅读全文 --
头像
Bluestacks参数错误怎么办?
« 上一篇 今天
thinkphp分页传递参数
下一篇 » 43分钟前

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]