Android ADB 常用指令全解析

ADB(Android Debug Bridge)是 Android 开发和测试不可或缺的调试工具,它建立了电脑与 Android 设备之间的通信桥梁,通过命令行指令可实现对设备的全方位控制。掌握 ADB 指令能大幅提升开发效率,解决各类调试难题。本文系统整理了 ADB 的常用指令,按功能分类详解,包含使用场景与实战示例,助你快速成为 ADB 高手。

一、ADB 基础与环境配置

什么是 ADB?

ADB 是 Android SDK 中的一个命令行工具,全称为 Android Debug Bridge,本质是一个客户端 - 服务器程序,包含三个核心组件:

  • 客户端:运行在开发机上,负责接收用户输入的指令(如命令行输入adb命令)
  • 守护进程(daemon):以adbd进程形式运行在 Android 设备后台,负责执行客户端发送的指令
  • 服务器:运行在开发机后台的adb进程,负责管理客户端与设备守护进程的通信,协调多个客户端与设备的连接

ADB 最初由 Google 在 Android 1.0 时代推出,设计初衷是解决开发过程中 "设备 - 开发机" 交互的痛点。它基于 TCP/IP 协议实现通信,默认通过 USB 接口传输数据,也支持无线连接模式。经过十余年演进,ADB 已从简单的调试工具发展为集设备管理、应用调试、系统控制于一体的全能工具,成为 Android 开发生态中不可或缺的基础设施。

其核心价值体现在:

  • 打破应用沙箱限制,允许开发机直接操作设备底层资源
  • 提供统一的命令接口,兼容从手机到智能手表的全系列 Android 设备
  • 支持跨平台操作(Windows/macOS/Linux),保障开发环境一致性

ADB 的工作原理

ADB 的通信流程遵循典型的 C/S 架构:

1.当用户在终端输入adb命令时,客户端会向本地 ADB 服务器发送请求(默认端口 5037)

2.服务器检查是否已与目标设备建立连接,若未连接则尝试通过 USB 或网络发现设备

3.服务器将指令转发至设备上的adbd守护进程

4.守护进程执行指令并将结果通过服务器返回给客户端

5.客户端将结果显示在终端界面

这种分层架构的优势在于:

  • 支持多客户端同时连接(如同时打开多个命令行窗口操作设备)
  • 服务器自动管理设备连接状态,无需用户手动维护通信链路
  • 指令执行与结果返回的异步处理,提升复杂操作的效率

环境配置步骤

1.安装 Android SDK Platform Tools

  • 官网下载对应系统的 Platform Tools(包含 ADB 工具)
  • 解压后将路径添加到系统环境变量(Windows 的 PATH 或 macOS/Linux 的.bashrc/.zshrc)
  • 验证安装:打开终端输入adb version,显示版本信息即表示安装成功

2.设备调试模式配置

  • 开启设备 "开发者选项":连续点击系统版本号 7 次(不同品牌路径可能不同)
  • 启用 "USB 调试" 选项(Android 11 + 需额外开启 "无线调试" 权限)
  • 首次连接时,设备会弹出 "USB 调试授权" 窗口,勾选 "始终允许此计算机" 以避免重复授权

3.连接设备

  • 有线连接:用 USB 线连接设备与电脑,通过adb devices确认连接状态
  • 无线连接:需先通过 USB 配置(见后文详解),适合需要摆脱线缆束缚的场景

4.确认连接状态

adb devices

正常情况下会显示设备序列号及状态:

  • device:连接正常,可执行指令
  • offline:设备已连接但未响应(通常需重启 ADB 或设备)
  • unauthorized:未授权调试权限(需在设备上确认授权)

ADB 的安全机制

为保护用户隐私与设备安全,ADB 采用多层次安全措施:

1.调试授权机制:首次连接新设备时必须通过设备端确认,防止未授权计算机访问设备

2.权限分级:普通 ADB 指令受限于设备用户权限,敏感操作(如修改系统文件)需 root 权限

