文章目录
- 1. -d
- 2. -e
- 3. -s
- 4. -t
- 5. -H
- 6. -P
- 7. -L
- 8. --one-device
- 9. --exit-on-write-error
- 10. connect / disconnect
- 11. pair
- 12. forward
- 13. forward --list
- 14. reverse
- 15. mdns check
- 16. mdns services
- 17. push
- 18. pull
- 19. sync
- 20.shell
- 21. install
- 22. uninstall
- 23. bugreport
- 24. jdwp
- 25. logcat
- 26. disable-verity / enable-verity
- 27. keygen FILE
- 28. wait-for[-TRANSPORT]-STATE...
- 29. get-state
- 30. get-serialno
- 31. get-devpath
- 32. remount -R
- 33. reboot
- 34. sideload
- 35. root
- 36. unroot
- 37. usb
- 38. tcp/ip PORT
- 39. Restart-server/kill-server
- 40. reconnect
 
 
- adb环境变量详解
- 1. ADB_TRACE
- 2. ANDROID_SERIAL
- 3. ANDROID_ADB_SERVER_PORT
- 4. ADB_VENDOR_KEYS
- 5. ANDROID_HOME
- 6. 包含 ADB 可执行文件的路径
- 7. ADB_LOCAL_TRANSPORT_MAX_PORT
- 8. export ADB_MDNS_AUTO_CONNECT=1
 
 
 
