ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Windows下ADB命令实战总结:从环境配置到高频调试技巧

2026/9/9 19:31:44 拓冰建站 浏览量
Windows下ADB命令实战总结:从环境配置到高频调试技巧 写ADB命令总结这事儿说实话我很早就想写了。在Windows下摆弄安卓设备不管是做开发调试、玩机刷机还是帮人折腾电视盒子、手表之类的安卓设备ADB这套命令绕不开。每次在群里看到有人问”怎么装ADB”“怎么抓日志”我就想如果有一篇把常用命令串起来、还把坑也标出来的文章大家能省不少事。今天这篇就好好整理一下把我实际用这几年遇到的情况和踩过的坑都摆出来。先聊清楚这玩意儿是啥。ADB全称Android Debug Bridge是安卓官方提供的一套调试工具走的是客户端-服务端-守护进程的结构说白了就是让你在电脑上通过命令行给安卓设备下发指令。它能做的远比想象中多安装卸载应用、传文件、抓日志、模拟点击、看系统状态、控制电视盒子甚至可以直接把安卓手机当成一个调试终端来用。在Windows系统下用ADB门槛不高但有几个地方特别容易劝退新人比如环境变量没配好、驱动装不上、设备连不上、端口被占用这些我都会在文章里展开说。这篇内容适合谁如果你是搞安卓开发、测试的肯定需要如果你平时爱折腾手机、盒子、智能设备也值得收藏就算你只是临时要装个应用或者导份数据把最基础那几条命令学会也够用了。1. ADB环境准备与连接基础1.1 下载与安装ADB工具ADB工具本身是Android SDK的一部分但其实你用不着装整个Android Studio有一堆精简包可以选。我自己的习惯是用官方SDK Platform Tools因为只有这个能保证是最新版本不会遇到新设备连不上或者协议不兼容的问题。下载的时候注意选对平台Windows系统一般选windows.zip这个包。解压之后你会看到一个platform-tools文件夹里面有一个adb.exe还有fastboot.exe等一堆文件。真正的核心就一个adb.exe所以很多人会单独把它拎出来放到某个固定目录方便后续配置。有一个细节需要留意如果你平时还要刷机、解锁引导程序fastboot这个工具同样重要。所以哪怕你只装ADB也建议把整个platform-tools保留完整别只拿一个adb.exe走。提示把platform-tools放到一个路径里不含中文、不带空格的目录下比如C:\platform-tools能避免很多奇奇怪怪的问题。1.2 环境变量配置与验证这一步是Windows用户最绕不过去的坎。如果环境变量没配置好你打开CMD输入adb会直接提示“adb不是内部或外部命令也不是可运行的程序或批处理文件”。这其实是新手最容易碰到的报错我见过不下几十次了。配置方法在Win10/Win11上都差不多右键“此电脑” → 属性 → 高级系统设置 → 环境变量在“系统变量”区域找到Path变量双击打开新建一条填上你platform-tools的绝对路径比如C:\platform-tools点确定保存然后重新开一个CMD窗口验证是否配置成功在新开的CMD窗口输入adb version如果显示类似Android Debug Bridge version 1.0.41的信息就说明配置好了。这里强调新开窗口是因为CMD读取环境变量是在窗口启动时完成的你不重开窗口它就读不到新配置很多人在这一步卡住都是因为这个。还有一个很实用的小技巧用PowerShell的话有时候改动完环境变量还得重启PowerShell窗口甚至重启一下资源管理器否则编译器之类的第三方工具可能还是看不到新路径。1.3 设备连接与授权检查环境配好之后第一步就是让电脑能识别手机。连接方式有两种最常见USB线和无线连接。USB连接是最稳的方式但前提是手机必须开启开发者选项和USB调试。不同品牌开启开发者选项的方式不太一样不过绝大多数是进“设置” → “关于手机”然后连续点击“版本号”七次就能解锁开发者选项了。注意有些UI把版本号藏得比较深比如有些国产定制UI还要点更多里找。开启USB调试后用数据线连上电脑在CMD里执行adb devices如果看到类似这样的输出List of devices attached 1234567890abcdef device那就说明连接成功了。这里有两个状态需要特别关注一种是device表示正常另一种是unauthorized表示设备还没授权这时候你需要在手机弹出的信任弹窗里勾选“始终允许”点确定。如果手机没弹窗多半是USB模式不对试着切换USB配置到“传输文件(MTP)”模式或者换一根数据线——不是所有线都支持数据传输很多线只能充电。无线连接以前需要先用USB连一次然后执行adb tcpip 5555才能开启网络调试。不过现在相当一部分设备在开发者选项里有“无线调试”开关直接用Android 11的配对功能就能连上不需要插线。这个方式在盒子、电视上特别常用因为它们本来就不方便插线调试。2. 应用管理命令实战2.1 安装与卸载应用ADB装应用这个操作比在手机上点安装包省事多了而且还能绕过一些手机厂商对未知来源的拦截。基础命令就是adb install app.apk正常情况下你会在终端看到SuccessApp就直接装好了。但是install有几个参数我平时用得比较多参数作用-r覆盖安装保留应用数据-d允许降级安装比如从版本3降到版本2-t允许安装测试包-g安装时直接授予所有运行权限最常用的组合是adb install -r -d app.apk尤其在调试场景下这个组合能省掉很多重复授权和手动清理数据的麻烦。注意覆盖安装有时候会报INSTALL_FAILED_VERSION_DOWNGRADE这时候就是你忘了加-d参数。还有一种情况是INSTALL_FAILED_UPDATE_INCOMPATIBLE一般是因为签名不一致需要先卸载旧的再装新的。卸载命令也很简单adb uninstall 包名 # 保留数据卸载 adb uninstall -k 包名有一点要强调卸载时可以用-k参数保留数据。但实际经验告诉我如果卸载是为了解决应用冲突或者数据损坏那保留数据卸载等于白卸载因为数据还在问题依旧。真正需要干净的修复直接不带-k彻底删干净再装。系统内置应用卸不了那就得用另一个思路先看包名和apk路径然后adb shell pm uninstall -k --user 0 包名这在很多盒子和手机上能卸载出厂自带的App。不过这条命令有风险搞不好会把系统搞崩只建议在明确知晓后果的情况下使用。2.2 查看应用列表与包名定位说包名之前先插一句很多人在ADB操作里找不到应用就是因为搞不懂包名和界面名称的区别。比如你看桌面上有个图标叫“设置”但系统的设置应用包名其实是com.android.settings。ADB的命令里所有跟应用相关的操作都是用包名作为唯一标识的。列出所有已安装应用adb shell pm list packages如果要过滤# 只列第三方应用 adb shell pm list packages -3 # 包含APK路径 adb shell pm list packages -f # 按关键字过滤 adb shell pm list packages | findstr 你的关键字在Windows的CMD/cmd环境里管道过滤用的不是grep而是findstr。这是个特别容易踩坑的点我见过不少在Windows下拿Linux命令硬套的朋友输入adb shell pm list packages | grep 包名结果CMD直接报错或显示一堆乱码。如果你是PowerShell也许能兼容但保险起见还是用findstr。还有个更直观的玩法如果你想根据应用名称查包名adb shell pm list packages -3 | findstr -i 微信或者干脆在设备上打开你要找的应用然后执行adb shell dumpsys window | findstr mCurrentFocus这个命令能直接告诉你当前前台窗口对应的包名和Activity名排查问题时特别好用。你打开一个应用界面然后执行这一条立刻就知道它到底是哪个包了。2.3 清除数据、停止应用与服务管理调试应用经常遇到一种情况应用状态被缓存搞乱了又不想卸载重装那就用清空数据这个命令adb shell pm clear com.example.pkg执行完这个应用的默认设置和缓存全没了相当于恢复出厂状态但应用本身还在。注意这个命令不会卸载应用但会把应用内用户登录态也一并清掉。强制停止应用adb shell am force-stop com.example.pkg如果你看某个应用一直在后台偷跑耗电用force-stop可以直接把它杀掉。比在系统设置里强行停止要方便得多特别适合那些不老实想自启的应用。如果你想查看某个应用具体占了多少存储可以使用adb shell du -sh /data/data/包名/data/data/包名是应用私有数据目录du算一下就能得出大小。有些应用没有root权限是没法直接列这个目录的所以这个命令仅在debuggable应用或root设备上有实际意义。这个知识点我专门记一下避免有人爬坑。3. 文件传输、日志分析与文本编码实战3.1 文件推送与拉取ADB传文件这个功能太常用了尤其是那些没法直接挂U盘的设备场景。推送的命令是adb push 本地文件路径 设备端路径 # 示例 adb push D:\test.apk /sdcard/拉取是反方向adb pull 设备端路径 本地保存路径 # 示例 adb pull /sdcard/DCIM/xxx.jpg D:\下载\有一个细节对Windows用户至关重要路径分隔符的问题。ADB在Windows下的本地路径反斜杠和正斜杠都认但设备端路径一定用正斜杠比如/sdcard/Download这种。如果你一不小心写成了\sdcard\DownloadADB大多数情况下会把它当字面字符串处理结果就是找不到文件。还有/sdcard/这个路径其实是一个映射实际指向/data/media/目录但你在ADB命令里直接用/sdcard/就好系统会自动映射。对新手来说记住这条路径规则就够了。传大批量文件的时候我建议先用adb shell mkdir -p 目标目录把目录建好再执行push这样不容易出错。传大文件时终端上会显示传输进度如果长时间卡住不动一般就是数据线的锅换一根再试。3.2 查看与导出系统日志日志系统在我眼里是ADB最有价值的板块之一。安卓系统的日志输出叫Logcat在CMD里直接执行adb logcat会看到日志像瀑布一样刷屏日志格式大概是“日期 时间 进程ID 线程ID 日志级别 标签: 内容”。如果你只想看某类日志可以加过滤器最常用的是按优先级过滤V是详细D是调试I是信息W是警告E是错误# 只看WARNING和ERROR adb logcat *:W # 只输出ERROR adb logcat *:E按标签过滤也相当实用比如你想看一个应用包的崩溃日志adb logcat -s AndroidRuntime:E这里-s参数表示按指定标签里指定级别过滤很多崩溃信息都会通过AndroidRuntime这个标签打印出来。如果想抓崩溃现场并保存到文件adb logcat -v time *:E D:\crash.log注意在Windows的CMD里重定向输出会受编码环境影响ADB默认输出是UTF-8但Windows的CMD默认是GBK编码所以抓下来的log用记事本打开有时会乱码。为了解决乱码问题有几个办法可以轮换着用。第一个是执行adb shell之前把当前代码页改成UTF-8chcp 65001然后再跑adb logcat这样输出到命令行的字符就是UTF-8显示基本正常。第二个是抓完日志后用VS Code打开它会自动识别编码比记事本靠谱得多。第三如果你一直在Windows下跟logcat打交道我建议干脆用PowerShell重定向然后指定UTF-8输出adb logcat -v time | Out-File -Encoding utf8 D:\crash.log这个方式整体上比cmd原生重定向省心至少乱码概率低了不少。还有一个特殊情况清空日志缓冲区的命令。adb logcat -c在复现问题之前先把旧的日志清掉再把复现步骤走一遍抓出来的日志才是干净的、只包含问题前后那段记录。这个习惯在提交bug给开发时尤其重要。3.3 Windows乱码问题的完整处理思路这里把乱码问题专门提出来说是因为它在Windows下太普遍了。不是说只有ADB会乱码而是ADB这种输出大量UTF-8文本的工具在GBK编码的CMD里基本就没有显示正常的可能。乱码的根源很简单终端显示的编码格式和程序输出的编码格式不一致。CMD默认代码页是936对应GBK码表而ADB的很多输出尤其是logcat里的信息是UTF-8编码的。两者不匹配自然就出现一堆乱码。常规解法如下切换代码页到UTF-8chcp 65001执行后再跑ADB命令大多数情况下显示就正常了。如果只是临时处理某个输出文件用编辑器转换编码比如用VS Code重新打开后用“通过编码保存”另存为ANSI或者反过来。在PowerShell里运行ADB时设置控制台输出为UTF-8[Console]::OutputEncoding [System.Text.Encoding]::UTF8这里要注意chcp 65001不是万能的。有些老程序对UTF-8代码页支持不好切换之后反而会出现输出位置错乱或者部分中文字符丢失。所以别指望一劳永逸多准备几种方案切换着用才是正道。我还遇到过一种坑就是执行adb shell命令后命令行的中文显示正常但当你用echo把某个内容重定向到文件时发现文件中中文乱码。这种时候直接跳过CMD重定向改用adb pull把相关文件拉回来解析反而省心。4. 设备调试与性能分析关键命令4.1 屏幕截图、录屏及分辨率操作调试时需要截屏或者录屏这个需求在提交问题反馈、做教程、或者纯粹记录画面时都会用到。但是注意ADB截屏出的文件默认保存在设备上并不会直接存到电脑里需要两步配合。截屏标准流程# 先截屏保存到设备 adb shell screencap /sdcard/screen.png # 再拉到电脑 adb pull /sdcard/screen.png D:\嫌两步麻烦可以合成一行adb exec-out screencap -p D:\screen.png这个用-e参数可以直接把标准输出重定向到本地文件在Windows的CMD下也适用。不过要注意Windows下重定向有可能会篡改二进制流把文件搞坏尤其是某些老版本的adb在Windows下exec-out会出问题。保险起见还是建议用标准的先截后拉两步法。录屏命令# 录制3秒钟 adb shell screenrecord --time-limit 3 /sdcard/demo.mp4 adb pull /sdcard/demo.mp4 D:\screenrecord还支持指定分辨率和码率比如adb shell screenrecord --size 1280x720 --bit-rate 4000000 /sdcard/demo.mp4分辨率如果调太低录出来的视频会模糊调太高部分设备会掉帧。4Mbps这个码率算是比较均衡的选择录10分钟大概200多MB。如果你想展示的游戏画面是高速运动的码率可以再往高了调。还有一个经常被忽视的实用命令是修改屏幕密度# 临时设置屏幕dpi adb shell wm density 320 # 恢复默认 adb shell wm density reset在很多设备上把dpi调低一点界面显示的元素就变小看到的内容更多。这个在改成安卓平板模式时尤其常用。但注意某些应用对dpi敏感强行改密度可能导致布局错乱或者直接闪退只建议在临时场景下使用。4.2 系统信息、电池网络状态分析想知道你的设备是什么型号、安卓版本、内核版本不需要在设置里翻一行命令就搞定adb shell getprop ro.product.model adb shell getprop ro.build.version.release adb shell getprop ro.build.version.sdk用getprop查看所有系统属性也可以adb shell getprop | findstr 某个关键字电池状态是个比较常用但很多教程没细说的点。直接看图adb shell dumpsys battery这个命令会输出电池的当前电量、电压、温度、健康状态等大量信息。如果你在做功耗测试还可以动态观察adb shell dumpsys battery | findstr level adb shell dumpsys battery | findstr temperature它的特殊之处在于支持模拟电池状态比如# 让系统认为没有电池只连电源特殊测试用 adb shell dumpsys battery unplug # 恢复真实电池状态 adb shell dumpsys battery reset这个模拟电池状态的功能在做省电测试或者低电量逻辑验证时非常有用。我见过有人直接改dumpsys里的温度值来触发手机的省电保护机制虽然只在特定测试场景下有意义但足以说明该命令的扩展能力。网络状态的查看也是重点场景adb shell dumpsys connectivity | findstr NetworkAgentInfo adb shell dumpsys wifi | findstr SSID这些命令能告诉你当前连接的是哪个Wi-Fi有没有走移动网络信号强度如何。在排查“为什么App连不上网”这类问题时先看看系统层面网络是否正常比去App里翻日志高效很多。4.3 输入事件模拟与自动化测试准备ADB不仅能查看设备状态还能直接模拟用户操作。这个在自动化测试、批量操作、或者单纯想偷懒时特别有用。模拟点击adb shell input tap 540 960这个命令会在屏幕坐标(540, 960)位置触发一次点击。坐标可以从截屏里量或者用uiautomator dump辅助定位。模拟滑动adb shell input swipe 500 1500 500 300起点(500,1500)滑到(500,300)适合刷应用列表、翻页这种操作。滑动时长可以通过添加事件间隔来控制但input命令里没有直接指定时长的参数不过可以通过连续多个swipe实现慢速滑动。而有了input swipe 500 1500 500 300 1000这种写法在部分版本里最后一位参数是时长单位毫秒实测下来很多设备都认。模拟输入文字adb shell input text hello这里有一个需要注意的点input text不支持输入中文因为底层实现是按ASCII键位编码走的。你想输入中文的话得借助ADBKeyboard这类输入法应用或者用剪贴板配合。我在实际自动化里常用的是把文本放到设备剪贴板再模拟粘贴这个复杂一点但确实可行。按键事件模拟也是自动化里常用的。比如# 返回键 adb shell input keyevent 4 # Home键 adb shell input keyevent 3 # 电源键 adb shell input keyevent 26 # 音量 adb shell input keyevent 24这些按键码其实对应的是Android的KeyEvent常量想记住太多也没必要把4返回、3Home、26电源、24/25音量这几个高频的记下来就够日常用了。值得再多说一句把input命令跟adb shell uiautomator dump配合起来就能拿到界面的控件树然后按资源ID定位控件坐标这样写批量点击脚本会稳定很多。uiautomator dump会输出一个xml文件拉到本地用文本编辑器查看即可。这个方案虽然不复杂但比纯靠固定坐标去模拟点击要可靠不会因为屏幕分辨率变化而全部失效。5. 常用但不常被提到的进阶命令5.1 服务管理重启ADB与端口处理ADB本身是一个常驻的客户端-服务端结构所以偶尔也会出现服务挂了、端口被占用、设备离线的状况。这时候你需要知道的几个命令就派上用场了。重启ADB服务adb kill-server adb start-server这两条可以解决大量连接异常问题。比如设备列表突然空了或者设备状态一直是offline先执行kill-server再start-server基本能恢复到正常。端口被占用的场景也很普遍。ADB默认监听5037端口如果在Windows下执行adb命令提示“cannot bind to 5037”说明端口被别的进程占了。这种情况经常是第三方手机助手、模拟器或者某个后台程序抢占了端口。处理方式如下netstat -ano | findstr 5037 taskkill /F /PID 对应PID如果5037端口被一个叫“adb.exe”的进程自己占了而你又想彻底清理那就直接taskkill /F /IM adb.exe然后再adb start-server重新拉起。这个操作是最常见的修复手段。顺带提一句有些模拟器自己带了一套adb server会跟系统全局的adb抢设备。你想让模拟器的adb全局生效最好统一用一套adb版本不然经常会出现设备识别不到或者状态混乱的问题。5.2 设备端shell命令精选进入了设备端shell之后其实你已经拿到了一个Linux终端能操作的东西更多了。常用入口命令是adb shell进去之后你会看到设备端的命令行提示符。这个终端里面很多命令是精简版本没有那些复杂的参数但基础的文件操作、进程管理是没问题的。我平时在shell里常用的有# 查看当前正在运行的应用进程 ps -A | grep 包名 # 查看CPU和内存整体占用 top -n 1 # 查看存储空间 df -h # 查看运行进程数/线程数 cat /proc/loadavg如果你只是需要单条执行不进入交互式shell可以直接adb shell ps -A adb shell top -n 1这种非交互式执行在脚本里更好用因为你可以直接拿到输出结果再做处理。这里要特别提醒非root设备在adb shell里能访问的文件和目录是有限制的。/data/data/包名这种目录普通shell用户是进不去的只有在root权限或者应用的debuggable状态下才能访问。这也是很多新手试半天失败的原因不是说命令错了是权限不够。说到权限还有一条命令挺实用adb shell pm list permissions -g -d这条命令会列出危险的权限组和已被拒绝的权限在做隐私安全测试时很常用。如果你想知道某个应用申请了哪些权限可以配合包名过滤adb shell dumpsys package 包名 | findstr permission不过这个输出内容非常多建议配合文本编辑器慢慢翻别指望一次性在终端里看完。5.3 APK提取与多设备管理技巧有时候你需要从设备上把一个已经安装的应用的APK弄出来尤其是那种系统预装、应用商店里一时半会儿找不到包的那种。流程是这样的先找到应用的安装包路径adb shell pm path 包名输出会类似package:/data/app/~~xxx/base.apk。拿到路径之后把它拉出来adb pull /data/app/~~xxx/base.apk D:\app.apk这里注意在没有root的普通设备上很多应用在/data/app下的apk是可以直接读的因为权限是其它用户可读的所以你甚至不需要root也能把APK抠出来。这个命令对应用分析非常有帮助。如果你连着多台设备每个adb命令都需要指定设备序列号。首先查看所有设备adb devices -l然后对指定设备执行命令adb -s 设备序列号 shell input tap 500 800不方便记序列号的话也可以用网络连接的IP来指定adb -s 192.168.1.10:5555 shell getprop ro.product.model。多设备管理时一定要养成加-s参数的习惯不然adb会报“more than one device”错误。设备序列号从哪查adb devices那行输出最左边的就是。如果你用无线连接序列号就会显示成IP加端口的形式。5.4 与其他工具配合使用ADB只是一个底层传输通道真正玩出花来还要配合别的工具。比如Scrcpy它基于ADB实现了手机屏幕推送到电脑的功能延迟极低而且还能用电脑鼠标键盘反向控制手机。这个是我强烈推荐搭配的工具尤其在测试和演示场景下真心好用。另一个同门好搭档是Frida它也能走ADB通道对应用做动态分析不过这个偏黑客路数普通用户用不到这里就不细讲了。如果你在做UI自动化Appium底层也是通过ADB跟设备通信的你了解ADB的工作原理后再去理解Appium的配置就清晰很多。ADB跟第三方刷机类工具也是深度绑定的比如一些盒子刷机软件本质上就是个ADB封装壳。你说你不想记命令、直接用工具点点点当然可以但学会ADB之后你才能理解工具背后那几条命令到底干了什么出问题排查思路也会清晰很多。6. 常见问题排查与避坑实录6.1 全屏时代最经常碰到的5个报错及解法把时间线拉长我实际用过这么久ADB在Windows下遇到的报错也就集中在几类。做个速查表比长篇大论更有用报错信息或现象真正原因解决方案adb不是内部或外部命令环境变量没配好或未重开CMD检查Path里有没有platform-tools路径重开终端device offline / unauthorized设备未授权或USB不稳定重新授权换线重启adb servercreatefilew nul failedWindows下重定向时的经典问题换个非重定向方式执行或者改用PowerShell的Out-Filemore than one device连了多台设备却未指定加-s序列号cannot bind to 5037端口被占用netstat查端口后taskkill或重启adb这里面createfilew nul failed这个报错我单独拿出来说。它的触发场景一般是执行类似adb shell xxx nul这条命令时在Windows系统下因为nul设备文件的处理方式跟Linux的/dev/null不一样就会报这个错。实际排查下来这个错通常不影响命令的正常执行只是CMD在“多写了一步”的时候会报。稳妥的解法是用一个普通文件名替换nul比如 temp.txt或者干脆用PowerShell执行重定向。6.2 设备列表看不到设备时的排查思路用户问我最多的问题就是“我手机开USB调试了数据线也插了为什么adb devices看不到设备”这个问题其实不难排查按顺序来换数据线很多线是纯充电线两根信号线是断的插上去电脑没反应自然识别不到。换USB接口前置面板的USB口有时候供电不足或者接触不好用机箱背面主板接口更稳。检查驱动Windows有时候不会自动装好安卓设备的驱动你需要去设备管理器里看看有没有带黄色感叹号的设备。有的话装一下通用ADB驱动很多手机厂商官网也有专门的驱动包。关掉第三方手机助手这点非常关键。很多国产手机插上电脑后会自动弹出一个“手机助手”或者“豌豆荚”之类的程序这些程序会抢占ADB的USB通道导致你adb devices里看不到设备。彻底卸载或者禁用这些助手再试一次。授权弹窗要确认手机屏幕亮着的时候插上USB后一定要看一眼有没有授权弹窗没点“允许”之前设备状态永远是unauthorized。这个过程操作完90%的看不到设备问题都能解决。6.3 无线调试配对不上的问题无线调试在Android 11以后很成熟了但有时候配对就是不稳定。最常见的原因是两个一个是手机和电脑不在同一个局域网段。有些公司网络或家里网络有AP隔离功能不同设备虽然连的是同一个Wi-Fi但彼此访问被隔离了。这种情况可以先ping一下手机的IP地址通了再试试连ADB。另一个是配对码输错或过期。无线调试的配对码是有时效的你在开发者选项里打开“无线调试”后点“使用配对码配对设备”会弹出一个6位配对码。在电脑上用adb pair IP:PORT输入配对码时要快一点拖太久配对码过期就废了。如果配对一直失败可以先删掉已配对的设备重新配或者直接把无线调试关掉重新打开。本质上无线调试的原理是通过一个临时高端口建立信任之后再切回到5555端口工作所以临时端口一旦被网络设备拦截自然就连不上。6.4 ADB权限问题与生产环境安全提示ADB的权限在调试模式下是很大的它能安装和卸载应用、模拟点击、拉取系统信息因此在生产环境里必须注意安全。一个极其重要的原则不要随便在陌生电脑上打开USB调试并连接因为只要你点了授权那台电脑就可以对你的手机做几乎任何事情。尤其是安卓的USB调试授权一旦勾选“始终允许”会在电脑上生成一个RSA密钥并保存在设备端直到你在设备里手动撤销。在调试完成后建议立刻关闭开发者选项里的USB调试开关尤其对新手朋友来说。不仅是防止数据泄露也能避免手机在充电的时候被一些恶意工具偷偷透过ADB搞事情。对企业用户或者做设备管理的朋友我还要额外提醒一点ADB在部分设备上是可以通过系统设置关闭的在生产环境中不要随意开启能做配置管理的就把ADB默认关掉需要时再由IT统一控制。这看起来是小事但在一些行业应用场景里ADB开不开启直接影响整机安全策略的落地。把ADB命令玩熟之后你会发现其实不只是“敲几条指令”这么简单它是你踩进安卓体系深处的那扇门。环境配置、应用管理、文件传输、日志分析、性能监控每一条命令背后都是安卓系统某一块能力的窗口。上面整理的这些命令我尽可能把场景讲透了也把Windows下会遇到的那些坑都标出来了真正动手操作一遍你大概就能体会到我说的这种“一切尽在掌握”的感觉。