3.无线调试加密:Android 11 + 的无线调试采用配对码验证,避免局域网内的恶意连接

4.沙箱隔离:非 root 状态下,ADB 无法直接访问其他应用的私有目录,保障数据隔离

这些机制平衡了开发便利性与设备安全性,尤其在 Android 6.0 引入运行时权限后,ADB 的权限管控更加严格,部分系统级操作需通过pm grant显式授权。

二、设备管理指令

查看设备信息

指令

功能

示例

adb devices

列出所有连接的设备

adb devices -l(显示详细信息)

adb get-serialno

获取设备序列号

adb -s 设备号 get-serialno(指定设备)

adb shell getprop ro.product.model

查看设备型号

-

adb shell getprop ro.build.version.release

查看 Android 系统版本

-

adb shell wm size

查看屏幕分辨率

-

adb shell wm density

查看屏幕密度

-

实战示例

# 查看所有设备详细信息
adb devices -l# 查看设备型号和Android版本
adb shell getprop ro.product.model
adb shell getprop ro.build.version.release

设备连接控制

指令

功能

示例

adb kill-server

停止 ADB 服务器

-

adb start-server

启动 ADB 服务器

-

adb reboot

重启设备

adb reboot recovery(重启到恢复模式)

adb connect <IP:端口>

无线连接设备

adb connect 192.168.1.100:5555

adb disconnect <IP:端口>

断开无线连接

adb disconnect 192.168.1.100:5555

adb usb

切换到 USB 连接模式

-

adb tcpip <端口>

切换到无线调试模式

adb tcpip 5555

无线连接步骤

1.先用 USB 连接设备,设置端口:adb tcpip 5555

2.断开 USB,通过 IP 连接:adb connect 设备IP:5555(设备 IP 在 WLAN 设置中查看)

3.验证连接:adb devices

注意:设备与电脑需在同一局域网,部分设备需开启 "无线调试" 选项(Android 11+)

三、应用操作指令

应用安装与卸载

指令

功能

示例

adb install <APK路径>

安装应用

adb install app-debug.apk

adb install -r <APK路径>

覆盖安装(保留数据)

adb install -r update.apk

adb install -s <APK路径>

安装到 SD 卡

adb install -s large_app.apk

adb uninstall <包名>

卸载应用

adb uninstall com.example.myapp

adb uninstall -k <包名>

卸载但保留数据

adb uninstall -k com.example.myapp

常用参数

  • -r:保留数据和缓存文件,用于应用更新
  • -t:允许安装测试包
  • -d:允许降级安装(低版本覆盖高版本)

实战示例

# 覆盖安装并保留数据
adb install -r app-release.apk# 卸载应用但保留用户数据
adb uninstall -k com.example.myapp

应用运行控制

指令

功能

示例

adb shell am start -n <包名/Activity名>

启动应用组件

adb shell am start -n com.example.myapp/.MainActivity

adb shell am force-stop <包名>

强制停止应用

adb shell am force-stop com.example.myapp

adb shell am kill <包名>

杀死应用进程(系统可能重启)

adb shell am kill com.example.myapp

adb shell pm clear <包名>

清除应用数据和缓存

adb shell pm clear com.example.myapp

adb shell dumpsys package <包名>

查看应用详细信息

adb shell dumpsys package com.example.myapp

启动指定 Activity 示例

# 启动应用主Activity
adb shell am start -n com.example.myapp/.MainActivity# 启动带参数的Activity
adb shell am start -n com.example.myapp/.DetailActivity -e "id" "123" -e "name" "test"

查看应用安装路径

adb shell pm path com.example.myapp

四、文件传输指令

电脑与设备间传输文件

指令

功能

示例

adb push <本地路径> <设备路径>

从电脑发送文件到设备

adb push ./test.txt /sdcard/

adb pull <设备路径> <本地路径>

从设备拉取文件到电脑