1. -d
adb -d install app.apk
d代表device,具体含义为指定 ADB 命令应该作用于唯一连接的 USB 设备。
这个参数通常用于以下场景:
- 多设备环境:当你有多个 Android 设备(或模拟器)连接到计算机时,使用 -d可以确保命令只作用于通过 USB 连接的物理设备。
- 排除模拟器:当你同时运行模拟器和连接了物理设备时,使用 -d可以确保命令只针对物理设备执行。
- 提高效率:在只有一个 USB 设备连接的情况下,使用 -d可以避免 ADB 搜索其他可能的连接(如网络设备或模拟器)。
2. -e
adb -e install app.apk
e代表emulator, 用于连接唯一运行的模拟器实例。
这个参数通常用于以下场景:
- 多设备环境:当你同时有物理设备和模拟器运行时,使用 -e可以确保命令只作用于模拟器。
- 多模拟器环境:如果你只运行了一个模拟器实例,使用 -e可以快速指向该模拟器,而不需要指定模拟器的名称或端口。
- 测试和开发:在进行应用开发和测试时,经常需要在模拟器上运行命令,-e参数可以简化这个过程。
3. -s
adb -s install app.apk
-s 参数代表 “serial”, 用于连接指定序列号的设备。
这个参数通常用于以下场景:
- 多设备环境:当你同时连接了多个 Android 设备或模拟器时,使用 -s可以精确指定要操作的设备。
- 自动化脚本:在编写自动化测试或部署脚本时,使用 -s可以确保命令作用于正确的设备。
- 特定设备操作:当你需要在多个设备中对特定设备执行操作时,-s参数非常有用。
4. -t
adb -t <transport_id> shell
-t 参数代表 “transport_id”, 作用于特定传输 ID 的设备。
这个参数通常用于以下场景:
- 高级调试:当设备有多个传输通道时(例如,同时通过 USB 和网络连接),可以使用 -t来指定特定的传输通道。
- 特殊开发环境:在某些复杂的开发或测试环境中,可能需要精确控制 ADB 使用的传输通道。
- 系统级开发:对 Android 系统本身进行开发或调试时,可能会用到这个参数。
当然这个transport_id是一个内部序列号,不像设备序列号那样容易获取或识别。它主要用于一些比较特殊的状况,大多数日常 Android 开发和调试工作不需要使用它。
5. -H
adb -H 192.168.1.12 devices
-H 参数代表 “host”, 用于指定运行的主机名或 IP 地址。
这个参数通常用于以下场景:
- 远程调试:当 ADB 服务器运行在远程机器上,而不是本地机器时。
- 网络环境:在复杂的网络设置中,可能需要明确指定 ADB 服务器的位置。
- 自定义开发环境:某些特殊的开发或测试环境可能需要连接到特定主机上的 ADB 服务器。
使用 -H 参数时需要注意:
- 默认情况下,ADB 客户端连接到本地(localhost)的 ADB 服务器。
- 使用远程 ADB 服务器时,需要确保网络连接正常,且远程主机允许 ADB 连接。
- 在某些情况下,可能还需要配合使用 -P参数来指定端口号。
6. -P
adb -P 5037 devices
-P 参数代表 “port”, 指定要连接的 ADB 服务器的端口号。
这个参数通常用于以下场景:
- 自定义端口:当 ADB 服务器运行在非默认端口上时(adb默认端口是5037)。
- 多 ADB 服务器:在同一台机器上运行多个 ADB 服务器实例,每个使用不同的端口。
- 网络调试:通过网络连接到远程 ADB 服务器时,可能需要指定特定的端口。
- 防火墙配置:在某些网络环境中,可能只有特定端口允许 ADB 通信。
adb -P 5037 devices
这条命令会连接到本地运行在 5037 端口(ADB 的默认端口)上的 ADB 服务器,并列出连接的设备。
adb -H 192.168.1.100 -P 5555 shell
这条命令会连接到 IP 地址为 192.168.1.100,端口号为 5555 的 ADB 服务器,并在连接的设备上启动一个 shell 会话。
注意事项:
- ADB 的默认端口是 5037。如果不指定 -P参数,ADB 会尝试连接到这个默认端口。
- -P参数通常与- -H参数一起使用,特别是在连接到远程 ADB 服务器时。
- 使用非默认端口时,需要确保该端口未被其他服务占用,并且在必要的防火墙中开放。
7. -L
adb -L tcp:xxx
-L 参数代表 “listen”,用于指定一个地址和端口,让 ADB 服务器监听这个地址和端口上的连接。
这个参数主要用于以下场景:
- 远程调试:允许其他机器通过网络连接到这个ADB服务器;
- 自定义网络配置:在特定的网络环境中,可能需要ADB服务器监听特定的地址或者端口;
- 安全性考虑:可以限制ADB服务器只监听特定的网络接口。
adb -L tcp:5037
这条命令会让 ADB 服务器监听所有网络接口的 5037 端口(ADB 的默认端口)。
adb -L tcp:192.168.1.100:5555
这条命令会让 ADB 服务器只在 IP 地址 192.168.1.100 的 5555 端口上监听连接。
注意事项:
- 使用 -L参数时,ADB 服务器会重新启动并开始监听指定的地址和端口。
- 这个参数主要用于 ADB 服务器的配置,而不是用于执行常规的 ADB 命令。
- 使用此参数可能会带来安全风险,因为它可能允许网络上的其他设备连接到你的 ADB 服务器。在使用时应确保网络环境是安全的。
- 在某些情况下,你可能需要配合使用防火墙规则来控制对这个端口的访问。
8. --one-device
adb --one-device install app.apk
只在单个设备上执行,即使有多个设备连接到计算机。经常看到错误日志more than one devices的问题,那么就可以使用one-device参数了。
使用场景是:
-  自动化脚本:确保脚本在单一设备环境中运行。 
-  快速测试:当你知道只应该有一个设备连接时,可以使用此参数进行快速检查。 
9. --exit-on-write-error
adb --exit-on-write-error push large_file.dat /sdcard/
遇到写入错误时,立即退出 ADB 命令. 比如以上命令是尝试将 large_file.dat 推送到设备的 /sdcard/ 目录。如果在传输过程中遇到任何写入错误,命令将立即退出。
使用场景:
-  大文件传输:确保大文件完整无误地传输到设备。 
-  自动化脚本:在文件同步或安装过程中快速捕获并响应错误。 
-  关键数据操作:当数据完整性至关重要时。 
这个参数在需要严格控制数据完整性的情况下特别有用,比如在系统更新、重要数据备份或其他关键文件传输操作中。它提供了一种快速失败的机制,有助于及时发现和处理传输错误。
10. connect / disconnect
adb connect 127.0.0.1:2333
adb disconnect 127.0.0.1:2333
通过 Wi-Fi 或以太网连接到 Android 设备,而不是使用 USB 连接. 如果不指定端口,默认端口是5555
11. pair
adb pair <ip_address>:<port> [pairing code]
用于与 Android 11(API 级别 30)及更高版本的设备进行无线调试配对。这是一个更安全的无线调试方法。
使用步骤:
 a. 在 Android 设备上启用无线调试(在开发者选项中)。
 b. 在设备上获取配对码和 IP 地址:端口。
 c. 在电脑上使用 adb pair 命令进行配对。
