加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.1461.cn/)- 应用程序、AI行业应用、CDN、低代码、区块链!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

Unix下Android调试卡壳?三步揪出90%环境顽疾

发布时间:2026-10-27 11:23:59 所属栏目:Unix 来源:DaWei
导读:  跟老板拍桌子那天是去年十月十七号,下午三点零七分——我盯着 adb devices 空着的输出栏,手已经松开键盘了,人还坐着。他站我工位边第三回说“这不该是前端的事”,我点头点得比git commit -m 还利索,但没吭声。不是怂,

  跟老板拍桌子那天是去年十月十七号,下午三点零七分——我盯着 adb devices 空着的输出栏,手已经松开键盘了,人还坐着。他站我工位边第三回说“这不该是前端的事”,我点头点得比git commit -m 还利索,但没吭声。不是怂,是刚看见PM在钉钉窗口发了个“紧急排期”,带个红色感叹号,截图里连“adb”俩字母都没打对。


  第一步:killall adb;第二步:sudo adb kill-server;第三步:rm -rf ~/.android/adbkey ——就这三行,去年十月份我贴在监控屏右下角贴了二十三天,纸边都卷了。不是为了提醒别人,是怕我自己哪天又去点 Android Studio 里那个“Restart ADB”按钮。那个按钮我敢打包票,它重启的从来不是 adb server,是人的希望。上上周后端老张自己试了三遍,最后一遍把手机换到USB3.0口,结果弹出个“device unauthorized”,而他昨天才重装过系统——你说巧不巧?


  Lighthouse 跑分截图发到群里没人回,是中午十二点四十一分。我截的不是FCP,是那个“Diagnostics”里飘红的“Android Debug Bridge: not responding”,截图右下角还带着微信悬浮窗,小红点数都没清。对面工程师换了一根充电线,Type-C 的,米白色,壳子有划痕,他插进去时我正低头看自己桌面上那个没关的录屏——窗口最小化在右下角,进度条停在 00:42:17,光标还在闪,但录音图标早灰了。这玩意儿卡了两天半,我忘了关,也懒得动。


  其实我原以为是udev规则没配对,查了三小时,写了一百二十七行 udev rules 脚本,连 vendor id 都手敲进去了,结果 adb devices 一跑还是空。后来发现根本没走 udev,是 Android Studio 自己起了个私有 adb server,端口占在 5037,而系统级的被它压根没调用。我说不准这事是不是 JetBrains 改过底层通信链路,但他们改不改,和我能不能连上 Pixel 6 Pro 没半毛钱关系。我就记得老张那会儿坐我左边,边泡枸杞边念叨“要不咱把 gradle wrapper 升到 8.4?” 我说升吧,他点了三次 sync,第四次才弹出“Waiting for ADB”,第五次我起身去倒水,回来他手机已经连上了——就因为他拔下来,换了个USB口,又多按了两秒“允许调试”的弹窗确认键。


  CDN账单上周超了,不是缓存没命中的问题,是测试环境误绑了生产域名的 CNAME,刷了三天灰度流量。我跟运维对账的时候顺手扫了眼他们的 ADB 日志,发现他们用的是 root 用户起的 adb,不是 sudo。这个细节我没跟他们提,说了也白说,他们连 adb logcat -b radio 都不一定知道切哪个 buffer。我只跟前端提了一句:“你们的热重载延迟,真不一定出在 webpack。” 他眨了眨眼,回了个“哦”,然后继续调试那个永远收不到 onActivityResumed 的 Fragment——其实他手机根本没连上,只是 Android Studio 假装连上了,在 device list 里加了个灰色幽灵项。


  第二步那个 sudo adb kill-server,很多人漏掉 -H,结果只杀了当前用户的 server,root 下的还在苟延残喘。这个我敢打包票,去年九月我们组四个新人全栽这儿,三个改完规则重连成功,第四个改完之后连上了,但 logcat 死活不输出 system main buffer,最后发现他 .bashrc 里 alias adb='adb -H' 写错了,少了个引号——这种事你跟谁讲理去?你不能指望每个人都在 shell 启动时校验自己的 alias 有没有逃逸。所以我现在遇到卡壳,第一反应不是查 dmesg,是看对面工程师换没换线、倒没倒水、录屏开着没。这些比 adb version 还准。


  桌面那个没关的录屏,其实是上周五录的 build.gradle.kts 语法报错排查过程,录到一半我接到电话去处理一个 Jenkins 构建卡死,回来就忘了关。它一直在那儿,最小化状态,不耗CPU,也不占内存,就是存在。就像某些 adb 进程,杀不干净,也不报错,就是不动。你说优胜劣汰?对,环境里所有能挂掉的组件,最后都活成了幽灵。ADB 是最体面的幽灵,它不 crash,它沉默;不报错,它等待;不拒绝连接,它假装已连接。你删了 key,它生成新的;你换了 USB 口,它假装识别新设备;你重装 platform-tools,它用旧二进制缓存——它根本不在乎你做什么,它只在乎你还信不信它。


  所以我不写“解决方案”,我写“三步”。因为写“解决”太傲慢,写“修复”太假,写“配置建议”等于递刀子给下一个踩坑的人。我现在 debug 安卓设备,第一步必做三件事:拔线、换口、再拔一次;第二步打开 terminal,cd 到 ~/Downloads/android/platform-tools,手动 ./adb devices;第三步——不管出没出结果,立刻关掉 Android Studio。就这么简单。要不要我帮你写个一键脚本?不用。你自己写,哪怕就两行,只要 run 之前你记得先关 IDE。别信它的绿色小点,它连自己在不在运行都懒得告诉你。


文章配图,仅供参考

  对了,我刚才看见 PM 又发了新消息,说“安卓调试环境验收节点推迟”,附件是张甘特图,关键路径上写着“依赖基建侧交付”。我没回。我正拆机箱清灰——不是服务器,是我那台跑了八年 XPS 13 的开发机。风扇里全是毛絮,跟去年十月十七号那天我工位地毯上沾的猫毛一个色。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!