
1. ADB到底是个什么东西Client-Server-Daemon架构与用武之地先说个我自己的经历。十年前我第一次听到ADB这词觉得它是专业搞机的极客才会碰的东西。五年前开始做App测试觉得ADB是开发者调试的专属工具。直到这几年帮家里老人清理手机、给电视装应用、帮朋友抓崩溃日志我才发现一个事实ADB从来不是开发者的专利它更像是安卓设备上的一扇后门——不过是一扇官方给你留的、正大光明的后门。ADB全称是Android Debug Bridge翻译过来是“安卓调试桥”。桥这个字用得非常精准它就是把你的电脑和安卓设备连起来的一座桥。这座桥有三根桥墩第一根是你电脑上的命令行工具也就是adb这个程序叫Client第二根是电脑后台常驻的一个服务叫adb server负责管理和设备之间的通信第三根是你手机里的一个常驻后台进程叫adbd它从你打开USB调试那一刻起就一直在手机里待命。你在电脑上敲一句adb命令Client把它发给ServerServer再通过USB线或者Wi-Fi通道传给手机里的adbdadbd拿到命令后在系统内部执行再把结果原路返回。这座桥解决了什么问题我打个比方。绝大多数App的操作都在系统给你圈好的“应用沙盒”里运行你点按钮、划屏幕系统只允许你在框架内干活。但ADB不一样它站在系统层面说话所以它能干很多GUI界面里根本找不到入口的事情。举个例子某个App卡死了全屏ANR你连点屏幕都没反应这时候只要电脑上敲一句adb shell am force-stop 包名系统直接从底层把这个进程干掉比在设置里找“强制停止”快得多。再比如手机厂商预装了一堆你永远用不到的App设置里连停用按钮都不给你但pm disable-user命令能让他们彻底消失。这些东西UI做不到因为厂商不想让你做到而ADB这条通道是Android系统自带的厂商想堵也堵不干净。更关键的是ADB不受“设备形态”限制。只要底层是Android不管是手机、平板、电视盒子、车机还是模拟器ADB都能连。这就是为什么你能看到有人用ADB去折腾老款创维电视也有人在车载屏幕上敲adb命令还有人专门研究夜神模拟器怎么走adb模式——大家用的都是同一套工具只是应用场景不同罢了。这篇文章我会从零开始讲先教你用5分钟把ADB跑起来再给你一份高频命令手册然后重点拆解几个热搜里大家最关心的问题——用logcat抓日志、冻结卸载预装应用、调屏幕刷新率、解决unauthorized授权失败。全部基于我自己的实测经验踩过的坑我会专门标出来。不管你是手机玩机党、测试工程师还是单纯想把家里电视和手机搞清爽的普通用户都能照着操作。2. 把ADB装好下载、驱动、环境变量一条龙2.1 下载渠道的取舍ADB本体是Android SDK里的一个组件叫platform-tools。官方渠道就是Google的Android开发者网站直接下载platform-tools压缩包解压就能用不要安装不是安装程序。但国内很多人的实际情况是打开官方网址太麻烦或者根本打不开。所以社区里流传的“15 seconds adb installer”这类一键安装包也很流行。它的原理其实很简单把platform-tools解压到你电脑上同时自动帮你把系统环境变量配上顺便帮你扫描安装手机USB驱动。对于新手来说这个确实省事五分钟就搞定。我的建议是区分场景如果你是临时用一下下载一个整合版adb工具包完全够用如果你准备长期搞调试、抓日志、写脚本那还是建议用官方platform-tools因为整合包版本可能滞后某些新机型需要新版ADB才能正确识别。下载完压缩包后先找一个固定位置解压比如D:\platform-tools。注意三件事路径里不要带中文避免某些工具解析路径出问题路径里不要带空格这个在之后配置环境变量和写批处理脚本时会难受死你第三解压出来要能看到adb.exe这个文件如果只看到一个压缩包说明还没解压。2.2 Windows环境变量为什么必须配这一步是新手最容易跳过、也最容易出问题的环节。很多人解压完直接双击adb.exe发现弹了个黑窗一闪而过就以为工具坏了。其实不是坏了是adb.exe这种命令行工具必须有参数才有意义双击它本身就等于白开。正确的做法是配置环境变量这样才能在任意目录下直接敲adb命令。如果你不配置每次都要先cd D:\platform-tools才能用adb更麻烦的是你以后写的任何脚本、批处理都没法调用adb因为系统根本找不到这个程序。配置步骤很简单右键“此电脑” → 属性 → 高级系统设置 → 环境变量 → 在“系统变量”里找到Path → 编辑 → 新建 → 填入你解压的目录比如D:\platform-tools→ 一路确定。配完之后必须重新打开一个CMD窗口才生效旧窗口不认新环境变量这个细节很多人栽过。然后验证一下WinR输入cmd回车在命令行里敲adb version如果打印出一串版本号恭喜你环境配好了。如果提示“不是内部或外部命令”说明Path没配对或者你还在用之前打开的旧窗口。2.3 手机端需要做的三件事ADB是双向的光电脑上装好没用手机也得配合。按顺序来打开开发者选项。路径一般都在“设置 → 关于手机”找到“版本号”这一栏连续点击7次系统会提示“你现在处于开发者模式”。不同品牌的入口名称不一样小米/红米是连续点“MIUI版本号”或“HyperOS版本号”华为/荣耀是点“HarmonyOS版本号”vivo是点“软件版本号”三星是点“编译编号”。原理都一样版本号连击7次。在开发者选项里打开“USB调试”。这一步通常还会弹一个警告说“允许USB调试会有什么风险”直接确认就行。部分国产手机还有二级开关比如小米的“USB调试安全设置”、vivo的“仅使用安装调试应用”之类如果发现连不上回来看一眼有没有这种隐藏开关。用数据线把手机连到电脑上手机会弹窗询问“是否允许USB调试”勾选“始终允许”点确定。这里有一个特别关键的坑一定要用原装数据线或者明确标注支持数据传输的线。现在很多Type-C线是纯充电线里面没有数据线芯插上去能充电但adb devices永远看不到设备。这个坑我见得太多了排查半天最后换根线就好了。2.4 驱动装不上怎么办Windows第一次连接安卓手机一般会自动安装驱动但不是所有机型都顺利。如果你插上手机后电脑右下角提示“设备驱动安装失败”或者adb devices一直空白多半就是驱动问题。解决思路是先装手机厂商的官方USB驱动。最省事的方式是装一次手机厂商的PC套件比如小米的“小米助手”、华为的“手机助手”装完驱动后可以卸掉套件本身驱动会保留。还有一个通用方案是装“Universal Adb Driver”这是一个第三方聚合驱动对大部分机型都有效很多玩机教程里都会提到。装完驱动后可以在设备管理器里确认插上手机看“便携设备”或者“Android Device”下面有没有正常识别的设备。如果出现黄色感叹号右键 → 更新驱动程序 → 手动选择驱动路径指向你解压的ADB文件夹让Windows手动搜索一下。2.5 macOS和Linux用户怎么办macOS上最简单的方式是用Homebrewbrew install android-platform-tools装完直接adb version验证。如果没有Homebrew也可以下官方platform-tools解压后把路径加到~/.zshrc里的PATH变量。Linux用户用包管理器就行Debian/Ubuntu执行sudo apt install adbFedora执行sudo dnf install adb。另外提醒一下用模拟器的朋友夜神、MuMu这些模拟器打开“设置”里的ADB调试模式后可以直接用模拟器自己安装目录下的adb.exe不一定非要在电脑上全局装一套。但是如果你要用adb connect 127.0.0.1:62001这种方式去连模拟器要注意模拟器默认端口不一样夜神是62001MuMu通常是7555具体端口以模拟器设置页显示的为准。3. 高频命令速查设备连接、安装卸载、文件与系统信息这一章是命令的“词典”但我会按照使用场景来讲而不是干巴巴地列命令。建议你先通读一遍知道有哪些命令存在然后用到的时候回来看。3.1 设备和连接状态最基础的三条命令adb devices adb kill-server adb start-serveradb devices用来查看当前有几台设备在线输出结果里设备状态有三种device表示正常连接unauthorized表示手机端未授权offline表示连接不稳定。看到device才能继续操作看到另外两种状态去我后面的第七章看排查方法。adb kill-server和adb start-server是重启ADB服务的组合拳。什么时候用比如连着连着突然adb devices什么都看不到了或者明明开了USB调试但电脑死活识别不了先adb kill-server再adb start-server很多时候就好了。原理是电脑端的adb server进程偶尔会卡死尤其是USB口切换、手机重启之后重启服务等于强制握手一次。无线连接的命令是adb connect IP:端口。这个在车机、电视、模拟器场景非常有用因为很多设备没法插数据线。具体步骤是设备上打开无线调试开发者选项里或者网络ADB然后在电脑上adb connect 192.168.1.100:5555。注意第一次连接时设备上大概率还是需要确认授权弹窗所以人得能摸到设备。3.2 安装与卸载install命令的隐藏参数日常安装一个APK最小化的命令是adb install D:\app.apk但实际使用中两个参数特别实用。-r表示覆盖安装并保留数据比如你要把1.2版本覆盖到1.1版本上直接adb install -r app.apk原App里的数据、登录状态都能保住。-d表示允许降级安装有些App你装了新版后悔了想退回旧版直接install旧版会报错说“版本号更低”加上-d就能装。卸载命令比想象中重要得多adb uninstall com.example.app这会把App连同用户数据一起删掉。但对于系统预装应用直接uninstall是不行的这里要先记住一个进阶版本adb uninstall --user 0 com.example.app--user 0的意思是只卸载当前用户0号用户空间里的应用系统分区里的APK文件不动。这样做的最大好处是“可逆”你以后随时可以用adb shell pm install-existing com.example.app把这个应用恢复回来。直接uninstall系统应用那就真的删了后悔都没地方哭。这个点我会在第五章展开讲。3.3 文件传输pull和pushadb pull /sdcard/Download/crash.log D:\ adb push D:\movie.mp4 /sdcard/Movies/pull是从手机里把文件拉回电脑push是从电脑往手机里推文件。这两个命令平时用不上但一旦用到就是救命的场景。举个例子某App崩溃后生成了一个异常日志存在App自己的私有目录里普通文件管理器根本看不到你也没有root权限怎么拿出来如果App把日志写在了/sdcard/Android/data/包名/这类共享存储路径下adb pull直接拉如果写在了/data/data/包名/这种私有目录非root是没权限的但部分机型在开启“USB调试”后对adb有额外授权也可以试试。另外安装APK不想先传到电脑再push到手机直接adb install就行push和install是两条路线别搞混。3.4 应用管理pm和am系列pm是Package Manager的缩写am是Activity Manager的缩写这两个是ADB里最值钱的命令族。查看手机上所有应用包名adb shell pm list packages这个命令输出很长你可以只查看用户自己安装的应用adb shell pm list packages -3只查看系统应用adb shell pm list packages -s按关键词过滤比如找某个视频App的包名adb shell pm list packages | findstr 关键词上面这个findstr是Windows CMD的写法在macOS或Linux终端里要写成grep 关键词。不过更稳妥的办法是把列表导出到电脑文件里再慢慢搜索adb shell pm list packages D:\packages.txt强制停止一个Appadb shell am force-stop com.example.app这条在对付“杀不死的流氓应用”时比你想的有用。有些App你从后台划掉了过几秒它自己又活了这就是它在系统里挂了推送唤醒服务。am force-stop是让系统把它彻底停掉连服务一起干掉。清除应用数据adb shell pm clear com.example.app这个命令的作用等同“设置 → 应用 → 清除数据”新机初始化某个App、或者某个App被搞乱了想重置这招比在手机上一层层点菜单快多了。启动某个Appadb shell am start -n com.example.app/.MainActivity不过你通常不需要背Activity路径adb shell monkey -p com.example.app 1也可以拉起应用monkey是系统自带的猴子压力测试工具参数-p指定包名最后一个数字是模拟操作次数填1就是只做一次启动操作。3.5 系统信息getprop和dumpsys查设备型号adb shell getprop ro.product.model查电池状态、温度、电压adb shell dumpsys battery查当前窗口在哪个Activityadb shell dumpsys activity activities查屏幕分辨率和密度adb shell wm size adb shell wm density这些命令看起来平平无奇但实际排查问题的时候特别好用。比如定位耗电异常dumpsys battery会告诉你电池的实时温度、电压、电量百分比如果温度高得不正常就能判断是不是硬件或某个App在疯狂吃CPU。再比如看一个App跳转逻辑对不对dumpsys activity activities输出里会带当前显示界面的Activity完整路径。3.6 修改系统设置settings命令settings命令可以在系统底层读改写各种参数用法是adb shell settings get 系统设置名 adb shell settings put 系统设置名 值比如我把屏幕超时时间改成30分钟adb shell settings put system screen_off_timeout 1800000这个命令族能做的事情非常多我第六章讲屏幕刷新率时还会用到。在这里你只需要建立印象很多藏在系统深层、UI里没有开关的配置项都可以通过settings put直接写进去。4. 用adb logcat抓日志从入门过滤到实战定位ANR4.1 日志系统的基本认知先说一个概念Android系统里的日志系统叫logcat。它是Android系统级的环形缓冲区所有系统服务、App打印的日志都会汇聚到这里。它的一大特点是不需要root权限只要ADB连上你就能看到整个设备在发生什么。很多普通用户觉得“我的手机出问题了但我不知道该怎么向别人描述”有了logcat就不一样了直接抓一段日志甩给开发者问题就讲清楚了大半。logcat的日志等级从低到高是VVerbose、DDebug、IInfo、WWarn、EError、FFatal。日常排查重点盯W和E以上的日志就够了。4.2 基础操作启动、停止、保存adb logcat执行后命令行会开始持续滚动输出日志期间你在手机上做任何操作对应的系统日志会实时刷出来。停止的话直接按CtrlC。但这样做有个问题日志是无限滚动的你到后面根本找不到前面发生了什么。所以实际抓日志的标准姿势是先保存到文件adb logcat -v threadtime D:\log.txt-v threadtime是日志格式它会显示每行日志的日期、时间、线程ID、优先级和TAG这是排查问题最常用的格式没有之一。保存到文件后你可以随便滚动、搜索、复制给别人。有个细节执行上面命令后最好先让手机停止操作几秒钟然后在手机上一一复现你遇到问题的操作每做一个动作日志就会源源不断写进文件里。最后结束后按CtrlC这样你拿到手的日志正好覆盖了整个出问题的过程。4.3 按标签和等级过滤日志量非常大全部看会疯。常见过滤有两种。按日志标签过滤比如只想看SystemServer这个系统服务的日志adb logcat -s SystemServer-s后面可以跟多个标签中间用空格分隔。按等级过滤只看错误以上的日志adb logcat *:E这个写法意思是所有标签*的日志只显示等级为E及以上的。同理*:W只显示Warning及以上的*:V显示全部。组合用法是既指定标签又指定等级比如adb logcat -s ActivityManager:E只显示ActivityManager标签下等级为E的日志。如果你知道某个App崩溃时的大致关键词也可以在管道里过滤。Windows CMD用findstrLinux/macOS用grepadb logcat -v threadtime D:\log.txt # 抓完后在文件里搜索 findstr FATAL D:\log.txt或者直接实时过滤adb logcat -v threadtime | findstr FATAL4.4 实战案例定位一个ANR问题这里演示一个真实场景。一个App点进去就卡死过一会儿手机提示“xxx应用无响应”。普通用户只能卸载重装但用ADB可以知道它到底卡在哪。操作流程先清空日志缓存这是很多人容易忽略的一步adb logcat -c开始记录到文件adb logcat -v threadtime D:\anr.log在手机上复现问题——打开那个App等待卡死和ANR弹窗。抓完按CtrlC打开日志文件搜索ANR in这个关键词。这是系统ActivityManager在应用无响应时打出的固定标记。你会看到类似这样的一行ActivityManager: ANR in com.example.app Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events...)这行日志告诉你三件事哪个应用ANR了、为什么ANR、系统分配的等待时间。沿着这行日志往下看会有一段主线程的调用栈信息通常是at com.example.app.xxx开头那就是卡住的具体位置。定位到代码行问题就真相大白了。还有一个额外的信息源/data/anr/traces.txt文件。系统在发生ANR时会把所有进程的调用栈快照写到这个文件里。普通用户不一定能直接访问但如果ADB有权限可以试试adb shell cat /data/anr/traces.txt D:\traces.txt如果你的设备没有权限读取会提示Permission denied那就只能靠logcat了。我用这个流程帮朋友抓过好几次问题每次都很快定位到是某个开源SDK在子线程里做了耗时操作导致主线程卡死。如果没有logcat这些信息靠肉眼根本看不出。4.5 清空缓冲区这个细节别偷懒最后强调一下每次抓日志前建议先执行adb logcat -c清空缓存。因为logcat的缓冲区是有限的系统一直往里面写新旧日志你不清空的话你的问题日志可能会被历史日志冲掉或者和历史日志混在一起很难分辨。清空之后再复现问题抓到的内容就非常纯净——全是关于这一次异常的记录。5. 冻结与卸载华为、vivo、小米用户的高频ADB需求5.1 为什么普通用户也会需要这个我发现搜索“华为adb禁用大全”“vivo adb精简列表”“红米K70能用adb冻结吗”这类关键词的用户大部分不是开发者而是被手机预装应用烦到了的普通用户。厂商在手机里塞了一堆用不上的应用自家商店、视频、新闻、游戏中心、云服务、各种名为“服务”实为广告推送的组件。这些应用在设置里连“停用”按钮都不给你但它们确实在后台耗电、占内存、弹推送通知。ADB在这种情况下就是合法合规的“拆除工具”。因为pm disable-user --user 0是Android系统自带的用户级应用停用机制不是把你手机root掉也不是修改系统文件属于系统允许的安全操作。它不动系统分区不影响OTA升级也不解BL锁所以相当安全。5.2 三个关键概念先分清很多人以为“冻结”就是“卸载”其实不一样。用ADB操作时有三种做法第一种是停用disable对应命令adb shell pm disable-user --user 0 包名。效果是桌面图标消失、App所有进程不再启动、后台广播不再触发但App数据完整保留。想恢复就执行adb shell pm enable 包名图标和数据都回来。第二种是卸载uninstall对应命令adb shell pm uninstall --user 0 包名。效果是当前用户空间里彻底移除这个App包括它的数据。但注意系统分区里那个APK文件还在所以恢复也不是不可能——执行adb shell pm install-existing 包名就能让它重新出现在系统里不过之前的数据是没了。第三种是直接卸载系统应用adb uninstall 包名不带--user 0这才是真正删除系统文件的操作。非root设备通常没权限执行授权了也可能失败。我强烈建议不要走这条路因为你无法确定系统有没有别的组件依赖它删了之后可能开不了机。所以对于普通用户我推荐的无脑方案是一律用pm disable-user --user 0不要碰卸载。5.3 如何给自己生成一份“精简名单”网络上一搜“xx手机adb精简列表”能找到一大堆现成的包名清单。我的建议是可以参考但不要照抄。因为同样一个包名在不同系统版本、不同地区固件里对应的功能可能完全不同。有些App你觉得没用但系统认为它是某个核心服务的前置条件禁了之后会导致设置闪退。正确做法是分四步走第一步导出所有包名adb shell pm list packages D:\packages.txt第二步往后看这个文件凡是你不认识的、看起来像广告/商店/推送相关的包名先在搜索引擎里搜一下确认它是什么。比如com.miui.systemAdSolution一看就知道是小米的广告组件禁它没什么犹豫。而com.android.phone是电话服务绝对别碰。第三步按“先禁自己确定没用的观察几天再禁下一批”的节奏操作。每禁一个就执行adb shell pm disable-user --user 0 包名第四步出问题马上恢复adb shell pm enable 包名如果你想知道现在有哪些应用是“已禁用”状态可以用adb shell pm list packages -d5.4 安全红线清单根据我的经验下面这些包名对应的功能是核心中的核心冻结或卸载会造成严重后果必须拉黑com.android.phone电话服务禁了直接不能拨号、不能注册网络com.android.settings设置禁了异常难恢复想恢复还得靠ADB命令com.android.systemui系统UI禁了状态栏、通知栏、下拉栏全没了com.android.launcher或com.miui.home桌面启动器禁了直接回不了桌面com.android.packageinstaller应用安装器禁了可能装不了任何新应用com.android.providers.contacts、com.android.providers.media等系统Provider禁了会导致应用读不到联系人、读不到媒体文件com.android.bluetooth蓝牙服务各种带telephony、network、input、storage字样的组件安全红线原则就是只禁你明确知道它是什么、且确定不需要的App。不确定的先查再动。宁可不精简也不要为了省一点资源把手机搞崩了。5.5 各品牌的实际差异小米/红米是目前ADB可玩性最高的品牌之一。MIUI和HyperOS时代的预装应用很多pm disable-user在大部分系统应用上都有效红米K70这类新机型同样可以操作。搜索“红米k70能用adb冻结吗”的答案就是能用pm disable-user --user 0就行但要注意别冻结桌面和设置。华为/荣耀的系统对ADB管控更严格。HarmonyOS对系统预装应用的移除管理有自己的一套限制部分应用即使有包名也无法disable会有Security exception之类的报错。能做的是有限度的禁用不用太指望能像小米那样逐个清零。vivo的部分机型在开发者选项的USB调试里加入了账号验证或动态密码机制这是厂商层面的安全策略。想用ADB之前得先完成系统要求的验证。这个不是绕过它而是按它提示来但确实让批量操作变麻烦了。说到底ADB冻结的成功率取决于厂商给系统留了多少“后门”。没有统一答案全在实测。我的建议是拿到新机先用pm list packages -d看看哪些已经被系统标记为已禁用心里有个底再决定要不要自己动手。6. 进阶玩法屏幕刷新率、联网权限、电视与车机ADB6.1 adb命令设置屏幕刷新率现在很多手机宣传120Hz、144Hz高刷但系统默认可能是自动切换、或者锁在60Hz省电。设置里没有直接改刷新率的方法但系统底层其实把刷新率参数暴露在了settings数据库里ADB能写。不同机型字段略有差异但最常见的是这两个adb shell settings put system min_refresh_rate 120 adb shell settings put system peak_refresh_rate 120有些机型还会用max_refresh_rate思路一样。设完之后有些手机立刻生效有些需要锁屏再解锁更顽固的需要重启。查当前值可以用adb shell settings get system min_refresh_rate adb shell settings get system peak_refresh_rate如果你发现settings get返回值是null说明当前系统版本没使用这类字段那就换一条思路用dumpsys看一下显示模块支持的刷新率集合adb shell dumpsys display输出里会列出设备支持的刷新率模式比如120.0Hz modeId之类的信息。然后可以尝试adb shell settings put global或者adb shell settings put secure里的对应字段。但说实话不同系统差异很大最稳妥的方式还是先查清楚再动手。这里有一个必须强调的坑显示刷新率有个硬件上限如果强行设置超过屏幕物理上限的值可能导致黑屏、花屏甚至系统UI崩溃。万一真的设置完黑屏了不要慌连上电脑执行adb shell settings put system min_refresh_rate 60 adb shell settings put system peak_refresh_rate 60然后强制重启手机adb reboot只要ADB还能连接就能救回来。如果因为黑屏导致USB调试授权失效那就麻烦一点但一般不至于因为授权信息重启后还在。6.2 adb禁止应用联网的真实边界搜索“adb禁止应用联网”的人很多是想彻底断掉某个App的联网能力让它不再推送广告、不再自动更新。Android原生机制里应用的联网权限是由PackageManager和NetworkPolicyManager来管理的。ADB层面有一个命令可以尝试adb shell appops set 包名 INTERNET deny这个命令思路是把它在AppOps权限表里的联网权限设为拒绝。实测下来在原生Android或者类原生系统上这招是有效的。但在国产定制系统上经常无效——因为厂商自己的权限管理框架接管了这部分能力标准AppOps命令会被无视。更可靠的做法是走系统自带的联网管控。小米在“应用信息 → 流量使用情况”里有禁网开关华为在“应用联网管理”里有“禁止联网”选项vivo也有类似的联网权限设置。这些才是厂商认可的控制路径。ADB适合的场景是你在设置里找不到这个App的联网开关才用appops试一把试完用下面命令确认有没有生效adb shell appops get 包名 INTERNET看到deny就是生效看到allow就是没管住。6.3 电视和车机场景的ADB连接方式很多电视的ADB被埋得很深。老款创维、索尼、小米电视打开ADB的通用思路是进入“设置 → 关于/本机信息”找到“版本号”连续点按7次开启开发者模式然后回去找“开发者选项”打开“ADB调试”或“USB调试”或“网络调试”。电视没有USB数据线这么方便大多数是靠Wi-Fi网络连接命令就是adb connect 电视的IP地址:5555电视的IP可以在“设置 → 网络”里查到。端口5555是Android网络ADB的默认端口但创维、索尼、小米电视有时候会改端口如果不通需要自己在电视的ADB设置页找有没有端口号信息。连上之后你可以adb install给它装App、adb shell pm disable-user禁用电视自带的视频推送或者adb shell settings put调整一些电视系统参数。车机ADB的玩法和电视类似。很多安卓车机本身支持ADB调试你可以连上车机的Wi-Fi热点或者在车机开发者选项里打开调试模式然后adb connect 车机IP:5555。但车机比电视风险更大因为车机系统涉及行车安全一旦误操作导致系统异常影响不是死机重启那么简单。我的建议是车机上最多做安装正规应用、查看日志这类轻量操作冻结禁用系统组件这类事尽量别碰。6.4 模拟器场景夜神、MuMu这些安卓模拟器本质就是一台“没有实体的安卓手机”。打开模拟器的设置 → 其他设置里面会有“ADB调试”选项默认是开启的。你在电脑上执行adb connect 127.0.0.1:62001就可以把模拟器当作一台普通ADB设备来用。注意adb devices里如果显示offline多半是模拟器自带的adb和你电脑上装的adb版本对不上。解决办法是统一要么直接用模拟器安装目录下的adb.exe要么把电脑上的adb替换成和模拟器匹配的版本。很多自动化脚本跑不起来最后发现就是卡在这个版本不一致的问题上。6.5 设置里改不了的先查后改进阶玩法的通用原则是不要盲改先查。adb shell settings list system adb shell settings list global adb shell settings list secure这三条命令会把系统设置数据库里所有你能看到的键值对列出来。你想改某个功能先搜一下有没有对应字段。比如想改通知栏快捷开关排布、改系统动画时长、改默认输入法这些在系统的settings数据库里大概率都有对应字段搜到之后照猫画虎往里面写值就行。我的经验是settings put能改的东西非常多但你一定要记录默认值。改之前先settings get存一份原文改坏了还能改回来。这个习惯帮我躲过了好几次黑屏和异常重启。7. adb unauthorized与常见连接故障的排查链路7.1 unauthorized8成原因在手机上的授权弹窗adb devices显示unauthorized是新手最常见的问题。原因很简单电脑和手机之间还没建立信任关系手机上有弹窗没被确认。第一反应拿起手机看屏幕。正常情况下插上数据线后手机会弹一个“是否允许USB调试”的对话框上面展示一个RSA密钥指纹下面有“取消”和“确定”两个按钮。你没点确定adb devices就会一直显示unauthorized。直接点确定就行最好勾上“始终允许”这样以后不用每次重连都点。如果你插上手机没有弹窗按顺序排查拔掉数据线重新插一次有时候是连接时序问题在“开发者选项”里关掉“USB调试”再重新打开强制系统重新弹授权框在“开发者选项”里找到“撤销USB调试授权”点掉之后重插数据线一切重来如果弹窗出现了但你点了“拒绝”或者误触了“取消”系统会默默记住这个电脑的RSA指纹下次再连它默认还是不信任。解决办法还是那个去“撤销USB调试授权”里把历史授权清掉再重插一次。7.2 PC端缓存密钥的问题电脑端也可能会出问题。ADB在第一次和手机握手时会生成一对RSA密钥存在电脑的用户目录/.android/文件夹下文件名是adbkey和adbkey.pub。如果这对密钥文件损坏了或者被安全软件清理了手机会认为这是一台“不认识的新电脑”仍然弹窗要求授权。这种情况的处理是关掉ADB服务删掉旧密钥让ADB重新生成再重连手机adb kill-server del C:\Users\你的用户名\.android\adbkey del C:\Users\你的用户名\.android\adbkey.pub adb start-server然后重新插手机你会发现手机上又弹了授权框点确定就行。macOS/Linux对应的路径是~/.android/adbkey用rm命令删除。7.3 offline状态和找不到设备的排查链路adb devices显示offline说明电脑和手机之间有过通信但链路不稳定。常见原因有三个数据线质量太差、USB口供电不足、手机切到了“仅充电”模式。排查步骤换一根确认支持数据传输的线这个问题绕不开别嫌麻烦换一个电脑上的USB口优先选主机后面的USB口前置USB口供电弱容易掉线下拉手机通知栏把USB连接方式从“仅充电”切到“传输文件/MTP”很多手机在“传输文件”模式下ADB才稳定关掉手机上的“USB调试”再打开让adbd重新启动adb devices输出完全空白的排查链路更靠前先确认驱动有没有装好设备管理器里有没有异常设备再确认数据线是数据线再确认手机开发者选项里的USB调试真的开了。这三个问题占了此场景的90%以上。7.4 模拟器显示unauthorized怎么处理用模拟器遇到的unauthorized和真机略有不同。模拟器一般不会有弹窗授权这一步所以如果adb devices显示unauthorized第一怀疑对象是adb版本不匹配。处理方式是用模拟器自己带的adb去操作。以夜神为例进入夜神安装目录的bin文件夹按住Shift右键选择“在此处打开PowerShell/命令窗口”然后执行./adb.exe connect 127.0.0.1:62001 ./adb.exe devices如果模拟器自带的adb能正常显示device而电脑上全局的adb不行那就统一替换adb版本别让两个adb打架。7.5 fastboot不是ADB别混为一谈搜索“红米K50 fastboot连adb”的人大概率是误把fastboot模式当成了ADB模式。这里必须说清楚fastboot是引导加载程序bootloader层面的刷机模式它和ADB不是一回事。ADB工作在系统已经启动之后是应用层的调试通道fastboot工作在操作系统启动之前是固件层的刷机/改分区通道。判定方法很简单手机进入fastboot模式后屏幕会显示一个大大的“FASTBOOT”字样这时候adb devices是看不到设备的要用fastboot devicesfastboot驱动的安装方式和ADB不一样Windows上常常需要单独装fastboot驱动。至于fastboot能干什么我的态度非常明确非必要不使用。fastboot模式下的操作都是直接写分区比如刷入recovery、刷入boot镜像一旦出错轻则系统起不来重则变砖。所以本文不展开讲fastboot的操作你只需要记住别把fastboot和ADB搞混看到fastboot字样先想清楚自己到底要干什么。7.6 最后的兜底方案一键重置连接排了半天还是连不上别急着放弃按这个顺序做一遍手机重启电脑重启没错电脑重启真的能解决很多驱动层面的临时故障换数据线换USB口adb kill-server后重新adb start-server删除电脑端~/.android/adbkey密钥文件重新授权在手机上“撤销USB调试授权”后重来这一套走完99%的连接问题都能解决。剩下的1%基本就是硬件层面的线材损坏或者电脑USB控制器故障换台电脑试试就知道。我在实际使用中发现ADB连接问题十有八九不是命令记错了而是物理层和数据层的握手没完成。所以排查时不要盯着命令本身死磕先看一眼数据线、看一眼授权弹窗、看一眼驱动管理器这三样没事了再考虑是不是版本、密钥、系统兼容性的问题。最后分享一个提升效率的小习惯我会把常用ADB操作写成批处理脚本比如dump_log.bat一键抓日志list_packages.bat一键导出应用清单fix_connect.bat一键重启Adb服务加删密钥。这样日常用ADB再也不用一个个敲命令双击就能跑。脚本内容其实就是把前面提到的命令按顺序拼起来加上一些提示语10分钟就能写好长期用非常省心。