使用实例:
adb pair 192.168.1.100:37000
然后按提示输入设备显示的配对码。或者直接在命令中包含配对码:
adb pair 192.168.1.100:37000 123456
注意事项:
-  仅适用于 Android 11 及更高版本。 
-  配对过程有时间限制,通常需要在设备显示配对码后的短时间内完成。 
-  配对成功后,还需要使用 adb connect来建立实际的调试连接。
12. forward
forward 是一个用于设置端口转发的 ADB 命令。它允许你将主机(可以理解为电脑)上的端口转发到连接的 Android 设备或模拟器上的端口。
主要用途:
- 创建从主机(电脑)到 Android 设备的端口转发;
- 允许主机(电脑)上运行的应用与设备上的服务进行通信。
基本语法:
adb forward <local> <remote>
其中 是主机上的规范,是设备上的规范。
常见的规范类型为:
- tcp:<port>: TCP 端口
- localabstract:<unix domain socket name>: Android 的抽象 Unix 域套接字
- localreserved:<unix domain socket name>: 保留的 Unix 域套接字
- localfilesystem:<unix domain socket name>: Unix 域套接字
- dev:<character device name>: 字符设备
使用实例:
adb forward tcp:27042 tcp:27042
将主机上的 27042 端口转发到设备上的 27042 端口, 这个命令就是frida框架需要的命令
adb forward tcp:6100 localabstract:debug_socket
将主机上的 6100 端口转发到设备上名为 “debug_socket” 的抽象 Unix 域套接字.
另外
adb forward --remove:用于删除特定的转发规则。
adb forward --remove-all:用于删除所有转发规则。
adb forward --no-rebind: 如果指定的本地规范已经被使用,则不重新绑定它。
13. forward --list
用于列出所有已设置的端口转发规则的 ADB 命令。
$ adb forward --list
emulator-5554 tcp:5000 tcp:6000
1234567890ABCDEF tcp:8080 tcp:9090
输出的每一行都包含三个部分:设备序列号、本地规范和远程规范。
14. reverse
与forward 功能一致,但是转发方向是相反的,用于设置从 Android 设备到主机(电脑)的端口转发。
adb reverse <remote> <local>
其中 <remote> 是设备上的规范,<local> 是主机上的规范。
使用场景:
- Web 开发:允许设备上的应用访问主机上运行的开发服务器。
- 调试:使设备能够连接到主机上运行的调试工具。
- 测试:设备上的应用可以访问主机上的模拟服务。
使用例子:
adb reverse tcp:8081 tcp:8081
意味着将设备上的 8081 端口转发到主机上的 8081 端口。熟悉 React Native 开发的人应该经常用这个命令。
当然后面的 --remove, --remove-all和--no-rebind功能与forward功能一致。
15. mdns check
用于检查设备 mDNS(多播 DNS)服务状态的 ADB 命令,主要用于无线调试相关的功能。
主要用途:
- 检查设备上的 mDNS 服务是否正在运行和广播;
- 用于无线调试功能的诊断。
使用场景:
- 设置无线调试时的故障排除
- 验证设备是否准备好进行无线配对和连接
- 诊断无线 ADB 连接问题
如果 mDNS 服务正常运行并广播,可能会显示类似 “OK” 或详细的状态信息;如果存在问题,会显示错误信息或状态说明
使用方式:
adb mdns check
16. mdns services
用于列出设备上当前广播的 mDNS(多播 DNS)服务,主要用于无线调试和网络服务发现相关的功能。
主要用途:
-  列出设备上当前正在广播的 mDNS 服务。 
-  用于诊断和验证无线调试和其他网络服务。 
使用场景:
- 验证无线调试服务是否正在广播
- 检查设备上其他使用 mDNS 的应用或服务
- 网络服务发现和诊断
$ adb mdns services
registered service: _adb-tls-connect._tcp. 'ABCD1234' port=37401
registered service: _dartobservatory._tcp. 'Dart VM Observatory' port=54321
这个输出显示了两个服务:一个是 ADB 无线调试服务,另一个是 Dart VM Observatory(常见于 Flutter 开发).
17. push
将文件或目录从计算机复制到 Android 设备:
push [--sync] [-z ALGORITHM] [-Z]  LOCAL... REMOTE
-  [--sync]-  意义:同步模式 
-  功能:只复制新的或已修改的文件,跳过已存在且未更改的文件 
-  用途:提高效率,特别是在推送大量文件或频繁更新时 
 
-  
-  [-z ALGORITHM]-  意义:压缩传输 
-  功能:使用指定的算法压缩数据进行传输 
-  ALGORITHM 可以是: - brotli
- lz4
- zstd
 
-  用途:减少传输时间,特别是在网络带宽有限的情况下 
 
-  
-  [-Z]-  意义:禁用压缩 
-  功能:即使默认启用了压缩,也强制不使用压缩 
-  用途:当传输已经压缩的文件(如 zip、jpeg)时,避免不必要的压缩处理 
 
-  
-  LOCAL...-  意义:本地源文件或目录 
-  功能:指定要推送的本地文件或目录 
-  注意: ...表示可以指定多个本地源
 
-  
-  REMOTE- 意义:远程目标路径
- 功能:指定 Android 设备上的目标位置
 
18. pull
pull [-a] [-z ALGORITHM] [-Z] REMOTE... LOCAL
从 Android 设备拉取(复制)文件或目录到本地计算机。详细解析这些参数:
-  [-a]-  意义:保留文件时间戳 
-  功能:保持原文件的时间戳不变,而不是使用当前时间 
-  用途:在需要保持文件原始时间属性的情况下很有用,如备份或同步操作 
 
-  
-  [-z ALGORITHM]-  意义:压缩传输 
-  功能:使用指定的算法压缩数据进行传输 
-  ALGORITHM 可以是: - brotli
- lz4
- zstd
 
-  用途:减少传输时间,特别是在网络带宽有限的情况下 
 
