Unix下Android调试卡壳?三步揪出90%环境顽疾
|
文章配图,仅供参考 去年高考期间,我在西溪园区B座27楼那个永远擦不干净白板的会议室里,盯着adb devices列表里那个灰掉的SM-G988B,手边咖啡凉透,键盘右下角的“M”键早两年就掉了,现在按起来像在戳一块橡皮擦——这事儿得从三天前说起:后端把/health-check接口的返回字段从status改成了statusCode,但没通知,产品经理当天下午三点在钉钉发了个“顺手改下兼容”的消息,我回了个OK,五分钟后发现Chrome DevTools里连不上WebView调试器。先扔结论:Unix下Android真机调试卡壳,90%不是代码问题,是环境在装死。它不报错,不崩溃,不提示——它就停那儿,adb logcat空转,chrome://inspect空白,你点十次“Configure”,弹窗里的localhost:9222永远在转圈,而隔壁工位竖着显示器那位正用Mac+Pixel 4a调得飞起。冷眼看着,心里清楚:又不是React Native打包出错,也不是H5路由跳转失败,是环境在跟人玩捉迷藏。 第一步,别碰代码,拔掉USB线,去终端敲 adb kill-server && sudo adb start-server ——别嫌sudo多余,Mac上你不用root权限,adb就是不肯认你那台被Google Play服务降级过的SM-G988B;Linux下更绝,你systemd里uDev规则写错一个冒号,设备连mknod都绕不过去。我上次卡住,就因为/etc/udev/rules.d/51-android.rules里vendor ID少写了0x,日志里没半句提醒,只在dmesg里有一行“usb 2-1.3: configuration #1 chosen from 1 choice”,你猜我翻了多久?有人端着杯子站了很久,等我抬头时他问:“要不…换台机子试试?”我没答,低头继续查lsusb -v | grep -A3 "idVendor",手指关节发白。 第二步,关掉所有可能劫持adb端口的东西。Chrome自己会抢9222;VS Code的React Native Tools插件默认监听9229;连那个叫scrcpy的开源投屏工具,启动时顺手占了8080和9222——它甚至不告诉你。那天我排查到凌晨一点,发现控制台报错里有句“Address already in use :::9222”,来源却标着“”,翻了三个进程树才定位到后台挂着的scrcpy-server —version 2.3.1,build time: Mar 2023。外卖到了没人去拿,塑料袋在门边堆成小山,我一边删掉~/.scrcpy目录下的sock文件,一边骂自己怎么忘了ps aux | grep scrcpy才是第一反应。 第三步,别信chrome://inspect页面那个温柔的“Discover USB devices”开关。去devtools → ⚙️ → Experiments → 勾上“Enable port forwarding for ADB devices”,再回到Experiments页底部点“Reset all experiments”——对,重置,不是刷新。这事我试过七次:只有reset之后,设备名才真正出现在page list里。设计稿标注里写着“按钮点击反馈延迟≤100ms”,可此刻你点十次,console.log(‘clicked’)纹丝不动,Performance面板里Event Log全是灰色,没一帧渲染触发。谁在背后走过碰了椅子,震得机械键盘哗啦一声,我把Chrome整个重装了一遍,重装完才想起来:Chrome Canary根本不需要重装,它只要一次彻底的Reset Experiments。 没数据。记不清具体耗时,大概几秒到几分钟之间浮动——看那天心情。唯一确定的是,当你终于看到SM-G988B底下那个“index.html (file:///android_asset/www/index.html)”亮起来时,不会欢呼,只会长出一口气,盯着那行“Uncaught ReferenceError: process is not defined”愣三秒:哦,原来真有Bug啊。之前全是假死。 这法子不能解决剩下10%,比如某次某客户定制ROM里阉掉了WebContents调试协议栈,或者某Android 12 OEM在WebView初始化时强制清空UserAgent导致devtools handshake直接断开——那种时候你只能换机、换系统、换方案,或者把测试机借给产品同事让他现场录个“点击没反应”的30秒视频,发群里@后端说“你那个status→statusCode改完,前端WebSocket握手包里带了非法header”。现在,我打开终端,cd ~/workspace/h5-activity,git checkout -b fix/android-debug-waiting-for-someone-to-press-enter,然后删掉package.json里那个早就废弃的react-devtools-inline依赖。白板上还留着高考倒计时“距6月7日还有0天”,粉笔灰落在“0”字右下角,像一粒没擦净的bug。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Unix高效包管理:创业者的技术基建必修课