> 技术文档 > Android ADB:从安装到高级调试的终极指南(附跨平台实战教程)_adb驱动

Android ADB:从安装到高级调试的终极指南(附跨平台实战教程)_adb驱动

在 Android 开发与调试领域,Android Debug Bridge(ADB) 堪称 “瑞士军刀” 级工具。无论是应用开发者、测试工程师,还是极客玩家,掌握 ADB 意味着拥有了深入系统底层的能力。它允许我们通过计算机与 Android 设备建立通信,执行诸如安装卸载应用、查看设备日志、执行 Shell 命令等一系列操作,极大地提升了工作效率与设备操控的灵活性。

一、ADB概述

1.1 什么是ADB?

ADB 即 Android Debug Bridge,是Google官方提供的命令行工具,作为Android SDKSoftware Development Kit的核心组件,它通过USB或Wi-Fi实现计算机与Android设备(手机、平板、手表等)间的通信。开发者可通过ADB完成应用安装调试、文件传输、系统操作等任务,甚至支持刷机、屏幕录制等高级功能。

在开发过程中,当 App 出现 ANR(Application Not Responding)无响应或者 Crash 崩溃等棘手问题时,ADB 能够帮助我们快速抓取日志,为定位和解决问题提供关键线索。简而言之,ADB 就像是连接 Android 设备与 PC 端的超级纽带,借助它,我们能在电脑上对设备进行全方位的深度操作,极大地提升了开发效率与设备管理的便捷性。

1.2 ADB架构解析