-  
-  [-Z]-  意义:禁用压缩 
-  功能:即使默认启用了压缩,也强制不使用压缩 
-  用途:当传输已经压缩的文件(如 zip、jpeg)时,避免不必要的压缩处理 
 
-  
-  REMOTE...-  意义:Android 设备上的源文件或目录 
-  功能:指定要拉取的设备上的文件或目录 
-  注意: ...表示可以指定多个远程源
 
-  
-  LOCAL- 意义:本地目标路径
- 功能:指定文件或目录在本地计算机上的保存位置
 
19. sync
用于在本地开发机和 Android 设备之间同步文件系统。这个命令主要用于系统级开发,如定制 ROM 或系统应用开发。使用模式如下:
 sync [-l] [-z ALGORITHM] [-Z] [all|data|odm|oem|product|system|system_ext|vendor]
参数如下:
-  [-l]-  意义:列表模式(List only) 
-  功能:只列出要同步的文件,但不实际执行同步操作 
-  用途:预览将要同步的内容,用于检查和验证 
 
-  
-  [-z ALGORITHM]-  意义:压缩传输 
-  功能:使用指定的算法压缩数据进行传输 
-  ALGORITHM 可以是: - brotli
- lz4
- zstd
 
-  用途:减少传输时间,特别是在同步大量数据时 
 
-  
-  [-Z]-  意义:禁用压缩 
-  功能:即使默认启用了压缩,也强制不使用压缩 
-  用途:当同步已压缩的文件时,避免不必要的压缩处理 
 
-  
-  同步选项: - all: 同步所有分区
- data: 同步 /data 分区
- odm: 同步 /odm 分区(设备特定的修改)
- oem: 同步 /oem 分区(原始设备制造商修改)
- product: 同步 /product 分区(产品特定的配置)
- system: 同步 /system 分区
- system_ext: 同步 /system_ext 分区(系统扩展)
- vendor: 同步 /vendor 分区(供应商特定的修改)
 
使用实例:
-  列出需要同步的系统文件: adb sync -l system
-  使用压缩同步所有分区: adb sync -z zstd all
-  同步 vendor 分区但不使用压缩: adb sync -Z vendor
-  同步 data 分区: adb sync data
注意事项:
- 权限要求: - 同步系统分区通常需要设备有 root 权限或处于解锁状态。
- 对于生产设备,许多分区可能是只读的,无法同步。
 
- 使用场景: - 主要用于系统开发、ROM 定制和 OEM 开发。
- 不适用于常规应用开发或用户级操作。
 
- 数据安全: - 同步操作可能会覆盖设备上的现有数据,使用时需谨慎。
 
20.shell
用于在连接的 Android 设备上启动一个交互式 shell 会话或执行特定的 shell 命令。这是一个非常强大的工具,允许开发者直接与 Android 设备的底层系统交互。我们来看一下其详细参数:
adb shell [-e ESCAPE] [-n] [-Tt] [-x] [COMMAND...] 
-  [-e ESCAPE]-  意义:设置escape字符 
-  功能:指定用于终止 adb shell 会话的转义字符 
-  默认值: ~(波浪号)
-  用途:当默认的转义字符与您的输入冲突时,可以自定义 
 
-  
-  [-n]-  意义:不读取或执行 rc 文件 
-  功能:启动 shell 时不读取和执行 shell 的启动文件(如 .bashrc) 
-  用途:获得一个"干净"的 shell 环境,不受本地配置影响 
 
-  
-  [-T]-  意义:强制使用原始终端模式 
-  功能:禁用 PTY(伪终端)分配 
-  用途:在某些脚本或自动化场景中有用,可以避免某些终端相关的问题 
 
-  
-  [-t]-  意义:强制使用终端模式 
-  功能:强制分配一个 PTY 
-  用途:确保获得一个完整的交互式 shell 
 
-  
-  [-x]-  意义:禁用远程 shell 协议 
-  功能:使用简单的 stdin/stdout 传输,而不是更高级的 shell 协议 
-  用途:在某些兼容性问题或调试场景中有用 
 
-  
-  [COMMAND...]- 意义:要在设备上执行的 shell 命令
- 功能:直接执行指定的命令,而不是启动交互式 shell
- 用途:快速执行单个或一系列命令
 
使用实例:
-  使用自定义转义字符: adb shell -e ^
-  强制使用原始终端模式执行命令: adb shell -T "ps | grep com.example.app"
-  禁用远程 shell 协议执行命令: adb shell -x "echo Hello > /sdcard/test.txt"
21. install
adb install 命令用于将 Android 应用程序(APK 文件)安装到连接的 Android 设备上。详细参数为:
adb install [-lrtsdg] [--instant] PACKAGE
-  -l: 锁定应用程序-  意义:将应用程序安装到 /data/app-private 
-  用途:使应用程序无法被备份或移动到外部存储 
 
-  
-  -r: 替换已存在的应用程序-  意义:如果应用程序已经存在,则重新安装并保留其数据 
-  用途:更新已安装的应用程序 
 
