ARTICLE DETAIL

资讯详情

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

ADB调试命令速查手册:从设备连接到应用管理实战

ADB调试命令速查手册:从设备连接到应用管理实战 1. 准备环境ADB工具链安装与配置1.1 从零开始搞定ADB工具包ADBAndroid Debug Bridge是安卓开发者和玩机用户绕不开的基础工具。它本质上是电脑与安卓设备之间的一座调试桥梁支持安装应用、推送文件、抓取日志、模拟点击、修改系统设置等大量操作。无论你是刷机爱好者、自动化测试工程师还是应用开发者ADB都是日常工作中出场率最高的命令行工具之一。这套速查手册基于2026年9月前后我实际使用的Android 14/15环境整理大部分命令兼容Android 8到Android 15部分新特性比如动态刷新率、隐私指示器相关调试仅在Android 12以上有效。你可以把它当成一份随手翻的备忘录而不是教科书。先说ADB工具的获取。最简单的方式是下载官方SDK Platform-Tools压缩包解压后直接使用不需要安装过程。Windows用户注意解压后目录里包含adb.exe、fastboot.exe、AdbWinApi.dll等文件建议把整个目录放到一个固定位置比如D:\platform-tools不要把exe单独复制到别处因为dll和exe必须待在同一个目录才能正常工作。命令行进入这个目录后就可以直接执行adb version如果能看到类似Android Debug Bridge version 1.0.41这样的输出说明工具本身没问题。不过每次都要先cd到目录再敲命令确实很劝退新手。更常用的做法是把platform-tools目录加入系统PATH环境变量。Windows操作步骤我在后面单独说这里先讲一个更省事的方案使用社区里流传很广的“15 seconds ADB Installer”这类一键安装脚本它会自动帮你完成环境变量配置和驱动安装对小白非常友好。我早期入门用的就是这个体验很稳省下了不少折腾时间。1.2 环境变量配置详解Windows / macOS / Linux很多人的ADB明明装好了却报“adb不是内部或外部命令”八成是环境变量没配好。这里以Windows 11为例完整走一遍按Win R输入sysdm.cpl打开系统属性切换到“高级”选项卡点击“环境变量”。在“系统变量”里找到Path这一项双击打开点击“新建”填入你platform-tools的实际路径比如D:\platform-tools。一路点“确定”保存然后重新打开一个cmd窗口输入adb version验证。macOS和Linux用户就简单很多了。macOS可以编辑~/.zshrc加一行export PATH$PATH:/Users/你的用户名/platform-tools保存后执行source ~/.zshrc生效。Linux以Ubuntu为例可以直接通过官方源安装sudo apt install adb fastboot或者手动下载platform-tools后同样配置PATH原理完全一致。驱动问题主要集中在Windows平台。很多用户手机插上电脑后设备管理器里出现带黄色感叹号的“ADB Interface”说明驱动不对。遇到这种情况先到手机官网下载对应品牌USB驱动或者直接使用通用ADB驱动。有一点值得强调部分国产手机默认只开启充电模式插线后需要在手机通知栏把USB连接方式切换为“传输文件MTP”模式否则ADB可能识别不到设备。这个问题和驱动无关是很多新手第一次插线被告知device not found的真正原因。2. 设备连接与授权机制深度解析2.1 adb devices不显示设备先看这五个位置adb devices是整个ADB体系里最核心的起点命令。它负责列出当前电脑识别的所有安卓设备包括USB连接和无线连接两种形式。正常情况下输出是这样的List of devices attached XXXXXXXXXXXX device注意第一列是设备序列号第二列是连接状态。状态有offline、unauthorized、device三种offline表示设备连上了但通信异常unauthorized是设备上出现了授权弹窗但你还没点“允许”device才是真正的就绪状态。热词里提到的“honor 90手机magicos 8.0android14连接电脑时adb devices为什么不显示设备”这类问题我处理过很多次排查顺序基本固定第一步检查USB线是不是只能充电不能传数据。很多第三方线材省掉了数据线芯ADB一定识别不了。换原装线是最快的验证方式。第二步检查开发者选项里的“USB调试”是否开启。MagicOS、MIUI、ColorOS这些国产系统默认隐藏开发者选项需要连续点击版本号7次才能解锁。第三步检查USB连接模式。插线后从通知栏把USB用途从“仅充电”改为“传输文件”部分系统翻译为MTP或File Transfer。第四步检查电脑端驱动。设备管理器里如果看到“Android Composite ADB Interface”且没有感叹号说明正常。第五步重启ADB服务。输入adb kill-server再输入adb start-server让服务重新枚举设备。还有一种情况是设备列表里能看到序列号但状态是offline大多数时候是因为系统弹窗授权时手滑点错了或者电脑端ADB版本过旧。先重启ADB服务还不行就重启手机基本都能解决。2.2 处理unauthorized授权问题与ADB Key机制热词里有一类经典报错adb.exe: device unauthorized. Please check the confirmation dialog on your device.还有这种adb: failed to install xxx.apk: failure [device unauthorized]以及更少见的adb.exe: device unauthorized. this adb servers $adb_vendor_keys is not set先说原理。ADB通信不是裸连的第一次连接时电脑端会生成一对RSA密钥然后把自己的公钥发送给手机。手机屏幕上弹出的“是否允许USB调试”对话框就是为了让你确认这台电脑的指纹信息。点“允许”之后手机就把电脑的公钥存进/data/misc/adb/adb_keys。下次再连就不需要再次弹窗了。如果授权弹窗没出现或者点了“允许”以后还是unauthorized原因通常有三个手机端误选了“一律允许使用这台计算机进行调试”旁边的“仅充电模式下允许”或者根本没弹出提示框。电脑端~/.android/adbkey文件有问题可能被安全软件清理过或者被旧工具覆盖过。Windows在C:\Users\用户名\.android\目录下macOS/Linux在~/.android/下。解决方法是删除或改名这个目录重新生成密钥手机端也要在开发者选项里撤销USB调试授权从头来过。多用户模式下手机当前登录的用户不是授权时的用户需要切换回原用户或重新授权。顺手提一句adb server的$adb_vendor_keys问题这个主要出现在某些定制系统或容器环境里通常是因为ADB server没有找到或没有使用默认的密钥目录。解决办法比较简单先把ANDROID_SDK_HOME之类的环境变量清掉再删除当前用户目录下的.android文件夹重新生成确保PATH里的adb版本和你实际使用的版本一致避免多个版本的adb混用导致密钥文件错乱。2.3 无线ADB与fastboot连接技巧有线连接虽然稳定但总有线材不够长、接口松动、手机充电口被占用这类尴尬场景。Android 11及以上系统原生支持无线调试前提是手机和电脑处于同一局域网。先在开发者选项里打开“无线调试”然后用配对码配对# 第一步使用配对码配对端口和配对码在无线调试界面查看 adb pair 192.168.1.100:39875 # 第二步连接设备端口也会显示在无线调试界面 adb connect 192.168.1.100:39875配对成功后以后只要IP和端口不变可以直接执行adb connect连接不需要再重复配对。这个方案在Quest 3这类头显设备上尤其常用因为头显戴着的时候很难插线无线ADB几乎是唯一高效的选择。如果你用的是Android 10或更低版本也可以试试adb tcpip 5555这条老命令它会让设备在5555端口开放ADB。不过这种模式重启后失效而且安全性弱一些建议仅在可控的网络环境里用。再单独说说fastboot和ADB的关系。fastboot是独立于ADB的另一套工具主要工作在bootloader层面用来刷入分区、解锁Bootloader等。很多用户会遇到“fastboot连不上”的问题原因通常是没有安装fastboot驱动。Windows下设备管理器里会显示“Android Bootloader Interface”或未知设备需要手动安装Google USB Driver。手机没有真正进入fastboot模式。不同品牌进入方式不一样小米红米一般是关机后同时按住音量下电源键华为/荣耀一般是长按音量下电源键再插线。线材或USB接口供电不足。fastboot模式对数据线质量更敏感建议插主机后置USB口。红米K50那个热词“红米k50fastboot连adb”其实表达的就是fastboot模式下设备无法被ADB识别这属于正常现象——fastboot模式下ADB设备列表里当然看不到你该用fastboot devices而不是adb devices。这两个工具虽然打包在一起但应用场景完全不同。3. 应用管理与系统配置实战命令3.1 安装、卸载、降级应用的完整指南应用安装是ADB最常用的场景之一。命令格式很简单# 安装应用-r表示覆盖安装保留数据 adb install -r app.apk # 安装应用到指定用户双开/多用户场景 adb install --user 0 app.apk但实际使用中最常碰到的报错是adb: failed to install yyyx.apk: failure [install_failed_update_incompatible]这个报错翻译过来就是“签名不一致导致更新失败”。旧版本应用是A签名你现在装的APK是B签名系统不允许跨签名覆盖安装。解决办法是先卸载旧版本再安装新版adb uninstall 包名注意这样会清空应用数据。如果你想保留数据可以考虑用adb backup先备份不过高版本Android对备份的限制越来越多现实一点的做法就是接受数据丢失。卸载命令同样简洁# 保留数据卸载downgrade场景常用 adb uninstall -k 包名 # 彻底卸载 adb uninstall 包名说到降级热词里有一条“微信登录历史版本adb降级”。微信这类大应用每次更新都可能引入你不喜欢的改动想退回老版本但直接在手机上安装旧包会提示“安装失败应用已存在”。ADB降级安装的处理方式是adb install -d -r 微信历史版本.apk-d参数允许降级安装。不过要注意Android 14及以上对降级安装的审核更严格某些系统应用或特殊标记的应用可能仍然拒绝降级需要先卸载再装。还有一点实战提醒微信降级后可能会被服务端限制登录或者提示版本过低所以降级前先想清楚。热词里还有“adb禁用应用联网”和“华为adb禁用大全”。禁用系统应用是ADB的隐藏玩法之一国产手机厂商预装了一堆你用不到但无法在设置里停用的应用。ADB可以帮你处理# 禁用应用相当于停用不会删除数据 adb shell pm disable-user --user 0 包名 # 启用应用 adb shell pm enable 包名 # 卸载预装应用高版本系统device owner限制较多谨慎使用 adb shell pm uninstall --user 0 包名--user 0表示只对主用户生效不会影响多用户或工作空间。这种做法比root卸载安全得多因为应用文件还在系统分区里恢复出厂设置后一切如初你只是把入口隐藏掉了。需要说明的是禁用系统应用前最好先确认包名避免误伤系统核心组件。查包名的命令下面会提到。3.2 快速获取包名与Activity信息的三个命令玩ADB避不开查包名这个操作。你要卸载一个应用要启动一个应用要查看某个应用是不是在后台运行都得先知道它的包名和Activity名称。# 查看当前前台Activity安卓10有效 adb shell dumpsys activity activities | grep -E mResumedActivity|topResumedActivity # 列出设备上所有已安装的应用包名 adb shell pm list packages # 列出包含指定关键字的包名比如微信 adb shell pm list packages | grep tencent # 查看应用的所有Activity非常实用 adb shell dumpsys package 包名 | grep -E Activity Resolver|android.intent.action.MAIN -A 5pm list packages输出的内容可能很长配合grep过滤是基本操作。如果你在Windows的cmd里不想折腾grep可以用findstr替代。启动特定Activity的命令也经常用到adb shell am start -n com.tencent.mm/.ui.LauncherUI这条命令的格式是包名/Activity名Activity名可以是完整路径也可以是省去包名的短路径。am start还能携带参数后面在模拟操作部分会举例说明。3.3 屏幕截图与录屏不只是按一下快门截图命令人人会写# 截图保存到手机 adb shell screencap -p /sdcard/screen.png # 拉到电脑 adb pull /sdcard/screen.png D:\screen.png很多新人不知道的是screencap还有两个隐藏参数值得用。--display可以指定显示器ID在折叠屏或多屏设备上可以截取指定屏幕--size可以限制输出尺寸适合快速生成缩略图。录屏命令则更丰富一些# 录屏默认格式是MP4分辨率默认是屏幕实际分辨率 adb shell screenrecord /sdcard/demo.mp4 # 限制时长默认180秒 adb shell screenrecord --time-limit 30 /sdcard/demo.mp4 # 指定码率默认4Mbps adb shell screenrecord --bit-rate 8M /sdcard/demo.mp4 # 录像过程中显示触摸操作 adb shell screenrecord --show-touches /sdcard/demo.mp4录屏帧率默认是60fps但部分设备在电量低或发热严重时可能会自动掉帧。如果你录制的目标是演示操作流程加上--show-touches参数会非常有用观众能清晰看到手指点击位置。这里有实际经验screenrecord录制的视频没有声音这是设计如此不是出了故障。想要录屏带内部音频需要依赖系统级录屏API或第三方应用。4. logcat日志抓取与应用调试实战4.1 logcat基础用法与缓冲区机制logcat是安卓开发调试的倚天剑。不管是应用崩溃、ANR、网络请求失败还是系统服务的异常行为都能在logcat里找到线索。命令本身不复杂但很多人第一次用时输出的内容又多又乱完全不知道从哪里看起。先理解一个概念logcat的日志有缓冲区之分。常见的缓冲区有main应用层日志、system系统服务日志、events事件日志、crash崩溃日志和kernel内核日志部分设备需要root才能读取。用-b参数指定缓冲区# 查看所有缓冲区默认是main、system、crash adb logcat # 只看崩溃日志 adb logcat -b crash # 看内核日志 adb logcat -b kernel日志级别从低到高是VVerbose、DDebug、IInfo、WWarning、EError、FFatal。配合*:级别语法可以精确控制输出范围# 只显示W级别及以上的日志 adb logcat *:W # 只看某个应用标签的Error级别日志 adb logcat -s 你的应用TAG:E # 过滤包含特定关键字的日志 adb logcat | grep AndroidRuntime-s参数的含义是“silent else”也就是除了你指定的tag和级别之外全部静默。这个参数对于调试某个具体模块非常高效。4.2 抓取崩溃日志与ANR日志的标准作业流程实战中抓崩溃日志有一套固定打法。先把日志清空然后复现崩溃最后拉取日志# 第一步清空旧日志 adb logcat -c # 第二步开始抓取并传文件复现问题后按CtrlC结束 adb logcat crash.log # 第三步直接过滤崩溃栈 adb logcat -b crash -d crash_full.log-d参数表示dump抓完当前缓冲区内容后立即退出不会有阻塞等待。第一次抓崩溃日志的新手容易犯的错是忘了加-c导致日志里混入了大量和本次崩溃无关的历史记录排查效率大打折扣。应用进程崩溃的标志性日志通常长这样FATAL EXCEPTION: main Process: com.example.demo, PID: 12345 java.lang.NullPointerException: Attempt to invoke virtual method ...看到FATAL EXCEPTION直接把后面的堆栈信息贴给开发同学基本就够了。ANRApplication Not Responding则通常出现在/data/anr/目录下普通权限可能读不出来这时候抓取logcat里包含ANR in关键字的日志也能定位到主要线索。热词里还有一条“adb logcat 抓取日志”其实这里要给大家一个忠告logcat默认的缓冲区大小有限main和system一般只有256KB到1MB崩溃日志太多会直接覆盖旧内容。如果你要抓长时间运行的日志最好加一句话让logcat持续输出到文件# 持续记录到电脑本地CtrlC结束 adb logcat D:\longterm_logcat.log在Windows上如果看不到实时输出原因是cmd默认编码问题先执行chcp 65001切到UTF-8或者用adb logcat -v threadtime log.txt把时间戳格式里的中文去掉一般就正常了。5. 设备信息查询与系统设置动态调整5.1 分辨率、刷新率与屏幕相关命令热词里有好几条和屏幕相关包括“adb命令设置屏幕刷新率”“隐藏状态栏的adb命令”。这些属于“系统动态配置”类命令都不需要root只需要ADB权限即可。先查看屏幕信息# 获取当前分辨率 adb shell wm size # 获取屏幕密度 adb shell wm density # 获取刷新率 adb shell dumpsys display | grep -E mDisplayInfo|refreshRate修改分辨率在个别游戏和应用上有实际用途。比如某些应用对小屏设备兼容不佳可以临时把分辨率改成更高值# 修改分辨率 adb shell wm size 1080x2400 # 修改屏幕密度 adb shell wm density 440 # 恢复默认 adb shell wm size reset adb shell wm density reset注意修改density会直接影响系统UI的显示大小改得太高或太低可能导致桌面图标错乱、布局变形。恢复默认值也不是特别可靠稳妥起见改之前先记下原始数值。设置刷新率的命令相对复杂一些我实测过在小米和三星设备上有效# 查询设备支持的所有刷新率 adb shell dumpsys display | grep -E supportedModes|refreshRate # 动态切换到120Hz部分设备支持 adb shell settings put system peak_refresh_rate 120 adb shell settings put system min_refresh_rate 120注意settings put system并不是所有设备都生效有些厂商把刷新率写死在SurfaceFlinger或显示配置里就需要改adb shell settings put global以配合。实际操作中如果这两条不行可以试试adb shell settings put global display_mode 15.2 隐藏状态栏、导航栏与沉浸模式隐藏状态栏和导航栏是很多玩机用户关心的话题。ADB可以直接切换系统UI模式# 隐藏状态栏 adb shell settings put global policy_control immersive.status* # 隐藏导航栏 adb shell settings put global policy_control immersive.navigation* # 同时隐藏 adb shell settings put global policy_control immersive.full* # 恢复显示 adb shell settings put global policy_control null*代表所有应用生效也可以指定具体包名比如immersive.statuscom.tencent.mm就只对微信隐藏状态栏。有的应用自己在代码里已经做了沉浸式这条命令就不再有额外效果。5.3 模拟点击、滑动与文本输入如果你在做自动化测试或者想帮长辈完成一些重复操作ADB的模拟输入命令非常实用# 模拟点击坐标点坐标系默认是竖屏逻辑分辨率 adb shell input tap 500 800 # 模拟滑动 adb shell input swipe 500 1500 500 500 # 模拟长按 adb shell input swipe 500 800 500 800 2000 # 输入文本中文可能不支持 adb shell input text hello # 模拟按键Home键、返回键等 adb shell input keyevent KEYCODE_HOME adb shell input keyevent KEYCODE_BACK adb shell input keyevent KEYCODE_APP_SWITCH关键事件码还有一些常用的# 电源键 adb shell input keyevent KEYCODE_POWER # 音量加/减 adb shell input keyevent KEYCODE_VOLUME_UP adb shell input keyevent KEYCODE_VOLUME_DOWN # 菜单键 adb shell input keyevent KEYCODE_MENU # 最近的飞行模式开关部分设备可用 # 截图 adb shell input keyevent KEYCODE_SYSRQ模拟输入的坐标是逻辑分辨率坐标也就是wm size输出的值。如果你的设备scale了分辨率坐标照样按逻辑坐标来不用换算物理像素。6. 文件双向传输工具push与pull的进阶用法ADB的文件传输命令看着简单实际坑不少。基本用法# 推送到手机 adb push D:\photo.jpg /sdcard/Pictures/ # 从手机拉取 adb pull /sdcard/Download/report.pdf D:\backup\第一坑路径里的斜杠方向。Windows电脑端路径用反斜杠没问题但手机端是Linux系统必须用正斜杠。第二坑权限。往/sdcard/下推送一般没问题但往/data/目录推送普通应用的数据目录时需要root或run-as。想备份某个应用的数据可以直接用# 备份需要应用允许备份 adb backup -apk -shared 包名 -f app_backup.ab # 批量拉取整个目录到电脑 adb pull /sdcard/DCIM/ D:\dcim_backup\adb pull在拉取大量小文件时速度较慢可以先在手机上打包再拉取效率高得多# 先压缩 adb shell tar -czf /sdcard/files.tar.gz /sdcard/DCIM/ # 再拉取 adb pull /sdcard/files.tar.gz D:\第三坑文件路径包含空格。不管是电脑端还是手机端路径带空格时记得用双引号包起来。7. 特殊设备场景实战电视、车载与无线头显7.1 电视/盒子开启ADB并远程调试热词里好几条都指向电视设备“老款创维如何打开adb”“电视机永久打开adb”“华为电视开启adb”。电视开启ADB的方法和手机大同小异但有几个细节区别。大部分安卓电视/盒子在“设置-关于”里连按版本号可以打开开发者选项然后就可以开启ADB调试。但这里有两个坑一是许多电视的ADB开关是一次性的系统升级后会自己关掉二是电视没有触摸屏无法弹出授权对话框所以大多数电视固件默认信任ADB连接不需要授权或者需要先在电视上用遥控器点击允许弹窗。对于“永久打开ADB”的需求现实中并没有真正意义上的永久方案因为厂商省电策略和固件升级都会重置开关。社区常见的做法是通过系统设置分区修改或Magisk模块实现但这属于定制系统范畴不同电视方案差异极大没有通用教程可以覆盖。这里能提供的通用建议是一旦开启ADB后先用adb connect连接电视并记录序列号然后用有线或无线方式做一次完整的连接测试确认每次开机后同一IP和端口还能连上就说明维持得不错。“开心电视助手如何永久开启adb”这类工具本质上是一个包装了ADB命令的Windows图形界面它并没有比原始命令多做太多事情。核心操作逻辑依然是连接设备→修改设置项→验证连接。7.2 车载ADB与特殊Android环境车载ADB在车机应用开发、车机桌面替换、导航应用调试等场景中使用频率很高。车机一般也是安卓系统但很多车机不带屏幕虚拟按键也不方便点USB调试授权弹窗。最稳的调试方案是使用无线ADB前提是车机连上了和电脑同一个Wi-Fi/热点。连接步骤和手机无线ADB完全一致只是要注意车机网络策略可能会自动切换网络导致IP变化。建议固定在车机上设置静态IP或者用车机的热点反向让电脑连热点这样车机作为热点时IP相对稳定。7.3 Quest等无线头显设备的ADB玩法Quest 3这类头显本质上是安卓设备但你没有一块可以直接操作的触摸屏USB-C接口一般还被充电占用。无线ADB是头显调试的主流方式。先用USB连接头显开启无线调试之后拔线操作参考前面2.3小节的adb pair和adb connect命令即可。需要注意头显的ADB端口在重启后会变化每次重启后需要重新查看无线调试界面里的端口号。8. ADB常见问题排查与实用速查表8.1 高频故障的排查思路我把日常工作中最常见的故障统一列了个表遇到问题时先对照排查省得浪费时间查文档。现象可能原因快速解决adb devices显示unauthorized未授权电脑 / 密钥失效手机撤销USB调试授权后重新插线删除电脑端.android目录重新生成adb devices显示offlineADB服务异常 / 线材问题adb kill-server后重启服务换线测试设备完全识别不到USB模式仅充电 / 驱动缺失切换USB模式为传输文件安装品牌USB驱动fastboot设备不识别fastboot驱动缺失 / 未进入fastboot安装Google USB Driver确认设备状态安装APK报install_failed_update_incompatible签名不一致卸载旧版再安装或使用adb install -r无效时改用卸载安装APK报INSTALL_FAILED_USER_RESTRICTEDMIUI/ColorOS限制了USB安装在开发者选项里打开“USB安装”登录账号同意协议push文件提示Permission denied目标目录无权限改用/sdcard/路径或root权限操作logcat输出乱码Windows编码问题chcp 65001切换UTF-8编码adb connect连接超时网络策略 / 端口变化确认设备IP端口重启无线调试这些情况里安装APK报USER_RESTRICTED在我记忆中遇到得最频繁尤其是小米和OPPO设备。开发者选项里明明开了“USB安装”还是被拦就是因为没有登录系统账号或未同意那个“需要网络验证”的协议。8.2 查Verification失败与SELinux限制部分设备安装APK还会遇到adb: failed to install x.apk: failure [install_failed_verification_failure]这条报错说明应用包在系统完整性校验阶段就没过。可能原因是APK本身损坏也可能是APK里包含系统不允许的权限组合或签名格式不符合要求。常见的处理方法是用adb install --no-streaming禁用流式安装或者检查APK是不是在某次传输过程中损坏了。有些命令在高版本Android上执行失败则与SELinux有关。ADB shell的上下文是u:r:shell:s0写入某些受保护目录时会触发SELinux拒绝。遇到Permission denied但明明有权限的情况先怀疑SELinux再考虑文件系统的挂载方式。8.3 常用命令快速检索表下面这张表覆盖了我日常使用频率最高的命令适合打印出来贴在工位旁边命令用途adb devices列出连接设备adb kill-server/adb start-server重启ADB服务adb install -r app.apk覆盖安装应用adb uninstall 包名卸载应用adb shell pm list packages列出所有包名adb shell dumpsys activity activities查看当前栈信息adb shell wm size/wm density查看分辨率/屏幕密度adb shell screencap -p /sdcard/s.png截图adb shell screenrecord /sdcard/v.mp4录屏adb logcat -b crash -d导出崩溃日志adb push/adb pull文件传输adb shell input tap x y模拟点击adb shell input keyevent KEYCODE_HOME模拟按键adb connect ip:port无线连接设备adb reverse tcp:8080 tcp:8080反向端口转发adb forward tcp:8080 tcp:8080正向端口转发adb reverse这条命令值得单独提一下。它能把手机上的端口映射到电脑上在调试微信登录、OAuth回调这类需要本机服务的应用时非常好用。比如电脑上起了个8080端口的Web服务执行adb reverse tcp:8080 tcp:8080后手机访问localhost:8080就能直接命中电脑上的服务。8.4 关于ADB动态密码计算器和临时root热词列表里出现了“adb动态密码计算器”和“用adb助手如何给安卓设备临时root”这类词这里多说两句算是给大家提个醒。部分带有严格安全管理策略的安卓设备多见于企业定制设备或特殊行业设备在启用ADB调试时会要求输入动态密码。这个动态密码一般是设备根据当前时间、设备序列号和一种内部算法生成的计算器工具本质上就是算法的本地实现。不同品牌的算法完全不一样不存在一个通用计算器能覆盖所有设备网上能找到的基本都是针对特定型号定制的。至于“临时root”必须强调一点ADB本身并不提供root能力。ADB shell默认的uid是2000shell用户不是root。想要获得root权限要么通过系统的root授权机制比如Magisk、KernelSU要么利用系统漏洞提权后者早已不是常规操作而且风险极高。如果你只是想在系统目录做些小改动可以试试adb root但这条命令只对eng版或userdebug版系统固件有效正式版手机大概率会提示“adbd cannot run as root in production builds”。这是厂商的安全限制不是命令写错了遇到这种情况别钻牛角尖。9. ADB调试中的小技巧与我的真实体会写到这里我再分享几个实际工作中让我少走弯路的小经验。第一永远保持ADB工具为最新版。老版本ADB对Android 12以上设备的一些新特性支持不完整尤其是分区存储和无线调试相关功能。更新方式很简单定期去官方Platform-Tools页面下载覆盖即可不需要卸载旧版。判断版本太老的信号很简单连接Android 14设备时提示“adb server version mismatch”或者执行某些命令时提示“protocol fault”。第二把adb的常用命令封装成小脚本或函数能明显提升日常效率。我自己在Windows上写过一个pull.sh风格的批处理脚本捕获设备名称、日期后自动拉取截图并放到当天日期的文件夹里省掉了每次手动敲路径的时间。在macOS上我用的.zshrc里也放了好几个adb相关的aliasag代表adb logcat -b crash -dasc代表adb shell screencap -p /sdcard/s.png adb pull /sdcard/s.png。这种习惯的养成比记住所有命令更值钱。第三多设备同时调试时给每个设备都加一个唯一的名称减少误操作。通过adb -s 设备序列号可以指定设备操作序列号可以在adb devices输出里看到。我甚至会在贴纸上写上设备序列号贴在手机背面方便快速识别。第四关于线上问题排查我个人的体会是抓日志永远比猜原因有效。碰到应用崩溃或者性能问题不要急着看代码先用logcat抓一遍很多问题在日志里已经写得很直白了不需要把代码翻个底朝天。特别是-b events缓冲区里有一些系统级的事件记录比如窗口焦点变化、Activity启动、电量变化等对定位某些偶发问题有奇效。第五最后再分享一个小技巧如果你需要频繁连接同一台无线设备可以把连接命令写成一个带参数的小脚本接收IP和端口两个参数。比如# adb_wifi.sh adb pair $1 $2 adb connect $1 $2这样每次只要输入IP和端口就能完成连接省去了记忆一堆命令和参数的负担。考虑到很多人的ADB使用场景是“偶尔要用一次但每次都要查文档”这类精简流程的小工具可能比背下整本命令手册更实用。你可以把这本速查手册当作一个起点按自己的使用习惯往里面补充命令和注释。比如针对你的开发框架、你的测试设备型号、你的车机或电视平台做一份专属的“ADB命令词典”。我在实际维护过程中发现很多重复性操作一旦整理成文档效率提升是肉眼可见的。拿起你的数据线连上设备开始折腾吧。
返回列表