ADB是连接电脑与Android设备的强大命令行工具,通过它开发者或高级用户能调试应用、管理设备、自动化任务及解锁隐藏功能,极大提升设备控制力与开发效率。
如果你正在开发Android应用、热衷于设备自定义(Root、刷机等),或者只是需要更深入地管理你的Android设备,那么Android调试桥 (ADB) 绝对是你不可或缺的工具,ADB是一个功能强大的命令行工具,它充当了你的电脑(Windows, macOS, Linux)和Android设备(手机、平板、电视盒子、手表等)之间的通信桥梁,通过ADB,你可以执行许多在设备界面上无法完成的操作,极大地扩展了设备的可能性。
理解ADB的核心概念
- 客户端 (Client):运行在你电脑上的命令,你在命令行终端(如Windows的CMD/PowerShell,macOS/Linux的Terminal)中输入的就是ADB命令。
- 守护进程 (adbd – ADB Daemon):运行在Android设备后台的一个服务程序,它负责监听来自客户端的命令并执行。
- 服务器 (Server):运行在你电脑后台的一个管理程序,它管理客户端与设备上adbd守护进程之间的通信,当你运行
adb start-server
时启动的就是它(通常第一个命令会自动启动)。
开始使用ADB:环境准备
在你能愉快地敲打ADB命令之前,需要完成一些必要的设置:
-
安装Android SDK Platform-Tools (推荐):
- 这是获取ADB工具最官方、最安全的方式。
- 访问 Android开发者网站 的 SDK Platform-Tools 下载页面。
- 根据你的操作系统(Windows, macOS, Linux)下载对应的压缩包。
- 解压下载的压缩包到一个你容易找到的目录,
C:\platform-tools\
(Windows) 或~/android/platform-tools/
(macOS/Linux),这个目录就包含了adb.exe
(Windows) 或adb
(macOS/Linux) 可执行文件。
-
在设备上启用开发者选项和USB调试:
- 启用开发者选项:进入设备的“设置” > “关于手机” > 连续快速点击“版本号”7次,直到看到提示“您现在是开发者!”。
- 启用USB调试:返回“设置” > “系统” > “开发者选项” > 找到“USB调试”并打开它,首次连接电脑时,设备上会弹出授权提示,务必勾选“始终允许”并点击“确定”。
-
连接设备到电脑:
- 使用质量可靠的USB数据线将设备连接到电脑。
- 在设备的USB连接模式提示中,选择“文件传输”或“MTP”(有时也写作“传输文件”),虽然ADB通信不依赖于此模式,但选择它通常能确保驱动正确加载。
-
验证连接 (关键步骤!):
- 打开电脑上的命令行终端(CMD, PowerShell, Terminal)。
- 导航到包含
adb
文件的目录:- Windows (CMD):
cd C:\platform-tools
- Windows (PowerShell):
cd C:\platform-tools
(或使用Set-Location C:\platform-tools
) - macOS/Linux:
cd ~/android/platform-tools
- Windows (CMD):
- 输入命令:
adb devices
- 预期结果:如果一切设置正确,你会看到类似以下的输出:
List of devices attached XXXXXXXXXXXXXXXX device
- 这里
XXXXXXXXXXXXXXXX
是你的设备序列号,device
状态表示已连接并授权,如果看到unauthorized
,请检查设备屏幕上的授权提示,如果设备根本没列出,请检查USB线、驱动(Windows常见问题)、USB调试是否开启。
- 这里
重要提示: 为了在命令行中任何位置都能直接运行adb
命令,建议将platform-tools
目录添加到系统的PATH
环境变量中,具体设置方法请根据你的操作系统搜索教程(“Windows 添加环境变量 PATH”)。
常用ADB命令详解与应用场景
你的设备已连接并授权,让我们探索一些最常用和实用的ADB命令,请始终在命令行中运行这些命令(确保在platform-tools
目录下或已配置PATH)。
-
基础设备管理
adb devices
:列出当前连接到电脑的所有Android设备及其状态,这是检查连接是否成功的首要命令。adb reboot
:重启设备。adb reboot bootloader
:重启设备进入Bootloader模式(Fastboot模式),常用于刷机操作。adb reboot recovery
:重启设备进入Recovery模式(如果设备支持自定义Recovery如TWRP,则进入该Recovery)。adb shell
:启动一个交互式的命令行Shell会话,直接在设备上执行命令,输入exit
或按Ctrl+D
退出Shell,这是执行更复杂设备操作的基础。adb -s <device_serial> <command>
:当连接了多台设备时,使用-s
参数加设备序列号来指定对哪台设备执行命令。adb -s emulator-5554 install app.apk
。
-
应用管理
adb install <path_to_apk>
:将电脑上的APK文件安装到设备。adb install C:\Downloads\myapp.apk
。adb install -r <path_to_apk>
:覆盖安装(更新)已存在的应用,保留数据。adb uninstall <package_name>
:卸载应用。需要知道应用的包名(如com.example.myapp
),使用adb shell pm list packages
查找包名。adb uninstall -k <package_name>
:卸载应用但保留数据和缓存(通常不推荐)。adb shell pm list packages
:列出设备上所有已安装应用的包名。adb shell pm list packages -f
:列出应用包名及其对应的APK路径。adb shell pm list packages -s
:只列出系统应用。adb shell pm list packages -3
:只列出第三方(用户安装)应用。adb shell pm path <package_name>
:查找指定包名应用的APK文件在设备上的完整路径。adb shell am start -n <package_name>/<activity_full_name>
:启动应用的一个特定Activity,需要知道包名和Activity全名(可通过adb shell dumpsys activity
或开发工具获取)。adb shell am force-stop <package_name>
:强制停止指定应用。
-
文件传输
adb push <local_path> <remote_path>
:将电脑上的文件或目录复制到设备上。adb push C:\file.txt /sdcard/Download/
。adb pull <remote_path> <local_path>
:将设备上的文件或目录复制到电脑上。adb pull /sdcard/DCIM/Camera/photo.jpg .
( 表示复制到当前终端所在目录)。- 注意:设备路径通常需要写完整路径。
/sdcard/
通常指向设备的内部存储根目录(模拟外部SD卡),访问系统分区(如/system/
)通常需要Root权限。
-
日志与调试
adb logcat
:实时打印设备的系统日志(Logcat),信息量巨大,是开发调试的利器,常用参数:adb logcat -v time
:在每条日志前加上时间戳。adb logcat -s <tag>
:只显示特定标签(Tag)的日志。adb logcat -s MyApp
。adb logcat > log.txt
:将日志输出重定向到电脑上的log.txt
文件(按Ctrl+C
停止)。
adb bugreport
:生成一个包含设备状态、日志等详细信息的ZIP压缩包(bugreport-YYYY-MM-DD-HH-MM-SS.zip),保存在当前命令行目录,对于分析复杂问题非常有用。
-
屏幕操作与截图
adb shell screencap -p <path_on_device>
:在设备上截屏并保存为PNG文件。adb shell screencap -p /sdcard/screen.png
,然后可以用adb pull
拉取到电脑。adb shell screenrecord <path_on_device>
:录制设备屏幕(默认最多3分钟,按Ctrl+C
停止)。adb shell screenrecord /sdcard/demo.mp4
,支持参数如--size 1280x720
,--bit-rate 4000000
,--time-limit 60
(秒)。adb exec-out screencap -p > screenshot.png
(Windows PowerShell:adb exec-out screencap -p | Out-File -Encoding binary screenshot.png
):更高效的方式:直接将截屏数据流输出到电脑文件,无需在设备上保存临时文件。- 高级替代方案:
scrcpy
(开源项目) 提供了通过ADB在电脑上显示和控制设备屏幕的功能,体验极佳,推荐了解和使用。
-
Shell内常用命令 (在
adb shell
中执行)pm
:Package Manager,包管理命令(如pm list packages
,pm install
,pm uninstall
)。am
:Activity Manager,活动管理命令(如am start
,am force-stop
)。settings
:访问和修改系统设置(需适当权限)。settings put global airplane_mode_on 1
+am broadcast -a android.intent.action.AIRPLANE_MODE
:开启飞行模式(需要Shell有足够权限)。
dumpsys
:转储系统服务信息。dumpsys battery
:查看电池信息。dumpsys meminfo <package_name>
:查看应用内存使用情况。dumpsys activity activities | grep mResumedActivity
:查找当前前台Activity(需要grep
工具,Busybox或Toybox通常提供)。
getprop
/setprop
:获取/设置系统属性(需Root权限修改只读属性)。su
:切换到超级用户(Root)权限(如果设备已Root),执行后提示符通常会从变成。极度谨慎操作!- 标准Linux命令:
ls
,cd
,cp
,mv
,rm
,cat
,grep
,ps
,top
,chmod
,chown
等,设备上的Shell通常是/system/bin/sh
,功能可能比完整Linux Bash弱一些。
安全警告与最佳实践 (E-A-T核心体现)
- 来源可信:务必从官方 Android开发者网站 下载
platform-tools
,避免从不明来源获取ADB工具,以防恶意软件。 - 理解风险:ADB提供了对设备的底层访问权限,错误的命令(尤其是
adb shell
内的命令,特别是rm
删除、su
后的操作、修改系统分区/system
)可能导致设备变砖、数据永久丢失或系统不稳定。操作前务必备份重要数据! - 谨慎授权:仅在信任的电脑上启用“USB调试”并授权连接,在公共或不安全的电脑上使用后,建议在设备开发者选项中“撤销USB调试授权”。
- 慎用Root:
su
命令和需要Root权限的操作风险极高,除非你非常清楚自己在做什么,并且了解其后果,否则避免使用,错误的Root操作是导致设备无法启动的常见原因。 - 明确命令含义:在执行任何不熟悉的ADB命令(尤其是从网上复制的)之前,务必查阅官方文档或可靠来源,理解该命令的具体作用和潜在影响。
- 最小权限原则:尽量使用不需要Root权限的命令完成操作,很多管理任务(安装卸载应用、文件传输、截图录屏、基础日志查看)无需Root。
- 断开连接:完成操作后,安全地断开USB连接,并在不需要时关闭设备上的“USB调试”以增加安全性。
ADB是连接电脑与Android设备、进行高级管理和开发的强大工具,从基础的设备重启、应用安装卸载,到文件传输、日志抓取、屏幕操作,甚至深入的系统调试和定制,ADB都能胜任,掌握ADB命令能极大地提升你使用和开发Android设备的效率和能力。
“能力越大,责任越大”。安全、谨慎、了解风险是使用ADB的首要原则,始终从官方渠道获取工具,理解每条命令的作用,备份重要数据,并仅在必要时使用高权限操作,遵循这些最佳实践,你就能安全有效地利用ADB释放Android设备的全部潜力。
延伸阅读与官方资源
- Android开发者官方文档 – ADB:这是最权威、最全面的参考资料,访问 https://developer.android.com/studio/command-line/adb 获取命令的完整列表、详细说明、参数解释和最佳实践。
- Android Open Source Project (AOSP) – ADB:查看ADB的源代码和设计文档(适合高级用户/开发者):https://android.googlesource.com/platform/packages/modules/adb/
- Stack Overflow:遇到具体问题?在 https://stackoverflow.com/questions/tagged/adb 搜索或提问,这是一个活跃的开发者社区。
引用说明:
- 本文中关于ADB的核心概念、命令功能描述、安全警告及最佳实践,主要依据和参考了 Android开发者官方文档 (https://developer.android.com/studio/command-line/adb) 的内容,并结合了广泛认可的开发者社区实践经验。
scrcpy
项目信息可参考其GitHub仓库:https://github.com/Genymobile/scrcpy
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/8875.html