-  
-  -t: 允许安装测试 APK-  意义:允许安装标记为测试的应用程序 
-  用途:用于安装专门用于测试的 APK 版本 
 
-  
-  -s: 将应用程序安装到 sdcard-  意义:将应用程序安装到外部存储(如 SD 卡)而不是内部存储 
-  用途:当设备内部存储空间不足时使用 
 
-  
-  -d: 允许版本降级-  意义:允许安装比当前安装版本更低版本的应用程序 
-  用途:测试旧版本或特定版本的应用程序 
 
-  
-  -g: 授予应用程序清单中列出的所有权限-  意义:自动授予应用程序请求的所有权限,无需用户确认 
-  用途:简化测试过程,避免手动授权步骤 
 
-  
-  --instant: 将应用程序作为即时应用安装-  意义:安装即时应用版本 
-  用途:用于测试和部署即时应用 
 
-  
-  PACKAGE: 要安装的 APK 文件路径- 意义:指定要安装的 APK 文件的位置
- 可以是设备上的路径,也可以是本地计算机上的路径
 
实例:
-  基本安装: adb install app.apk
-  替换已存在的应用: adb install -r app.apk
-  安装测试 APK 并自动授予权限: adb install -t -g test_app.apk
-  允许降级安装: adb install -d older_version.apk
另外,在存在install-multiple命令:
install-multiple [-lrtsdpg] [--instant] PACKAGE...
用于同时安装多个 APK文件到 Android 设备上,其命令已经介绍,举个例子:
adb install-multiple base.apk split_config.arm64_v8a.apk split_config.en.apk
但是需要注意的事项为:
- 这个命令主要用于处理拆分 APK 或应用包(App Bundles)生成的多个 APK 文件;
- 所有指定的 APK 必须属于同一个应用(具有相同的包名);
- 使用 -p选项时要确保安装的 APK 组合是有效的,否则可能导致应用无法正常运行;
- 安装多个 APK 可能需要更长的时间,特别是在较旧或性能较低的设备上;
- 不是所有 Android 设备或 ADB 版本都支持所有这些选项,使用前可能需要验证兼容性;
- install-multiple命令在处理现代 Android 应用分发格式(如 App Bundles)时特别有用,它允许开发者更灵活地管理复杂的应用结构和不同的设备配置。
当然,我们还可以同时安装不同包名的app,命令为:
install-multi-package [-lrtsdpg] [--instant] PACKAGE...
举例为:
adb install-multi-package app1.apk app2.apk app3.apk
22. uninstall
卸载指定的应用
adb uninstall -k packagename
-k : 保留缓存文件和数据文件夹
23. bugreport
一个非常有用的 Android 调试工具,用于生成设备的详细诊断报告。这个命令会收集大量的系统信息和日志,对于开发者和技术支持人员来说非常有价值。
主要用法很简单,直接
adb bugreport
用于收集设备的全面诊断信息,并生成一个包含系统状态、日志和其他重要数据的报告。
主要生成包括:
- 系统日志(logcat)
- 系统属性
- 进程列表
- 内存使用情况
- CPU 使用情况
- 网络统计
- 电池统计
- 崩溃报告
- 安装的应用列表
- 硬件信息
- 等等…
24. jdwp
是与 Java Debug Wire Protocol (JDWP) 相关的一个重要调试工具,用于列出和操作设备上可调试的 Java 进程。命令为:
adb jdwp
25. logcat
直接输出andorid的logcat
adb logcat
即可查看android logcat日志
26. disable-verity / enable-verity
命令用于禁用 Android 设备上的 dm-verity(设备映射完整性验证)。这是一个高级命令,主要用于开发和测试目的。
命令行为:
adb disable-verify
-  dm-verity 简介: -  一种 Linux 内核安全特性 
-  用于验证块设备(如系统分区)的完整性 
-  防止未经授权的系统修改 
 
-  
-  使用场景: -  系统级开发和测试 
-  修改系统文件或分区 
-  安装某些需要系统级修改的应用或模块 
 
-  
-  执行效果: -  禁用后,系统将不再验证系统分区的完整性 
-  允许对系统分区进行写入操作 
 
-  
-  注意事项: -  需要设备已解锁 bootloader 
-  通常需要 root 权限 
-  会降低设备的安全性 
-  可能导致 OTA 更新失败 
 
-  
-  重要警告: -  禁用 dm-verity 可能使设备更容易受到攻击 
-  不建议在个人使用的设备上禁用 
 
-  
-  相关命令: -  adb enable-verity: 重新启用 dm-verity
-  adb reboot: 在禁用/启用 verity 后需要重启设备
 
-  
-  使用步骤: 
 a. 确保设备已解锁 bootloader 并启用 USB 调试
 b. 执行adb disable-verity
 c. 重启设备:adb reboot