adb pull /sdcard/logs ./local_logs

路径说明

  • 设备常用路径:/sdcard/(外部存储根目录)、/data/data/<包名>/(应用私有目录)
  • 注意权限:访问/data/data/下的文件可能需要 root 权限

实战示例

# 推送本地图片到设备相册
adb push ./photo.jpg /sdcard/DCIM/Camera/# 拉取应用缓存文件到本地
adb pull /data/data/com.example.myapp/cache/ ./app_cache

设备内部文件操作

结合adb shell可执行设备内部的文件操作:

# 进入设备shell环境
adb shell# 查看目录内容
ls /sdcard/# 创建目录
mkdir /sdcard/testdir# 移动文件
mv /sdcard/file1.txt /sdcard/testdir/# 复制文件
cp /sdcard/file1.txt /sdcard/testdir/file2.txt# 删除文件
rm /sdcard/test.txt# 查看文件内容
cat /sdcard/log.txt# 退出shell
exit

注意:部分目录操作需要 root 权限,可通过adb root获取(仅适用于已 root 设备或模拟器)

五、调试与诊断指令

日志查看

指令

功能

示例

adb logcat

查看系统日志

-

adb logcat -s <标签>

过滤指定标签的日志

adb logcat -s MyAppTag

adb logcat <包名>:<级别> *:S

过滤指定应用的日志

adb logcat com.example.myapp:V *:S

adb logcat > log.txt

将日志保存到文件

-

adb logcat -c

清除日志缓存

-

日志级别(从低到高):

  • V(Verbose):详细信息(默认)
  • D(Debug):调试信息
  • I(Info):普通信息
  • W(Warn):警告信息
  • E(Error):错误信息
  • F(Fatal):致命错误
  • S(Silent):无输出

实战示例

# 只显示应用的错误日志
adb logcat com.example.myapp:E *:S# 显示所有错误级别以上的日志并保存
adb logcat *:E > error_log.txt

进程与性能监控

指令

功能

示例

adb shell ps

查看设备进程列表

`adb shell ps

adb shell top

实时查看进程 CPU 占用

adb shell top -m 10(显示前 10 个进程)

adb shell dumpsys cpuinfo

查看 CPU 使用情况

`adb shell dumpsys cpuinfo

adb shell dumpsys meminfo <包名>

查看应用内存使用

adb shell dumpsys meminfo com.example.myapp

adb shell dumpsys gfxinfo <包名>

查看应用渲染性能

adb shell dumpsys gfxinfo com.example.myapp

实用技巧

  • adb shell top -d 3:每 3 秒刷新一次进程信息
  • adb shell dumpsys meminfo:不加包名可查看系统整体内存使用
  • adb shell dumpsys gfxinfo <包名> reset:重置渲染性能统计

屏幕与截图

指令

功能

示例

adb shell screencap <路径>

截取屏幕并保存到设备

adb shell screencap /sdcard/screenshot.png

adb exec-out screencap -p > screenshot.png

直接截取屏幕到电脑

-

adb shell screenrecord <路径>

录制屏幕视频

adb shell screenrecord /sdcard/demo.mp4

adb pull /sdcard/demo.mp4

将录制的视频拉取到电脑

-

屏幕录制参数

  • --time-limit 30:限制录制时长(默认 180 秒)
  • --bit-rate 4M:设置比特率(默认 4Mbps)
  • --size 1280x720:设置录制分辨率

示例

# 录制60秒,比特率8Mbps的视频
adb shell screenrecord --time-limit 60 --bit-rate 8M /sdcard/gameplay.mp4# 直接截图到电脑
adb exec-out screencap -p > current_screen.png

六、系统与高级指令

系统信息与控制

指令

功能

示例

adb shell getprop

查看所有系统属性