ADB采用客户端-服务器-守护进程的三层架构:

  • 客户端(Client):用户在终端输入命令的界面(如adb devices

  • 服务器(Server):运行在主机后台,管理与设备的连接(如adb.exe进程)

  • 守护进程(Daemon):驻留于Android设备的adbd服务,接收并执行 Server 发送的指令

当执行adb devices时,服务器会扫描设备并与adbd建立连接,形成完整的通信链路。

二、ADB 安装教程(Windows 系统)

1. 下载 ADB 工具包

  • 首先,打开浏览器,访问 ADB 的官方下载页面(通常为 Android 开发者官网的 SDK Platform - Tools 下载部分,链接:https://developer.android.com/studio/releases/platform - tools)。

  • 在下载页面中,找到适用于 Windows 系统的 ADB 工具包下载链接,一般为一个压缩文件(例如 platform - tools - latest - windows.zip),点击下载并等待下载完成。

2. 解压 ADB 工具包

  • 找到下载完成的压缩文件,右键点击它,选择 “解压到当前文件夹” 或者 “解压文件” 选项,将 ADB 工具包解压到一个容易找到的目录,比如 “D:\\software\\adb\\platform-tools”。解压完成后,会在该目录下看到一系列文件,其中就包含了我们后续要用到的 adb.exe 等重要文件。

3. 配置环境变量

  • 右键点击 “此电脑”,选择 “属性”。

  • 在弹出的窗口中,点击 “高级系统设置”。

  • 在 “系统属性” 窗口的 “高级” 选项卡下,点击 “环境变量” 按钮。

  • 在 “环境变量” 窗口的 “系统变量” 部分,找到名为 “Path” 的变量,选中它并点击 “编辑”。

  • 在弹出的 “编辑环境变量” 窗口中,点击 “新建”,然后输入解压 ADB 工具包的目录路径,例如 “D:\\software\\adb\\platform-tools”。点击 “确定” 保存设置,依次关闭所有打开的窗口。

4. 验证 ADB 是否安装成功

  • 按下键盘上的 Win + R 组合键,打开 “运行” 对话框,输入 “cmd” 并回车,打开命令提示符窗口。

  • 在命令提示符窗口中,输入 “adb version” 命令并回车。如果 ADB 安装成功,将看到 ADB 的版本信息,例如 “Android Debug Bridge version 1.0.41”,表明 ADB 已经成功安装在你的 Windows 系统中,并且环境变量配置正确,可以正常使用了。

三、ADB 基本使用方法

3.1 连接设备

1. USB 连接

  • 首先,确保你的 Android 设备已经开启了开发者选项。不同品牌的 Android 设备开启开发者选项的方法略有不同,一般是进入设备的 “设置”,找到 “关于手机” 或 “关于设备” 选项,在其中连续点击 “版本号” 7 次左右,即可激活开发者选项

  • 激活开发者选项后,返回 “设置” 页面,找到 “开发者选项” 并进入,在其中打开 “USB 调试” 开关。

  • 使用 USB 数据线将 Android 设备连接到电脑上。此时,设备可能会弹出提示,询问是否允许 USB 调试,点击 “允许”。

  • 在电脑上打开命令提示符(Windows)、终端(Mac 或 Linux),输入 “adb devices” 命令并回车。如果设备连接成功,将看到设备的序列号以及设备状态,例如:

  • 其中 “0123456789ABCDEF” 就是设备的序列号,“device” 表示设备已连接且状态正常。如果设备没有显示在列表中,可能是驱动未安装正确、USB 数据线有问题或者设备的 USB 调试未成功开启,需要逐一排查解决。

2. Wi-Fi 连接(需设备已 root 或支持 ADB 无线调试功能)

  • 首先,将 Android 设备与电脑连接到同一个 Wi-Fi 网络中。

  • 通过 USB 数据线将设备连接到电脑上,打开命令提示符或终端,输入以下命令,将 ADB 的连接方式切换为 TCP/IP 模式,并指定一个端口号(例如 5555):

adb tcpip 5555
  • 成功切换后,拔掉 USB 数据线,然后输入以下命令连接到设备的 IP 地址和指定端口:

adb connect 设备IP地址:5555
  • 例如,如果设备的 IP 地址是 192.168.1.101,那么命令应该是:

adb connect 192.168.1.101:5555
  • 如果连接成功,你将看到 “connected to 192.168.1.101:5555” 的提示信息。此后,就可以在不使用 USB 数据线的情况下,通过 Wi-Fi 网络使用 ADB 对设备进行操作了。不过需要注意的是,通过 Wi-Fi 连接 ADB 可能会受到网络环境的影响,稳定性可能不如 USB 连接。

3.2 常用 ADB 命令详解

1. 设备管理命令

  • adb devices:列出所有已连接的设备及其状态。如前文所述,执行该命令后,会显示设备的序列号以及设备状态,通过此命令可以快速确认设备是否成功连接到电脑。

  • adb start - server:启动 ADB 服务。如果 ADB 服务未运行或者出现异常,可以使用此命令启动服务,确保 ADB 能够正常工作。

  • adb kill - server:停止 ADB 服务。在某些情况下,例如需要重新配置 ADB 或者解决服务冲突时,可以先停止 ADB 服务,再重新启动。

  • adb reboot:重启连接的 Android 设备。相当于在设备上按下重启按钮,方便快捷地重启设备。

  • adb reboot recovery:将设备重启进入 Recovery 模式。Recovery 模式常用于刷机、清除数据等高级操作,通过此命令可以快速进入 Recovery 模式。

  • adb reboot bootloader:将设备重启进入 Fastboot 模式。Fastboot 模式主要用于设备刷机、解锁等底层操作,对于开发者和喜欢折腾设备的用户来说是一个常用的模式。

2. 应用管理命令

  • adb install :安装 APK 应用程序到设备上。例如,要安装名为 “app.apk” 的应用,且该应用位于 “C:\\Users\\yourusername\\Downloads” 目录下,那么在命令提示符中输入的命令应该是:

adb install C:\\Users\\yourusername\\Downloads\\app.apk
  • 如果安装成功,会看到 “Success” 的提示信息。如果安装失败,可能是 APK 文件损坏、设备存储空间不足或者应用签名有问题等原因,需要进一步排查。

  • adb install - r :重新安装应用程序,并且保留应用的数据和缓存。当你对应用进行更新时,如果希望保留用户之前的设置和数据,就可以使用这个命令。

  • adb uninstall :卸载指定包名的应用程序。包名是应用程序在 Android 系统中的唯一标识,例如要卸载微信应用,微信的包名是 “com.tencent.mm”,那么在命令提示符中输入的命令应该是:

adb uninstall com.tencent.mm
  • 执行后,如果卸载成功,会看到 “Success” 的提示信息。

  • adb uninstall - k :卸载应用程序,但保留应用的数据和缓存。与普通卸载不同,使用此命令卸载应用后,下次重新安装该应用时,之前的数据和缓存仍然存在。

  • adb shell pm list packages:列出设备上所有已安装的应用程序包名。执行该命令后,会在命令行中显示一系列包名,通过这些包名可以了解设备上安装了哪些应用,并且方便后续对应用进行管理操作。

  • adb shell pm list packages -s:仅列出系统应用的包名。系统应用是设备出厂时预装的应用,通过此命令可以快速查看设备的系统应用有哪些。

  • adb shell pm list packages -3:仅列出第三方应用的包名。第三方应用是用户自行安装的应用,与系统应用区分开来,方便对第三方应用进行单独管理。

3. 文件传输命令

  • adb push :将本地文件推送到设备上。例如,要将电脑上 “C:\\Users\\yourusername\\Documents\\test.txt” 文件推送到设备的 “/sdcard/” 目录下,在命令提示符中输入的命令应该是:

adb push C:\\Users\\yourusername\\Documents\\test.txt /sdcard/
  • 执行后,文件会被复制到设备指定的目录中,如果推送成功,会看到 “1 file pushed. 0 files skipped.” 的提示信息。

  • adb pull :从设备上拉取文件到本地。例如,要从设备的 “/sdcard/DCIM/Camera/photo.jpg” 文件拉取到电脑的 “C:\\Users\\yourusername\\Pictures” 目录下,在命令提示符中输入的命令应该是:

adb pull /sdcard/DCIM/Camera/photo.jpg C:\\Users\\yourusername\\Pictures
  • 拉取成功后,文件会出现在指定的本地目录中。

4. Shell 命令执行

  • adb shell:进入设备的 Shell 环境,在 Shell 环境中可以执行各种 Linux 命令来管理设备。进入 Shell 环境后,命令提示符会变为设备的提示符,例如 “device:/ $”,此时你可以输入各种 Shell 命令,如 “ls” 查看目录文件、“cd” 切换目录等。例如,要查看设备的 “/sdcard/” 目录下的文件,进入 Shell 环境后输入 “ls /sdcard/” 即可。

  • 当你完成在 Shell 环境中的操作后,输入 “exit” 命令可以退出 Shell 环境,回到电脑的命令提示符状态。

  • adb shell :在不进入设备 Shell 环境的情况下,直接在电脑的命令提示符中执行设备的 Shell 命令。例如,要在设备上执行 “date” 命令查看设备当前时间,在电脑的命令提示符中输入:

adb shell date

  • 执行后,会在命令行中显示设备的当前时间。这种方式适用于只需要执行简单 Shell 命令的情况,无需进入完整的 Shell 环境。

3.3 日志与调试

实时日志查看(Logcat)

adb logcat # 显示所有日志adb logcat -s MyAppTag:I *:S # 过滤标签MyAppTag,级别Info,其他级别Silentadb logcat --pid=12345  # 仅显示指定进程日志

执行 Shell 命令:

adb shell # 进入设备Shellls /data/app# 查看应用目录top -n 1 # 实时进程监控

四、高级调试技巧:深入系统底层

4.1 查看设备日志(logcat)

在开发应用或者排查设备问题时,查看设备日志是一个非常重要的手段。ADB 提供的 logcat 命令可以帮助我们获取设备的日志信息。

1. 基本使用方法

在命令提示符或终端中输入 “adb logcat” 命令并回车,此时会实时输出设备的日志信息,这些日志信息包含了系统、应用程序等各个层面的运行记录,对于开发者来说,通过分析这些日志可以了解应用的运行状态,查找程序中的错误和异常。例如,当应用出现崩溃时,在日志中可以找到崩溃的原因和相关的堆栈信息,帮助开发者快速定位问题所在。

2. 日志过滤

  • 由于设备日志信息通常非常多,为了更快速地找到我们关注的信息,logcat 支持日志过滤功能。

  • 按日志级别过滤:Android 日志分为多个级别,从低到高依次为 VERBOSE(详细)、DEBUG(调试)、INFO(信息)、WARN(警告)、ERROR(错误)、FATAL(严重错误)。例如,如果我们只希望查看 ERROR 级别的日志,可以使用以下命令:

adb logcat *:E

  • 其中 “*” 表示所有的日志标签,“:E” 表示只显示 ERROR 级别的日志。这样在日志输出中就只会显示错误相关的信息,方便我们聚焦于关键问题。

  • 按标签过滤:每个日志记录都有一个标签(tag),通常是产生日志的类名或者模块名。例如,我们只想查看某个特定应用(假设其日志标签为 “ActivityManager”)的日志,可以使用以下命令:

adb logcat ActivityManager:*

  • 这里 “ActivityManager” 是日志标签,“:*” 表示显示该标签下的所有日志级别。通过这种方式,可以将日志范围缩小到特定的应用或模块,提高排查问题的效率。

3. 保存日志到文件

  • 如果我们希望将日志信息保存到文件中,以便后续仔细分析,可以使用以下命令:

adb logcat > log.txt
  • 该命令会将日志信息输出并保存到当前目录下的 “log.txt” 文件中。如果希望在日志中包含时间戳等更多信息,可以使用以下命令:

输出带时间戳的日志到文件

adb logcat -v time > log.txt
  • -v time:显示日志的时间戳(格式:MM-DD HH:MM:SS.mmm

  • >:将输出重定向到文件(覆盖原有内容)

追加模式与持续记录:

adb logcat -v threadtime >> log_with_thread.txt
  • -v threadtime:显示完整时间戳 + 进程 ID + 线程 ID

  • >>:追加到文件(不覆盖原有内容)

过滤特定标签和级别:

adb logcat -s \"ActivityManager:I\" \"MyApp:D\" *:S
  • -s:设置过滤器

  • ActivityManager:I:只显示 ActivityManager 标签的 Info 级别

  • MyApp:D:只显示 MyApp 标签的 Debug 级别

  • *:S:其他标签全部静默(Silent)

过滤特定进程 ID:

adb shell ps | grep com.example.app # 获取PIDadb logcat --pid=12345  # 只显示该进程日志

常见日志级别

级别 含义 用途 V Verbose 最详细的调试信息 D Debug 调试信息 I Info 关键状态信息 W Warning 警告信息 E Error 错误信息 F Fatal 致命错误 S Silent 静默(不显示任何日志)

清空日志缓冲区:

adb logcat -c # 清空所有日志

结合 grep 实时过滤

adb logcat | grep \"Network\" # 实时显示包含\"Network\"的日志

保存特定时间段日志:

adb logcat -v time -T \"2023-10-25 10:00:00.000\" > specific_time.log
  • -T:从指定时间开始记录

4.2 应用调试与性能分析

①调试 APK:启用调试模式

adb shell am start -D -n com.example.app/.MainActivity # 启动应用并等待调试器连接
  • 在 Android Studio 中选择 “Attach Debugger to Android Process”,关联进程。

②性能分析

获取 CPU 占用:

adb shell dumpsys cpuinfo | grep com.example.app

内存使用情况:

adb shell procrank | grep com.example.app

③系统级操作

修改系统设置

adb shell settings put system screen_brightness 50 # 设置亮度为50%adb shell settings get system screen_brightness # 获取当前亮度

模拟按键与输入

adb shell input keyevent 26 # 模拟电源键(KeyEvent 26)adb shell input text \"hello world\" # 输入文本

4.3 系统调试三板斧

日志抓取:

adb logcat -v time > log.txt # 带时间戳保存日志adb logcat -s TAG_NAME # 按标签过滤

屏幕操作:

adb exec-out screencap -p > screen.png # 截屏adb shell screenrecord /sdcard/demo.mp4 # 录屏(默认3分钟)

性能监控:

adb shell dumpsys meminfo # 内存分析adb shell top -n 1  # CPU占用排行

4.4 多设备管理

adb -s ABCDEFG0123456 shell # 指定设备执行命令adb devices | awk \'NR>1 {print $1}\' > devices.txt # 批量获取设备ID

4.5 自动化脚本开发

import subprocessdef adb_command(cmd): result = subprocess.run([\'adb\'] + cmd.split(), capture_output=True, text=True) return result.stdoutprint(adb_command(\"shell getprop ro.product.model\"))

4.6 解锁Bootloader

adb reboot bootloader # 进入Fastboot模式fastboot oem unlock # 执行解锁命令

风险提示:解锁会清除设备数据,操作前务必备份

4.7 镜像刷写流程

fastboot flash system system.img # 刷入系统镜像fastboot reboot  # 重启设备

五、实战案例:解决常见调试问题

5.1 设备连接失败

现象:adb devices显示offline或无设备 可能原因与解决方法:

  1. USB 调试未开启:重新勾选 “USB 调试” 并授权

  2. 驱动缺失:安装设备厂商提供的 USB 驱动

  3. ADB 服务未启动:

adb kill-server && adb start-server # 重启ADB服务

      4. USB 线故障:更换原装 USB 线或接口

5.2 应用安装失败

现象:adb install提示INSTALL_FAILED_*错误 解决方法:

  • INSTALL_FAILED_ALREADY_EXISTS:先卸载旧版本

  • INSTALL_FAILED_NO_MATCHING_ABIS:检查 APK 支持的 CPU 架构

  • INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE:清除应用数据后重试

5.3 日志乱码问题

解决方法:

  1. 确保终端编码为 UTF-8(如 Windows 命令提示符需设置:chcp 65001

  2. adb logcat命令中添加参数:

adb logcat -G /data/local/tmp/logcat.log # 输出到文件查看

六、总结

ADB 作为 Android 开发与调试的核心工具,其功能远不止本文所述。从基础的文件传输到复杂的系统级调试,ADB 贯穿了应用开发的全生命周期。建议在实际项目中多尝试不同命令组合,并结合官方文档(ADB Documentation)深入探索。随着 Android 系统的更新,ADB 也在不断演进,保持对新技术的关注(如 ADB over TCP/IP、Wireless Debugging)将帮助您始终站在开发效率的前沿。