27. keygen FILE
keygen FILE 命令用于生成 ADB(Android Debug Bridge)认证密钥。这个命令在 ADB 安全性和设备认证方面扮演着重要角色,使用方式如下:
adb keygen FILE
-  功能: -  生成一个新的 ADB 私钥-公钥对 
-  将生成的密钥保存到指定的文件中 
 
-  
-  参数: - FILE: 指定生成的密钥文件的路径和名称
 
-  生成的文件: -  私钥文件:指定的 FILE 
-  公钥文件:FILE.pub 
 
-  
-  用途: -  用于 ADB 客户端和 Android 设备之间的安全认证 
-  替换默认的 ADB 密钥对 
 
-  
-  安全性: -  增强 ADB 连接的安全性 
-  允许自定义和管理 ADB 认证密钥 
 
-  
-  使用场景: -  设置新的开发环境 
-  增强 ADB 连接的安全性 
-  在多个开发者之间共享一个通用的 ADB 密钥 
 
-  
-  密钥工作原理: -  私钥保存在开发机器上 
-  公钥需要添加到 Android 设备的授权密钥列表中 
 
-  
-  后续步骤: -  生成密钥后,需要将公钥添加到 Android 设备 
-  通常通过将公钥复制到设备的 /data/misc/adb/adb_keys文件中
 
-  
-  注意事项: -  生成新密钥后,可能需要重新授权 ADB 连接 
-  保护生成的私钥文件的安全,不要分享给他人 
 
-  
-  相关命令: -  adb pubkey: 显示 ADB 公钥
-  adb connect: 使用新密钥连接到设备
 
-  
-  最佳实践: -  定期更新 ADB 密钥以提高安全性 
-  在共享开发环境中使用自定义密钥 
-  妥善保管生成的私钥文件 
 
-  
-  密钥管理: -  可以为不同项目或环境生成不同的密钥对 
-  在多人开发团队中,可以使用共享的密钥对 
 
-  
-  故障排除: -  如果新密钥不工作,确保公钥正确添加到设备 
-  检查 ADB 服务器是否正在使用新密钥 
 
-  
-  安全建议: - 不要在不受信任的网络上使用 ADB
- 定期检查已授权的 ADB 密钥列表
 
使用实例:
adb keygen ~/.android/adbkey
这将在 ~/.android/ 目录下生成 adbkey(私钥)和 adbkey.pub(公钥)文件。
28. wait-for[-TRANSPORT]-STATE…
wait-for-[TRANSPORT]-STATE 命令是一个非常有用的工具,用于等待设备进入特定状态。这个命令在自动化脚本和持续集成/持续部署(CI/CD)流程中特别有价值。让我们详细解析这个命令:
-  基本语法: adb wait-for-[TRANSPORT]-STATE
-  TRANSPORT 选项: -  device: 等待任何设备
-  usb: 只等待 USB 连接的设备
-  local: 只等待通过 TCP/IP 连接的设备
 
-  
-  STATE 选项: -  device: 设备已连接并可用
-  recovery: 设备处于恢复模式
-  sideload: 设备处于 sideload 模式
-  bootloader: 设备处于 bootloader 模式
-  disconnect: 设备断开连接
 
-  
-  功能: -  阻塞执行,直到指定的设备状态出现 
-  当设备进入指定状态时,命令返回 
 
-  
-  使用场景: -  自动化测试脚本 
-  设备刷机流程 
-  CI/CD 管道中的设备操作 
 
-  
-  常见用法示例: -  等待任何设备连接: adb wait-for-device
-  等待 USB 设备进入 recovery 模式: adb wait-for-usb-recovery
-  等待本地(TCP/IP)设备连接: adb wait-for-local-device
 
-  
-  超时行为: -  命令默认没有超时限制,会一直等待直到条件满足 
-  可以通过脚本或其他方式设置超时逻辑 
 
-  
-  脚本集成: -  常用于 shell 脚本中,在执行其他 ADB 命令之前确保设备就绪 
-  例如: adb wait-for-device && adb shell some_command
 
-  
-  调试用途: -  帮助开发者跟踪设备状态变化 
-  在复杂的设备操作流程中提供同步点 
 
-  
-  注意事项: -  如果有多个设备连接,命令可能会对第一个匹配条件的设备响应 
-  在使用 local选项时,确保已正确设置 TCP/IP 连接
 
-  
-  与其他命令结合: -  常与 adb reboot等命令配合使用
-  例如,重启到 recovery 并等待: adb reboot recovery && adb wait-for-recovery
 
-  
-  在 CI/CD 中的应用: -  确保设备在执行测试或部署前处于正确状态 
-  提高自动化流程的稳定性 
 
-  
-  故障排除: -  如果命令似乎卡住,检查设备连接和状态 
-  确保 ADB 服务器正在运行 
 
-  
-  最佳实践: -  在脚本中加入适当的超时机制 
-  考虑添加错误处理逻辑,以应对设备未能进入预期状态的情况 
 
