ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ADB常用命令实战:设备连接、应用装卸与日志抓取速查手册

ADB常用命令实战:设备连接、应用装卸与日志抓取速查手册 简介面向Android开发、测试与运维人员的ADB常用命令速查文档系统梳理Android Debug Bridge的高频操作按场景分类适用于真机调试、自动化测试、应用上线前的功能验证等环节。压缩包内共2个文件主体为docx格式的详细说明文档另附一个c格式辅助文件整包仅19KB轻量便携可随取随用。内容从设备连接与状态检查入手覆盖adb install/uninstall安装卸载应用、adb shell执行设备端命令、push/pull同步文件、logcat筛选日志、screencap/screenrecord截图录屏、tcpip/connect无线ADB连接、am force-stop强制停止应用等实用技巧并对进入恢复模式、开启USB调试等前置操作做了必要说明。每个命令均配有简洁示例按照功能分组排版既方便新手按部就班地学习也便于老手遇到具体问题时快速定位。已有914人学习下载对普通开发者来说是快速上手的工具手册对测试人员而言也是日常设备管理与日志排查的参考。1. 这份 ADB 常用命令文档帮你把设备连接、应用装卸和日志抓取一次讲透手边一台安卓手机想卸掉预装应用、抓个闪退日志、批量装几个测试包结果打开命令行敲adb devices先提示“adb 不是内部或外部命令”折腾半天连上又卡在 unauthorized。这个场景对开发、测试和玩机玩家来说太常见了而 ADB 常用命令正是为它准备的一条命令安装 APK、查询包名、卸载系统应用、导出崩溃日志能省掉大半手动点击操作。这份命令文档覆盖的范围并不神秘按真实使用频率拆开就是四块环境与连接、应用管理、日志抓取、故障排查。新手按顺序敲一遍就能跑通熟手直接跳到参数部分对表查。全文没有要求你给手机装任何 App全部基于 Android 系统自带的调试桥最终你会得到一套随时能用的 ADB 手边工具。2. 先把 ADB 装好把设备连上驱动、开发者选项与 unauthorized 的第一课2.1 安装 ADB 与配置 PATH不用装软件但要把路指对网上搜“ADB 安装包”会冒出一堆打包工具我建议优先从 Android 官方开发者站点下载 platform-tools 压缩包里面不只包括 adb还有 fastboot 等常用二进制解压后不需要安装直接运行里面的 adb.exe 就行。直接把文件扔到桌面虽然能跑但后续换目录会很麻烦常见做法是固定放在一个不带空格的路径比如 Windows 下C:\adb\platform-toolsmacOS/Linux 下~/platform-tools再把这个目录加进 PATH。Windows 配置 PATH 最省事的办法是这条 setx 命令# Windows把 platform-tools 目录追加到用户 PATH等号前后别加多余空格 setx PATH %PATH%;C:\adb\platform-tools设置完成后必须新开一个 cmd 或 PowerShell 窗口老窗口不会自动刷新环境变量。macOS 则在~/.zshrc末尾加一行export PATH$HOME/platform-tools:$PATH然后执行source ~/.zshrc。验证是否生效用adb version能打印Android Debug Bridge version那串信息就说明路指对了如果提示找不到命令先别急着重装八成是环境变量没刷新生效或者配置 PATH 时把路径写错了。这里要区分“ADB 驱动”和“USB 调试”驱动负责让 Windows 认出你的手机USB 调试负责授权和通信这是两回事。新出厂的手机大部分免驱老设备卡在驱动上时去设备管理器看有没有带感叹号的 ADB Interface再到手机厂商官网下载对应 USB 驱动。驱动装好但连不上往往就是还没开 USB 调试。2.2 打开 USB 调试并完成授权从 adb devices 到 device 状态USB 调试藏在开发者选项里目前各品牌路径大同小异设置 → 关于手机 → 连续点版本号 7 次系统提示“你已进入开发者模式”然后回到设置找开发者选项打开“USB 调试”。用数据线把手机连到电脑此时手机屏幕上会弹出“允许 USB 调试吗”并显示一串 RSA 指纹勾选“始终允许”再点允许。这一步很多人容易翻车——弹窗不弹直接连adb devices显示 unauthorized或者以前手滑点了拒绝后面一直连不上。明白 adb 的架构对排查有好处本机的 adb 客户端会连接后台的 adb server默认监听 5037 端口adb server 负责与设备通信。所以adb kill-server不是迷信是让这个后台服务重启清掉它和旧设备之间的坏状态。连上后的第一件事永远是看设备状态这条命令也是整个 adb 体系的起点adb devices输出格式是“序列号 状态”两列序列号可能是真机串号也可能是网络连接地址。状态有四种常见值含义和处理方向如下表。状态含义处理方向device已连接且已授权可以正常执行命令unauthorized未授权在手机上重新确认弹窗或撤销 USB 调试授权重试offline设备离线换数据线、检查驱动重启 adb serverno device根本没探测到确认 USB 线是数据线检查驱动安装如果状态始终异常常规操作是重启本机的 adb server先adb kill-server再adb start-server然后重插数据线。这是解决大多数“连不上”的第一板斧。注意adb start-server如果提示端口被占用说明机器上还有旧版 adb 或手机助手在抢 5037 端口这个放到第 5 章排查。2.3 无线调试与局域网连接电视、车机和手机都能用的方案有线调试不是唯一出路。电视盒子、车机和智能音箱这类设备没有桌面 USB 口就要靠网络调试。老的通用做法是先用有线连一次执行adb tcpip 5555让 adb 服务切到监听端口再拔线用adb connect连接设备 IP从 Android 11 开始开发者选项里直接多了“无线调试”开关可以生成配对码配对成功后连端口都不用记。# 先把 adb 从 USB 模式切到网络模式端口用常规的 5555 adb tcpip 5555 # 假设手机在局域网里的 IP 是 192.168.1.100 adb connect 192.168.1.100:5555连接成功后再敲adb devices状态列会变成 device序列号位置显示192.168.1.100:5555。要断开就adb disconnect 192.168.1.100:5555。无线调试对网络环境有要求电脑和设备必须可互访中间隔了访客网络或者有 AP 隔离都会导致连不上。需要重申的是打开网络 adb 相当于把设备调试口暴露在局域网内我只建议在可信网络里用用完及时关闭无线调试开关。3. 应用管理命令是 ADB 的高频区install、uninstall 与 pm 系列实战装上、连上设备之后实际工作中碰得最多的就是应用管理。装 APK、卸旧包、查包名、清数据每一条都有自己的参数细节也是“ADB 常用命令”里最不能出错的部分。3.1 安装与覆盖安装adb install 的 -r、-d、-t 参数如何选安装 APK 是最基础的动作但多数新人在参数上吃过亏。adb install的基本语法是adb install [-r] [-d] [-t] [-g] 包路径不带任何参数直接安装下面是常用参数对照表。参数作用典型场景-r覆盖安装保留应用数据升级测试包不想丢登录状态-d允许安装比当前版本更低的 APK需要把应用退回旧版验证问题-t允许安装测试包testOnly 标志用 Android Studio 构建的 debug APK-g安装时直接授予应用所有运行时权限省去逐个点权限授权实际命令# 覆盖安装一个 debug 测试包避开版本号和 testOnly 两个拦路虎 adb install -r -t -d app-debug.apk # 一次安装多个 APK适合批量装渠道包 adb install-multiple apk1.apk apk2.apk apk3.apk逻辑说明-r不改变包签名校验和版本校验只是安装时保留已存在应用的用户数据-d专门针对“已安装更高版本”的报错降级安装时必备-t解决的是INSTALL_FAILED_TEST_ONLYAndroid Studio 生成的 debug 包默认带 testOnly 标志直接 install 不带-t就会失败。install-multiple更适合批量回归测试但多个 APK 必须使用同一个签名否则中途会报错中断。安装过程最常见的失败输出有两个INSTALL_FAILED_VERSION_DOWNGRADE是版本号比已装的低加-dINSTALL_FAILED_USER_RESTRICTED常见于部分品牌机限制 USB 安装需要在开发者选项里把“USB 安装”允许开关打开。还有一类INSTALL_FAILED_UPDATE_INCOMPATIBLE说明签名冲突只能先卸载旧包再装新的。3.2 卸载用户应用与系统应用adb uninstall 和 pm uninstall --user 0卸载命令有两层adb uninstall和adb shell pm uninstall。第一层是 adb 的自带子命令只负责卸载语法最简单第二层是进入设备后调用系统包管理器功能更细能指定用户空间卸载这也是“卸载系统预装应用”的入口。# 卸载普通第三方应用包名必须是 com.xxx 的完整格式 adb uninstall com.example.app # 卸载当前用户下的系统应用不触碰系统分区 adb shell pm uninstall --user 0 com.example.systemapp # 如果卸载不彻底用禁用代替卸载桌面图标同样会消失 adb shell pm disable-user --user 0 com.example.systemapp--user 0的含义是“当前主用户空间”。很多预装应用被厂商写进了系统分区普通卸载命令动不了它们指定--user 0卸掉的是当前用户视角的副本应用仍然占用系统分区空间但桌面上看不到、也不再运行。这也是业内常说的后悔药pm enable com.example.systemapp就能恢复不用刷机。禁用命令disable-user更进一步它绕过卸载逻辑直接让包管理器屏蔽应用对国产 ROM 里那些不可卸载的系统应用很有效。这里的坑在于“卸载”和“禁用”的边界。如果目标应用是用户自己在应用商店装的用第一行adb uninstall只有应用是系统预装、无法点卸载时才动用--user 0和disable-user。把--user 0当成万能卸载器去拆厂商核心组件可能导致桌面崩溃、设置打不开那就要通过pm enable一条条救回来。3.3 查包名、查 Activity、清数据pm list、dumpsys 与 pm clear 的配合卸载前得知道包名。查包名基本靠pm list packages这个命令输出量极大要配合过滤使用。Windows 的 cmd 没有 grep用 findstrmacOS 和 Linux 直接用 grep。# 列出所有第三方应用Android 官方把用户自装和部分预装归到 -3 adb shell pm list packages -3 # 按关键字过滤比如找所有包含 tencent 的包 adb shell pm list packages | grep tencent adb shell pm list packages | findstr tencent拿到包名之后经常还需要定位当前打开的是哪个界面方便做 UI 自动化或者确认跳转是否成功。这一条在常用命令文档里出现频率极高# 打印栈顶 Activity 的包名和类名 adb shell dumpsys activity activities | grep -E mResumedActivity|topResumedActivity输出最后会给出类似mResumedActivity: ActivityRecord{... com.example/.MainActivity}这就是当前前台界面。清数据和强制停止是两个经常一起出现但用途不同的操作pm clear会删应用的全部数据相当于恢复出厂am force-stop只杀进程数据还在。自动化测试里常用组合是“先 clear 再启动”。adb shell pm clear com.example.app adb shell am force-stop com.example.app adb shell am start -n com.example.app/.MainActivitypm clear对系统应用要谨慎清掉了某系统组件的数据可能导致它无法正常工作好在多数情况下重开应用就能自恢复但仍有小概率进入永久黑屏的坑。测试机上这种状态多半要重刷系统所以拿系统应用练手前先确认它有可用的pm enable或重置路径。4. 用 logcat 抓日志和基础调试崩溃定位、截图录屏与文件传输开发要数据、测试要证据最后都落在 logcat 上。抓日志不一定要装抓包工具adb 自带的功能已经够用关键是掌握过滤和落盘这两件事。4.1 logcat 按级别按进程过滤抓崩溃日志只用一行命令logcat 是 Android 日志系统的命令行出口日志量极大直接adb logcat会刷屏到怀疑人生。真正干活要用过滤参数先看一条最常用的# 只输出 Error 及以上级别的日志其他等级全部静默 adb logcat *:E -v threadtime*:E是优先级过滤器格式是“标签:级别”*代表所有标签级别从低到高是 V、D、I、W、EAndroid 10 之后加了 FFatal。-v threadtime让每条日志带“时间 线程ID 优先级 标签”前缀是排查崩溃时的标准姿势。app crash 的核心现场是 tag 为“AndroidRuntime”的行以及行内的“FATAL EXCEPTION”抓 logcat 时不要只盯倒数几行先搜这两个关键词。有时候只想要某一个进程的日志比如只看被测 App可以先用pidof拿到 PID再传给 logcat# 先取被测应用的进程号 adb shell pidof com.example.app # 假设返回 12345按进程号过滤日志 adb logcat --pid12345 -v threadtime--pid比用包名过滤更可靠因为 logcat 本身不认包名。再配合结束后的 dump 模式就能得到一份干净的崩溃现场。常用流程是先清空旧日志再复现崩溃最后把当前缓冲一次性导出。adb logcat -c # 手动让应用崩溃或执行复现步骤 adb logcat -d -v threadtime AndroidRuntime:E *:S crash.log-c清空缓冲里积压的旧日志复现结束后用-d以 dump 模式退出避免长时间挂在前台刷屏AndroidRuntime:E *:S把 AndroidRuntime 之外的输出全部静默最终落盘的文件很小、可读性高。这一套流程在测试交付场景很管用你给开发一份几百 MB 的原始 logcat不如给他这份抢救出来的崩溃现场。4.2 截图、录屏、查系统参数不用装任何 App 的调试手段要在测试报告里留证据、复现偶现问题不一定要装截图 Appadb 自带工具够用。截图命令有个容易踩的细节用exec-out而不是shell screencap直接重定向。# 直接输出 PNG 到本地比 screencap 写到设备再 pull 少一步 adb exec-out screencap -p screen.png # 录屏最长时间受设备限制默认 180 秒封顶 adb shell screenrecord --time-limit 30 /sdcard/demo.mp4exec-out作为 adb 的一个执行通道会原样输出二进制流不会像普通adb shell那样把换行和回车做平台转换所以截图必须用exec-out screencap。录屏参数里--time-limit最大 180 秒画面默认尺寸按设备屏幕来要控制大小可以加--size 720x1280。查系统参数最实用的一批命令包括getprop、wm和dumpsys batteryadb shell getprop ro.product.model adb shell wm size adb shell wm density adb shell dumpsys batterygetprop ro.product.model返回机型wm size和wm density返回当前分辨率和屏幕密度做兼容性适配时用来核对设备信息。dumpsys battery能看到电量、温度、充电状态比在手机上翻设置快得多。4.3 push 与 pull把文件送进设备再拿回来adb push和adb pull是文件传输的一等公民放在调试章节里是因为它们常和截图、日志配合使用。# 把本地安装包推进设备的下载目录 adb push app.apk /sdcard/Download/ # 把设备上的视频拉到当前目录注意结尾的 ./ adb pull /sdcard/Download/demo.mp4 ./路径上建议优先选/sdcard和/sdcard/Download这两个目录普通应用可读可写不需要 root 权限系统目录需要 root 或 adb root 权限普通机器 push 到/system会报权限不足。pull时如果文件正在被占用会读到空文件尤其不要一边录屏一边拉 mp4等录完再拉。push 大文件时中途断开是正常现象重新执行一次即可adb 没有断点续传别指望它能在弱网环境下的稳定可靠文件大就换数据线。5. 避坑排查ADB 连接与命令执行的 5 个经典现场命令记熟了最后还是要过排查关。下面 5 个现场都是我处理过的高频问题按“现象、原因、解决”三条写方便对号入座。5.1 现象adb devices 一直显示 unauthorized怎么解决现象adb devices输出一串XXXXXXX unauthorized手机端却没有任何授权弹窗重新拔插数据线也没有反应。原因Android 的 USB 调试授权是每台电脑一个 RSA 指纹记录只要之前在弹窗上点过“否”这台电脑就会被记住并拒绝授权部分国产 ROM 还要求解锁屏幕才能弹窗。解决打开开发者选项找到“撤销 USB 调试授权”或“删除授权记录”撤销后重新拔插数据线就会再次弹出 RSA 授权框勾选“始终允许”。如果弹窗还是不出现把当前 adb server 重启一次再接。这个问题的本质是设备端的授权状态不是电脑端能硬解的别在电脑上反复重装驱动浪费时间。5.2 现象提示 adb 不是内部或外部命令也不是可运行的程序现象在 cmd 里敲adb直接回“adb 不是内部或外部命令也不是可运行的程序或批处理文件”。原因platform-tools 目录没有加进 PATH或 PATH 改完没重开终端系统里装了多个 adb 时新加的路径被旧的覆盖。解决先用绝对路径验证工具本身可用比如C:\adb\platform-tools\adb version然后在系统环境变量里把 platform-tools 放在靠前位置最后打开一个全新终端测试。开发机上如果同时装了 Android Studio 自带的 platform-tools两个版本不一致时优先统一删掉一个避免调半天才发现是本机 adb server 与新版工具不匹配。5.3 现象设备 offline 或反复断开执行命令中途丢连接现象adb devices显示 offline或者刚跑一条命令就提示 connection lost。原因数据线是纯充电线没有数据通道Windows 驱动安装不正确adb server 端口被手机助手、模拟器或占用 5037 端口的进程抢走。解决先换线换原装或至少能传文件的数据线执行adb kill-server adb start-server重启服务再用netstat -ano | findstr 5037看端口占用查到 PID 后在任务管理器里结束对应进程。注意重启 adb server 后原来已经授权的 USB 调试记录还在通常不需要重复授权除非你连的设备真的被你彻底重置了。5.4 现象卸载系统应用报错 Failure [DELETE_FAILED_INTERNAL_ERROR]现象用adb shell pm uninstall --user 0 com.example卸载预装应用返回Failure [DELETE_FAILED_INTERNAL_ERROR]或者提示 Success 但桌面图标还在。原因部分厂商把包标记为不可卸载--user 0对它们不生效或者应用本身还在运行被系统锁定。解决先用am force-stop com.example强停再执行卸载仍然失败就把卸载换成禁用adb shell pm disable-user --user 0 com.example。禁用后图标消失、进程被杀效果接近卸载。要恢复就执行adb shell pm enable com.example。还有一类情况是adb uninstall卸载用户应用时报DELETE_FAILED_DEVICE_POLICY_MANAGER表示该应用是设备管理器需要先去系统设置里解除设备管理器激活再卸。5.5 现象logcat 抓下来的文件在 Windows 乱码或漏抓崩溃现场现象adb logcat -v threadtime crash.log在 Windows 下打开中文注释和 tag 名变成乱码崩溃明明发生了但日志里找不到 FATAL EXCEPTION。原因Android 日志是 UTF-8Windows 的 cmd 默认用 GBK 编码写文件两边编码不一致漏抓则是因为没清缓冲关键行被旧日志淹没。解决在 cmd 开头先执行chcp 65001把代码页切到 UTF-8再重定向抓取前先adb logcat -c清空复现完崩溃用adb logcat -d -v threadtime AndroidRuntime:E *:Sdump 当前缓冲。如果你用 PowerShell直接adb logcat -v threadtime | Out-File -Encoding utf8 crash.log避免 cmd 的代码页问题。6. 把 ADB 常用命令封装进自己的小工具传参脚本与快速抓日志的技巧假设你每天要测多台设备装的卸的抓日志的命令都要重复敲这时再翻文档就慢了。我自己的习惯是把高频命令封装成一个小脚本放进 PATH参数化使用#!/usr/bin/env bash # adb-helper.sh把装机、卸机、抓日志、截图收敛成四个子命令 cmd$1 case $cmd in install) adb install -r -t ${2};; # 覆盖安装 test APK uninstall) adb shell pm uninstall --user 0 ${2};; # 卸载或隐藏预装应用 logcat) pid$(adb shell pidof $2); # 实时取进程号 adb logcat --pid$pid -v threadtime;; # 按进程过滤日志 screenshot) adb exec-out screencap -p ${2:-screen}.png;; # 截图回传本地 *) echo 用法: adb-helper.sh {install|uninstall|logcat|screenshot} 参数;; esac这段脚本借用了第 3 章的-r -t、--user 0、--pid和第 4 章的exec-out把整个常用命令集里最高频的四条变成命令行工具。重点注意logcat的 PID 是每次执行时用pidof现取的不能写死否则换应用就失效Windows 上没 bash 的话把同样的分支逻辑写成 .bat用%1和%2取参效果一样。脚本只是形式真正的验证方法是给自己定一个简单规矩新换电脑、新接设备先跑通四条命令——adb devices看连接、adb install -r看安装、adb logcat -d看日志、adb pull看文件传输。这四条覆盖了连接、安装、调试、传输四个环节任何一条失败都说明环境还没彻底就绪先解决它再干别的活。我刚接触测试时最怕临时被叫去抓日志翻文档像无头苍蝇后来把命令整理成这份速查文档用脚本把这些高频操作固化下来遇到问题先跑脚本跑不通再逐条手动定位这让我少踩了不少坑。你也值得留一份这样的手边工具希望帮到你。本文还有配套的精品资源点击获取
返回列表