`adb shell getprop

adb shell setprop <属性名> <值>

设置系统属性(需 root)

-

adb shell getevent

查看输入事件(如按键、触摸)

-

adb shell input <命令>

模拟输入事件

adb shell input tap 500 1000(点击屏幕坐标)

adb shell dumpsys

查看系统服务状态

adb shell dumpsys battery(电池状态)

adb shell date <时间>

设置系统时间(需 root)

adb shell date 20231231.235959

模拟输入示例

# 点击屏幕坐标(500, 1000)
adb shell input tap 500 1000# 滑动屏幕(从(100,500)到(900,500))
adb shell input swipe 100 500 900 500 500(持续500ms)# 输入文本
adb shell input text "HelloADB"# 按电源键
adb shell input keyevent KEYCODE_POWER# 按返回键
adb shell input keyevent KEYCODE_BACK

权限与 root 相关

指令

功能

适用场景

adb root

以 root 权限重启 ADB

已 root 设备获取高级权限

adb unroot

退出 root 权限

恢复普通用户模式

adb shell su -c <命令>

以 root 权限执行命令

adb shell su -c rm /system/app/XXX

adb shell pm grant <包名> <权限>

授予应用权限

adb shell pm grant com.example.myapp android.permission.WRITE_SECURE_SETTINGS

adb shell pm revoke <包名> <权限>

撤销应用权限

adb shell pm revoke com.example.myapp android.permission.CAMERA

注意

  • 大部分设备需要解锁 Bootloader 才能获取 root 权限
  • pm grant只能授予应用在 Manifest 中声明的权限
  • 特殊权限(如WRITE_SECURE_SETTINGS)需通过 ADB 或 root 授予

七、实用技巧与常见问题

提高效率的技巧

1.别名设置:为常用指令设置别名(如在.bashrc 中):

alias adbip='adb connect 192.168.1.100:5555'
alias adbl='adb logcat -s MyApp'
alias adbs='adb shell'

2.多设备操作:当连接多个设备时,用-s指定设备:

adb -s 192.168.1.100:5555 install app.apk
adb -s emulator-5554 shell

3.命令组合:结合管道符实现复杂功能:

# 查找应用进程并杀死
adb shell ps | grep com.example.myapp | awk '{print $2}' | xargs adb shell kill

4.ADB 路径自动补全:配置 bash 自动补全脚本,支持指令和路径补全

常见问题解决

1.设备连接失败(offline 状态)

  • 解决方案:重启 ADB 服务器(adb kill-server && adb start-server)
  • 重新插拔 USB 线或重启设备

2.无权限访问设备(no permissions)

  • Windows:在设备上授权 USB 调试
  • Linux/macOS:执行sudo chmod 777 /dev/bus/usb/<设备路径>(路径可通过lsusb查看)

3.应用安装失败(INSTALL_FAILED_XXX)

  • INSTALL_FAILED_INSUFFICIENT_STORAGE:设备存储空间不足
  • INSTALL_FAILED_VERIFICATION_FAILURE:关闭 "验证应用" 选项
  • INSTALL_FAILED_UPDATE_INCOMPATIBLE:先卸载旧版本再安装

4.无线连接超时

  • 确保设备与电脑在同一网络
  • 检查防火墙设置,允许 5555 端口通信
  • 尝试重启设备的网络或 ADB 服务

八、总结

ADB 是 Android 开发的瑞士军刀,掌握这些指令能显著提升日常开发和调试效率。本文涵盖了设备管理、应用操作、文件传输、调试诊断等核心场景的常用指令,建议初学者从基础指令开始练习,逐步掌握高级用法。

实际使用中,不必死记硬背所有指令,可将本文作为速查表随时查阅。随着使用频率增加,自然会熟练掌握常用命令。ADB 的强大之处在于其灵活性,通过组合不同指令,能解决几乎所有设备交互问题,是每个 Android 开发者必备的技能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93324.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Rust 创建 32 位 DLL 的完整指南

使用 Rust 创建 32 位 DLL 的完整指南 在 Rust 中创建 32 位 DLL 需要特定的工具链配置和编译选项。以下是详细步骤和最佳实践&#xff1a; 环境准备 1. 安装 Rust 工具链 # 安装 Rust curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh# 安装 32 位目标 rustu…

算法基础 第3章 数据结构

1.单调栈 1.什么是单调栈 单调栈&#xff0c;即具有单调性的栈。 实现 #include <iostream> #include <stack> using namespace std; const int N 3e6 10; int a[N], n; void test1() {stack<int> st; // 维护⼀个单调递增的栈for(int i 1; i < n; i…

[机器学习]08-基于逻辑回归模型的鸢尾花数据集分类

使用sklearn的LogisticRegression多分类模型程序代码&#xff1a;import numpy as np from sklearn.linear_model import LogisticRegression import matplotlib.pyplot as plt import matplotlib as mpl from sklearn import datasets from sklearn import preprocessing impo…

【STM32入门教程】stm32简介

一、STM32简介二、ARM三、stm32f103c8t6四、命名规则五、系统结构六、引脚定义七、启动配置一般情况下&#xff0c;都是在flash开始程序&#xff0c;而启动程序也可以进行配置在其他地方启动程序&#xff0c;通过配置boot0和boot1来进行配置八、最小系统电路

SAE J2716多协议网关的硬件架构与实时协议转换机制解析

本文解析符合SAE J2716标准的工业级协议转换设备技术架构&#xff0c;通过拆解其四路双向SENT通道与多总线&#xff08;CANFD/Ethernet/USB&#xff09;的实时交互机制、MicroSD独立日志系统设计及模拟量动态映射方案&#xff0c;为汽车电子与工业通信开发者提供可复用的技术参…

VS2022+QT5.15.2+OCCT7.9.1的开发环境搭建流程

以下是VS2022 QT5.15.2 OCCT7.9.1开发环境搭建的完整流程&#xff1a; 一、安装Visual Studio 2022 下载安装程序 访问VS官网下载Community版安装组件 选择"使用C的桌面开发"工作负载勾选&#xff1a; MSVC v143 - VS 2022 C x64/x86生成工具Windows 10 SDK (建议…

数据库访问模式详解

数据库访问模式详解数据库访问模式是软件架构中数据访问层&#xff08;Data Access Layer&#xff09;设计的核心&#xff0c;它定义了应用程序如何与数据库进行交互的策略和方法。选择合适的访问模式对于系统的性能、可维护性、可扩展性、事务一致性和开发效率至关重要。不同的…

BGE向量算法

一、是什么 什么是BGE向量算法&#xff1f;先说说网上的概念吧。本文不讲解太深的算法知识&#xff0c;主要讲解如何用&#xff01; BGE&#xff08;BAAI General Embedding&#xff09;是北京智源研究院开源的“通用语义向量模型”。一句话&#xff1a;把中文或英文句子变成…

AI数据仓库的核心优势解析

内容概要本文旨在全面解析AI数据仓库的核心优势&#xff0c;为读者提供清晰的框架。文章首先从基础定义出发&#xff0c;探讨其如何高效整合多源数据&#xff0c;并支持人工智能与机器学习应用。随后&#xff0c;将详细阐述处理TB级数据的能力&#xff0c;包括兼容结构化和非结…

具身智能Scaling Law缺失:机器人界的“摩尔定律“何时诞生?

8月9日&#xff0c;在世界机器人大会的演讲台上&#xff0c;宇树科技创始人王兴兴谈论到目前机器人运动控制领域存在的RL Scaling Law问题&#xff0c;他认为现在的机器人在学习一项新的技能时&#xff0c;往往都是需要从头开始研究以及教学。而在未来更加希望的是能够在原有的…

【跨越 6G 安全、防御与智能协作:从APT检测到多模态通信再到AI代理语言革命】

跨越 6G 安全、防御与智能协作&#xff1a;从APT检测到多模态通信再到AI代理语言革命引言单篇总结**2. Integrated Multimodal Sensing and Communication: Challenges, Technologies, and Architectures****3. Why do AI agents communicate in human language?**引言 在迈向…

微前端-解决MicroApp微前端内存泄露问题

前言 之前使用京东微前端框架MicroApp集成10个微前端的页面到AngularJs的后台管理系统中&#xff0c;每个微前端做成一个菜单&#xff0c;一共10个&#xff0c;每次打开都是一个新的微前端&#xff0c;但是发现打开的微前端越多&#xff0c;容易造成内存泄露&#xff0c;下面讲…

线性代数 · 向量运算 | 叉乘 / 几何意义 / 推导

注&#xff1a;本文为 “线性代数 向量运算” 相关合辑。 图片清晰度受引文原图所限。 略作重排&#xff0c;未整理去重。 如有内容异常&#xff0c;请看原文。 数学基础 —— 向量运算&#xff08;叉乘&#xff09; keng_s 于 2016-08-05 17:17:57 发布 1_ 向量的叉乘 向量…

方法中只包含查询操作需要添加事务吗?

方法中只包含查询操作需要添加事务吗?绝大部分情况都不需要 是否需要为包含数据库查询操作的方法添加 @Transactional 注解,取决于业务需求和查询操作的特性,不能一概而论。以下是具体分析: 一、不需要添加 @Transactional 的常见场景 如果查询操作满足以下条件,通常不需…

MTK平台Wi-Fi学习--wifi channel 通过国家码进行功率限制和wifi eFEM 基本配置和wifi Tx SEM问题

一. 国家码可以用来限制功率上限,可以针对各国家实现By channel降功率的能力 可以通过country code来设置不同channel的power limit,操作方法如下: 在rlm_txpwr_init.h文件中g_rRlmPowerLimitConfiguration[]下添加需要限制功率的channel, 例如:国家码CN,信道:CH1,po…

MedGemma: 多模态医学文本与图像处理的创新模型

MedGemma: 多模态医学文本与图像处理的创新模型 今天&#xff0c;我有幸参加了在上海举行的Google 2025 I/O大会&#xff0c;这是一场充满创新与突破的技术盛宴。作为全球最具影响力的科技大会之一&#xff0c;Google I/O每年都会吸引来自世界各地的开发者、企业领袖以及科技爱…

深入剖析 C++ STL 中的 std::list 容器

基本介绍在 C 标准库&#xff08;STL&#xff09;中&#xff0c;std::list 是一个基于双向链表实现的序列容器。它与 std::vector、std::deque 等连续存储容器不同&#xff0c;提供了在序列中高效插入和删除元素的能力&#xff0c;尤其是在序列中间位置操作时优势明显。1. std:…

大规模调用淘宝商品详情 API 的分布式请求调度实践

在电商数据分析、比价系统、选品工具等业务场景中&#xff0c;往往需要大规模调用淘宝商品详情 API 以获取商品标题、价格、销量、评价等核心数据。然而&#xff0c;面对淘宝开放平台的严格限流策略、海量商品 ID 的处理需求以及系统高可用要求&#xff0c;传统的单节点调用方式…

在 Windows 系统中解决 Git 推送时出现的 Permission denied (publickey) 错误,请按照以下详细步骤操作:

完整解决方案步骤&#xff1a; 1. 检查并生成 SSH 密钥 # 打开 Git Bash ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 全程按回车&#xff08;使用默认路径&#xff0c;不设密码&#xff09; 密钥将生成在&#xff1a;C:\Users\<用户名>\.ssh\ 目…

【入门级-算法-2、入门算法:枚举法】

枚举法&#xff08;Brute Force&#xff09;&#xff1a;是一种直接遍历所有可能情况的算法思想&#xff0c;适合解决数据范围较小的问题。它的核心是穷举所有可能性&#xff0c;并检查哪些情况符合要求。 枚举法的基本思想&#xff1a;计算机主要功能&#xff0c;或者说它的优…