-  
-  高级用法: - 可以结合 adb devices命令来处理多设备情况
- 在复杂的刷机或恢复流程中作为检查点
 
- 可以结合 
29. get-state
返回当前连接的 Android 设备的状态
adb get-state
-  可能的输出状态: -  device: 设备已连接且可用
-  offline: 设备已连接但不可用
-  unknown: 设备状态未知
-  bootloader: 设备处于 bootloader 模式
-  recovery: 设备处于恢复模式
-  sideload: 设备处于 sideload 模式
-  unauthorized: 设备已连接但未授权 ADB 连接
 
-  
-  使用场景: -  快速检查设备状态 
-  在脚本中用于条件判断 
-  故障排除过程中确认设备连接状态 
 
-  
-  特点: - 简洁:只返回一个单词的状态
- 快速:执行速度快,适合频繁检查
- 可靠:提供设备的当前状态的准确信息
 
可以来个脚本:
if [ "$(adb get-state)" = "device" ]; thenecho "设备已就绪,开始操作"# 执行其他 ADB 命令
elseecho "设备未就绪,请检查连接"
fi
30. get-serialno
用于获取连接的 Android 设备的序列号
	adb get-serialno	
返回当前连接的 Android 设备的唯一序列号, 没有设备连接返回"unknown".
31. get-devpath
获取连接的 Android 设备的设备路径。这个命令提供了设备在系统中的物理连接路径信息.
adb get-devpath
对于 USB 连接的设备,可能返回类似 usb:337641472X ,对于模拟器或无线连接的设备,可能返回 unknown.
32. remount -R
用于重新挂载设备的文件系统,通常是为了获得对系统分区的写入权限。
adb remount
adb remount -R
-  功能: - 重新挂载系统分区为可读写模式
- 允许修改系统文件
 
-  -R选项:- 在重新挂载后立即重启设备
 
-  使用场景: - 系统级开发和调试
- 修改系统文件或应用
- 进行需要root权限的操作
 
-  先决条件: - 设备必须已root
- bootloader必须解锁
- 在某些情况下,可能需要禁用 dm-verity
 
-  安全影响: - 降低设备安全性,允许系统文件被修改
- 可能导致设备无法通过安全验证
 
-  使用步骤: 
 a. 确保设备已root且USB调试已启用
 b. 执行adb remount
 c. 如果使用-R,设备将自动重启
-  常见用途: - 修改系统应用或框架
- 安装或替换系统级应用
- 进行底层系统调试
 
-  注意事项: - 不当使用可能导致设备变砖
- 可能影响OTA更新
- 在生产设备上使用极其危险
 
-  与其他命令结合: -  通常与 adb push和adb pull一起使用来修改系统文件
-  例如: basic 复制 adb remount adb push modified_file.so /system/lib/
 
-  
-  恢复方法: - 重启设备通常会恢复只读状态
- 完全恢复可能需要重新刷入系统镜像
 
-  在开发中的应用: - 测试系统级修改
- 调试系统服务和框架
 
-  区别于普通root: - 普通root允许获取超级用户权限
- remount允许直接修改系统分区
 
-  潜在风险: - 可能导致系统不稳定
- 增加安全漏洞风险
- 可能违反设备保修条款
 
-  最佳实践: - 仅在开发设备上使用
- 在使用前备份重要数据
- 在完成必要操作后立即重启设备
 
33. reboot
用于重启 Android 设备,并可以指定重启到特定模式。这是一个非常有用的命令,特别是在开发、测试和设备维护过程中。
adb rebot [mode]
- 可用的重启模式: - 默认(不带参数):正常重启到系统
- bootloader:重启到 bootloader 模式
- recovery:重启到 recovery 模式
- sideload:重启到 sideload 模式
- sideload-auto-reboot:进入 sideload 模式后自动重启
 
34. sideload
用于在 Android 设备上安装系统更新包(OTA 包)的 ADB 命令。这是一种直接通过电脑向设备安装系统更新的方法,特别适用于无法通过正常 OTA 更新或想要手动安装特定版本系统的情况。
adb sideload <path_to_update.zip>
-  使用步骤: 
 a. 将设备重启到 Recovery 模式
 b. 在 Recovery 菜单中选择 “Apply update from ADB”
 c. 在计算机上执行adb sideload命令
-  先决条件: - 设备必须处于 Recovery 模式
- ADB 调试必须启用
- 计算机上必须安装 ADB 工具
 
-  OTA 包要求: - 必须是针对特定设备型号的正确 OTA 包
- 通常是 .zip 格式的文件
 
-  使用场景: - 手动更新系统版本
- 安装官方 OTA 更新
- 在自动 OTA 更新失败时使用
 
-  优点: - 无需完整的系统镜像
- 可以跳过等待 OTA 推送
- 适用于无法正常接收 OTA 更新的设备
 
-  注意事项: - 确保使用正确的 OTA 包,否则可能导致设备问题
- 建议在操作前备份重要数据
- 过程中不要断开设备连接
 
-  常见错误: - 签名验证失败:通常是由于使用了不兼容或被修改的 OTA 包
- 空间不足:确保设备有足够的存储空间
 
-  安全考虑: - 只使用来自可信源的 OTA 包
- 避免使用未经验证的第三方 OTA 包
 
-  与其他命令的结合: adb reboot recovery # 手动在设备上选择 "Apply update from ADB" adb sideload update.zip
-  在脚本中的应用: adb reboot recovery sleep 30 # 等待设备进入 recovery 模式 adb sideload path/to/update.zip
-  故障排除: - 如果 sideload 失败,检查 OTA 包的完整性
- 确保设备型号和 OTA 包匹配
- 检查 ADB 连接是否稳定
 
-  与传统刷机的区别: - Sideload 通常只更新系统,不会清除用户数据
- 比完整的系统刷写更安全和快速
 
-  最佳实践: -  在执行 sideload 前为设备充足电 
-  保持良好的 USB 连接,避免中断 
-  在执行更新后验证系统的完整性 
 
-  
35. root
用于获取 Android 设备 root 权限的 ADB 命令
36. unroot
root的反向操作,用于退出ADB的root模式。这个命令在完成需要 root 权限的操作后恢复正常的非 root 状态时很有用。
37. usb
用于特定情况下重新启动usb链接
adb usb
主要功能是:
- 重新启动USB连接;
- 主要用于从无线(TCP/IP)模式切换回USB模式
使用场景:
- 当设备当前通过 Wi-Fi 连接到 ADB 时
- 需要从无线调试切换回 USB 调试时
38. tcp/ip PORT
adb tcp/ip PORT
用于设置无线 ADB 连接的重要命令,允许开发者通过 Wi-Fi 网络连接到 Android 设备,而不是传统的 USB 连接。
-  主要功能如下: - 将 ADB 守护进程(adbd)重启到指定的 TCP 端口
- 使设备准备好接受无线 ADB 连接
 
-  使用场景: - 远程调试 Android 设备
- 在不使用 USB 线的情况下连接设备
- 同时操作多个设备
 
-  执行步骤: 
 a. 通过 USB 连接设备
 b. 运行adb tcpip 5555
 c. 断开 USB 连接
 d. 使用adb connect IP_ADDRESS:5555建立无线连接
-  优点: - 提供更大的移动自由度
- 允许在不同位置的设备间快速切换
- 便于在多个设备上同时工作
 
-  注意事项: - 设备必须与电脑在同一个 Wi-Fi 网络
- 需要知道设备的 IP 地址
- 可能存在安全风险,应在受信任的网络中使用
 
-  在脚本中应用: adb tcpip 5555 adb connect 192.168.1.100:5555 # 执行无线调试操作 adb disconnect 192.168.1.100:5555
39. Restart-server/kill-server
用于管理adb服务器的重要命令,用于解决ADB连接问题和重置ADB状态问题。
adb kill-server
停止当前运行的 ADB 服务器进程
adb restart-server
停止当前的 ADB 服务器,然后立即启动一个新的服务器
在脚本中使用:
adb kill-server
sleep 2
adb start-server
# 或者直接使用
adb restart-server
40. reconnect
adb reconnect
尝试重新连接当前已断开或不稳定的 ADB 连接, 对所有连接的设备执行重新连接操作.
adb环境变量详解
1. ADB_TRACE
用于控制 ADB 的调试输出级别,设置方法为:
export ADB_TRACE=1
可能的值:
- 1: 基本信息
- 2: 详细信息
- 3: 更详细的信息
- 4: 最详细的调试信息
用途:
- 调试 ADB 连接问题
- 了解 ADB 内部工作过程
- 排查复杂的设备通信问题
2. ANDROID_SERIAL
指定默认的 Android 设备,设置方法为:
export ANDROID_SERIAL=<device_serial_number>
在有多个设备连接时,无需每次指定设备
3. ANDROID_ADB_SERVER_PORT
export ANDROID_ADB_SERVER_PORT=<port_number>
指定 ADB 服务器使用的端口
4. ADB_VENDOR_KEYS
export ADB_VENDOR_KEYS=<path_to_keys>
指定 ADB 厂商密钥的路径
5. ANDROID_HOME
export ANDROID_HOME=<path_to_android_sdk>
指定 Android SDK 的安装路径
6. 包含 ADB 可执行文件的路径
export PATH=$PATH:$ANDROID_HOME/platform-tools
包含 ADB 可执行文件的路径
7. ADB_LOCAL_TRANSPORT_MAX_PORT
export ADB_LOCAL_TRANSPORT_MAX_PORT=<max_port_number>
设置本地传输的最大端口号
8. export ADB_MDNS_AUTO_CONNECT=1
export ADB_MDNS_AUTO_CONNECT=1
控制 ADB 是否自动连接到 mDNS 发现的设备