尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Android TV ADB远程调试全攻略:开启开发者模式到连接排错

Android TV ADB远程调试全攻略:开启开发者模式到连接排错 家里那台老创维电视U盘插上去装第三方应用被系统拦得死死的设置里的“允许未知来源”开关灰着根本点不动。折腾了大半天最后是靠局域网ADB连接敲了两行命令才把应用塞进去。那台电视的ADB调试口子一开后面装播放器、抓日志、卸预装软件全都顺了。从那次之后我就想把Android TV远程调试这件事完整梳理一遍从开发者模式怎么开、ADB工具怎么配、连接命令怎么敲到最常见的几个报错怎么排一次说透。这篇文章适合手里有Android TV、Google TV或者各类国产智能电视的人也适合专门做TV端应用开发调试的同行。整个过程不复杂就是步骤碎、坑多很多问题不是技术难度高而是不知道某个开关藏在哪、某条命令得等多久才算正常。我把实践里的经验一条条捋出来照着做基本都能打通。1. 动手之前的门槛哪些电视能开ADB准备阶段最容易踩的暗坑开始之前先搞清楚一个基本问题不是所有电视都能开ADB也不是所有电视的ADB开关都在同一个地方。这步没搞清后面全白搭。1.1 不是所有电视都叫Android TV严格意义上的Android TV是Google官方认证的那套系统系统设置里自带开发者选项版本号连击7下就能解开。Google自己出的Chromecast with Google TV、索尼、TCL、飞利浦这些海外机型基本都是这套逻辑操作路径统一按官方文档走就行。麻烦的是国产智能电视。小米、创维、海信这些品牌虽然底层也是Android但系统是深度定制的Google那套开发者选项入口通常被换掉了或者是被隐藏起来。更麻烦的是有些电视的系统压根不是Android TV是Linux改造的定制系统比如某些老款型号这种情况ADB想都别想。怎么判断自己手里这台能不能开有个土办法进系统设置翻一遍看有没有“关于”“设备信息”“系统信息”之类的入口点进去找到固件版本或者系统版本号。如果有大概率是Android内核改造的系统有机会开ADB如果连版本号都找不到基本可以放弃老老实实U盘装应用或者换盒子。另外要注意系统版本差异。Android 7以下的旧版电视开发者选项路径是“设置 - 开发者选项 - ADB调试”Android 9以上变成了“设置 - 系统 - 开发者选项 - USB调试”。有些电视升级过系统菜单结构变了网上搜到的教程过期实际操作时得根据当前系统界面灵活找。1.2 网络环境远程调试的前提条件所谓“远程调试”本质就是电视和电脑通过局域网互通电脑用ADB协议向电视发指令。所以网络环境是硬性前提。要求就两个电视和电脑连同一个路由器路由器没有开启AP隔离。第一条很好理解同一网段才能互通。第二条很多人忽略有些路由器尤其是办公网络或者带访客网络功能的路由器默认开启AP隔离无线设备之间互相隔离不能互访。症状就是电视和电脑都能上网但互相ping不通ADB连接自然也是超时。电视这边的网络推荐用有线或者5G频段WiFi。亲测下来2.4G频段干扰太多大文件安装包传输时偶尔会断流安装应用会中途卡死。如果是无线连接建议把电视靠近路由器或者优先选支持5G频段的电视。调试过程中电视不要休眠。有些电视有自动休眠设置屏幕黑了之后网络模块也跟着休眠ADB连接就会断开。操作之前可以先在电视设置里把休眠时间调到最长或者用遥控器随便按一下让它保持活跃状态。1.3 电脑端准备电脑端要装的只有一个东西ADB工具包。Windows、macOS、Linux都有对应的版本下载解压就能用不需要安装。工具包解压后是一个包含adb.exe、AdbWinApi.dll等文件的文件夹记住这个路径后面配置环境变量要用。如果你平时做Android开发电脑上已经有Android SDK Platform-Tools那就不需要额外下载直接用SDK路径下的adb就行。不确定自己有没有命令行里敲一下adb version能输出版本号就是有了。装完之后命令行工具Windows的CMD或PowerShellmacOS/Linux的Terminal都要先切到ADB工具所在目录或者配置好环境变量才能直接用adb命令。我习惯直接把工具包路径加到系统环境变量里省得每次敲命令都得先cd。具体方法后面实操部分细说。手机端的“USB调试”和电视端的“ADB调试”是两回事但原理一样。区别在于手机用USB线连电脑电视走网络手机的调试开关通常在“开发者选项”里电视则五花八门有的叫“ADB调试”有的叫“网络调试”有的叫“远程调试”。2. 开发者模式开启路数原生、小米、创维各有各的门道开发者模式的本质是让系统开放调试接口ADB本质上就是一个允许外部设备通过调试协议控制系统内部功能的通道。不同品牌的开启路径差异极大逐一说明。2.1 原生Android TV / Google TV版本号连击七下原生系统最规范路径固定打开电视“设置”进“系统”或“设备偏好设置”选择“关于”找到“版本号”或“Android TV 版本”用遥控器上的确定键连续按7次提示“您已进入开发者模式”然后返回上级菜单会发现多了一个“开发者选项”进去把“USB调试”和“网络调试”部分机型叫“ADB调试”打开再确认“未知来源应用”允许安装开发者模式这步就完成了。这里有个细节连击版本号时不用狂按每按一次间隔半秒左右即可按到进度条走完就会弹提示。按太快系统反而可能没反应我遇到过几回慢一点就正常了。2.2 小米电视彩蛋入口藏在版本号里小米电视有两个入口一个正经一个彩蛋。正经路径设置 - 关于 - 产品型号对着“产品型号”连续按遥控器确认键7次。屏幕下方会出一个“已进入开发者模式”的提示。彩蛋路径设置 - 账号与安全 - 版本号连续点击“版本号”也可以解锁。部分小米电视的“设置 - 账号与安全”里直接有“ADB调试”开关不用进开发者模式就能看到。小米电视的ADB调试开关位置也常变。MIUI TV系统版本不同开关可能在“设置 - 账号与安全 - ADB调试”也可能在“设置 - 通用设置 - 开发者选项 - USB调试”。找不到就换个路径找或者用设置页的搜索功能直接搜“ADB”。创维用户里不少人折腾过ADB那条路比小米复杂详见下一节。2.3 老款创维电视的工厂菜单国产电视里创维算是个特例老款的ADB开关藏得很深网上的教程也乱七八糟我来把我试通的路子讲清楚。创维新款酷开系统7以上路径设置 - 通用设置 - 关于 - 本机信息遥控器按“上上下下左右左右”进入工厂菜单在工厂菜单的“常用功能”里找到“ADB开关”设置为开启。这组方向键指令是酷开系统通用的彩蛋不同固件版本的菜单布局略有差异但“ADB开关”或“远程调试”选项一定会出现在工厂菜单的某个子页面。创维老款酷开系统5甚至更早连方向键彩蛋都没有需要用遥控器按“菜单键”调出隐藏菜单找到“设置”底下的“ADB”或者进入“设置 - 系统 - 调试”里打开。更老的型号直接在“设置 - 系统信息”界面连续按遥控器数字键“9999”或“1234”也能调出隐藏调试页。老款机器最稳的办法其实是看固件版本号去对应方案。创维各时代用的主控芯片不同晨星、联发科、瑞昱都见过调试入口在工厂菜单里的位置也不一样。我是把电视型号记下来直接搜“型号打开ADB”搜到对应固件版本的帖子再照着操作。开启之后最好检查一遍老款创维电视的ADB开关默认只开一次电视重启后可能自动回关。想让它一直保持开启需要在工厂菜单里同时把“ADB”和“Adbd”都设为开启有些版本还需要把“USB调试”一起打开三者缺一不可。2.4 开启后还要补两步开发者模式和ADB调试开关打开之后很多人直接就去电脑上敲连接命令了结果失败。因为还有两个开关容易被忽略一是“未知来源应用”的安装许可。ADB远程安装应用时系统会检查这个开关没开的话会报INSTALL_FAILED_USER_RESTRICTED。原生Android TV的路径是“设置 - 安全与限制 - 允许未知来源应用”国产系统一般在“设置 - 账号与安全 - 未知来源”或者安装应用时弹窗询问。二是电视的“网络调试”开关。部分电视把“USB调试”和“网络调试”分开为两个独立开关光开了USB调试ADB无线连接还是会被拒。连接前确认这两个开关都处于开启状态。这两个开关补齐后开发者模式才算真正开通接下来才能进入ADB连接的正题。3. ADB连接完整实操从工具配置到无线连接一条龙开发者模式开好了电脑端工具准备好了下面就是ADB连接的核心环节。我习惯分成三步走先做好工具配置再走有线连接完成首次配对然后切换到无线连接做日常调试。3.1 ADB工具安装与配置ADB工具包网上搜“Android SDK Platform-Tools”就能找到官方下载地址选对应操作系统的版本下载然后解压到一个简单路径下比如C:\adb。这比放在带空格的路径里舒服命令行操作省事。配置环境变量的目的是让系统在任意目录下都能识别adb命令不用每次都cd到工具包目录。Windows操作流程右键“此电脑” - 属性 - 高级系统设置点“环境变量”在“系统变量”里找到“Path”双击编辑新建一条填入ADB工具包解压的路径比如C:\adb确定保存重新打开命令行窗口macOS和Linux则是在~/.bash_profile或~/.zshrc里追加一行export PATH$PATH:/Users/你的用户名/adb工具路径然后执行source ~/.bash_profile让配置生效。配置完成后新开一个命令行窗口执行adb version能输出版本信息就说明环境配置成功。这一步值得花两分钟认真做后面省下来的时间远超这两分钟。3.2 有线连接最稳妥的首次连接方式如果电视上有USB接口现在的电视基本都有最稳妥的首次连接方式是用USB线把电脑和电视直接连起来。电视和电脑都用USB线连接注意看接口类型有些电视是Type-A有些是Type-C电视上确认“USB调试”已经打开电脑命令行执行adb devices这时电视屏幕上会弹出一个RSA指纹确认对话框显示电脑的密钥指纹问“是否允许USB调试”用遥控器勾选“始终允许”点允许/确定。再看电脑端命令行设备列表里应该会出现device状态没报错就说明连接成功。这一步成功之后理论上就可以切换到无线连接了。有线连接的好处是稳定、不受网络环境影响而且首次配对的指纹确认更可靠。很多无线连接失败的问题其实是首连指纹没确认导致的有线方式能把这个问题绕过去。3.3 无线连接远程调试的正确姿势有线连接虽然稳但电视和电脑之间拉根线毕竟不方便日常调试还是无线更实际。无线连接前提还是那句电视和电脑在同一局域网内。操作分三步先查电视的IP地址。路径一般是“设置 - 网络 - 网络信息/查看网络”里面会显示IP记下来。无线连接通常用的是这个IP对应的WiFi接口如果电视同时插着网线需要用有线网卡的IP。电脑命令行执行adb connect 电视IP:55555555是ADB默认端口。执行完如果返回connected to 电视IP:5555就成功了如果返回cannot connect或者一直卡住看下一章的排查链路。连接成功后先断开USB线adb disconnect然后再用无线方式重新连接确保走的是网络通道adb connect 电视IP:5555 adb devices看到状态是device就确认无线连接成功。这里有个容易踩的坑adb connect成功之后如果之前还挂着USB连接同一时间只能有一个调试通道。USB线拔掉后如果无线连接失效了多半是连接状态没切换干净执行一次adb disconnect再adb connect就好。无线连接成功后系统会记住这台设备下次电视重启、IP地址不变的情况下直接adb connect就能连上不用再确认指纹。3.4 首次连接的指纹确认首次连接时无论是有线还是无线电视屏幕上都会有一个确认对话框。这个对话框大概只出现这一次点过“始终允许”之后后续连接都不再询问。但实际调试中最常见的情况恰恰是用户根本没注意到电视上弹了确认框眼睛光盯着电脑屏幕看到adb报状态unauthorized就懵了。unauthorized状态的含义就是电视还没同意这个电脑的调试请求。这个状态之所以叫“未授权”是因为ADB的鉴权机制是双向的——电脑端生成一对RSA密钥首次连接时把公钥发给电视电视端弹窗让用户确认是否信任这个公钥用户同意后电视把公钥存起来后续连接视为已授权设备。所以遇到unauthorized正确操作是看一眼电视屏幕把确认框点了。框里的“允许USB调试吗”后面跟着一串指纹字符不用管它内容是什么直接勾选“始终允许”点确定。如果电视上没弹框可能是弹窗被其他界面盖住了或者电视端的ADB服务没起来。先把调试开关关掉再打开重新执行adb connect确认框通常会重新弹出来。4. 连接失败的排查链路按顺序把四个坑各过一遍ADB连接失败报错信息就那几类但背后的原因五花八门。我这里把最常见的四种情况按排查顺序排好从最外层到最内层一步步定位。4.1 网络不通ping一下就知道cannot connect to 电视IP:5555是最常见的报错。这个报错的优先级最高因为如果网络这层就不通后面所有操作都白搭。排查步骤电脑命令行ping电视IPping 电视IP能收到回复说明网络通收不到则说明网络层有问题。网络不通时检查电视和电脑是不是真的在同一局域网。很多家庭有多个路由器电视连的是客厅路由电脑连的是书房路由虽然都是同一个宽带但不是同一网段等于两个独立局域网互相隔离ADB连接自然失败。检查路由器是否开了AP隔离。管理后台里找“无线设置 - AP隔离/客户端隔离”关掉再试。检查电视IP是否变了。有些路由器开的是动态DHCP电视重启后会重新分配IP如果电脑端还拿着旧IP去连结果必然是超时。每次连接前都确认一下当前IP。防火墙也可能拦ADB连接。Windows的防火墙在某些情况下会拦截入站连接如果之前网络检查都过了一遍还是连不上临时把防火墙关掉试一下能通的话再给adb.exe加一条入站放行规则。4.2 ADB unauthorized指纹密钥出了问题Unauthorized的问题是第二常见的前面提过电视上弹窗确认就能解决。这里说一种更隐蔽的情况电视之前授权过这台电脑但后来把授权记录清掉了。这种情况下执行adb connect电视端通常不会再弹确认框而是直接静默拒绝。可以这么处理电脑端把本地ADB密钥删掉让ADB重新生成一对新密钥Windows下删除C:\Users\你的用户名\.android\adbkey和adbkey.pubmacOS/Linux下删除~/.android/里的同名文件。删完执行adb kill-server adb start-server重新adb connect这时电视上会重新弹出确认框点允许授权就恢复了。这种方法也适用于换了台电脑、但又想用原来的密钥连电视的情况——把原电脑的adbkey.pub内容追加到新电脑的adbkey.pub里不过操作起来比较绕不如直接删了重新授权方便。4.3 设备显示offline连接状态异常adb devices显示的结果是offline说明TCP连接建立了但ADB协议层面不通。原因可能是电视端的ADB服务死了、版本不匹配或者连接通道被占用。优先做的是重启ADB服务adb kill-server adb start-server然后重新连接adb connect 电视IP:5555如果还是offline把电视上的ADB调试关掉再打开强制重启电视的ADB服务。这一步做完90%的offline问题能解决。剩下10%可能是ADB工具版本太老。我遇到过旧版adb连接新版电视系统时协议不兼容的情况换成最新版的Platform-Tools就正常了。去下载最新版本覆盖一下工具包再走一遍重启流程。还有一种情况是电视重启后ADB被系统回收了。有些电视设计成重启后ADB不自动恢复需要重新进开发者选项确认开关状态。如果之前是常开的重启后变回关闭就要重新打开。4.4 电视端弹窗被忽略最常见的低级问题这个前面提过但值得单独拎出来说因为太容易发生了。执行adb connect之后很多人电脑屏幕上没有立刻出现状态反馈就一直盯着命令行等。实际上此时电视上可能已经弹出了确认框只是你没注意到。等几秒钟没动静命令行上慢慢悠悠地显示unauthorized再去电视上看弹框早就因为超时自动消失了。最好的做法是执行连接命令前就盯着电视屏幕adb connect敲完回车的一瞬间注意力放在电视上。看到弹框立刻点确认。如果错过了就重新adb connect一次确认框会再次弹出来。还有一种情况是电视端弹框被系统拦截了。部分国产定制系统的“允许未知来源”没开导致调试授权弹框直接不显示。先到设置里把未知来源开了再重新连接。4.5 定位问题的顺序把这些坑按顺序排一遍排查效率最高现象优先检查项操作cannot connect网络ping电视IP确认连通性cannot connect端口确认电视ADB开关已打开unauthorized电视弹窗看电视屏幕点确认unauthorized密钥删除电脑端旧密钥重新授权offlineADB服务重启电脑ADB服务offline电视ADB状态关掉再打开电视的ADB调试这套顺序跑完之后线上99%的连接问题都能解决。剩下的可能就需要抓包分析或者看日志了属于极少数的特殊情况。5. 调试过程中的进阶操作装应用、抓日志、看状态连接打通了真正的调试工作才刚开始。这里分享几个高频操作都是从实际调试里验证过的方法。5.1 安装与卸载应用把APK装到电视上有几种方式# 常规安装手机APK或TV APK都可以 adb install D:\path\app.apk # 如果APK已存在使用-r覆盖安装 adb install -r D:\path\app.apk # 降级安装新版本号高于旧版本会失败用-d强制降级 adb install -d D:\path\app.apk安装成功会提示Success失败会给出错误码。最常见的INSTALL_FAILED_USER_RESTRICTED就是未知来源没开回头去电视设置确认一下。卸载应用adb uninstall 包名如果你想卸载系统预装软件需要先用adb shell pm uninstall -k --user 0 包名的方式这个命令是禁用应用而不是物理删除禁用后悔还能恢复。5.2 抓取日志排查崩溃电视端应用崩溃、闪退、黑屏光靠肉眼根本不知道发生了什么adb logcat是排查这些问题最趁手的工具。先抓全部日志adb logcat这个命令会把电视端的系统日志、应用日志全部实时打印出来内容非常多刷屏速度快得吓人。带过滤条件抓取会更好用。按进程名过滤adb logcat --pid$(adb shell pidof -s 包名)按关键词过滤adb logcat | grep 包名Android 7以上系统还能抓不到完整日志时先清空日志再操作操作完再抓定位问题更精准adb logcat -c adb logcat crash.log这个流程在开发电视应用时几乎是每天必用的。拿到崩溃现场后搜索FATAL EXCEPTION、AndroidRuntime这些关键字崩在哪一行代码一目了然。5.3 查看电视状态与常用查询调试时还经常用到这些查询命令# 查看当前连接设备 adb devices # 查看电视当前运行的应用 adb shell dumpsys activity top | grep ACTIVITY # 查看电视系统版本 adb shell getprop ro.build.version.release # 查看电视屏幕分辨率 adb shell wm size # 查看CPU和内存占用 adb shell topadb shell相当于拿到了电视的命令行能干的事非常多。比如用adb shell input keyevent KEYCODE_HOME模拟主页键adb shell screencap -p /sdcard/screen.png截图adb pull /sdcard/screen.png把截图拉到电脑上看。测遥控器功能时也可以模拟按键输入非常方便。5.4 调试完记得关掉ADB这个建议可能和一些人的需求相悖——热词里就有“电视机永久打开ADB”的说法但我的看法是日常调试完把ADB调试关掉需要的时候再开。原因是安全考虑。ADB调试开启后电视会开放5555端口同一局域网内其他设备理论上都可以尝试连接。如果电视同时还开了远程控制、投屏等功能攻击面会更大。开发调试场景下开一会儿没问题但作为日常状态保持常开风险不值得。尤其是那些家里有智能电视、访客网络、公共场合电视的场景ADB端口一旦暴露轻则被装垃圾应用重则被远程控制。电视端的ADB开关虽然重启后可能会自动关闭很多国产系统就是这么设计的但这何尝不是一种安全机制。在长时间不使用时可以通过以下步骤断开连接# 断开当前连接 adb disconnect # 或者彻底停掉电脑端ADB服务 adb kill-server电视端把“ADB调试”开关关掉或者电视重启端口的监听服务就会停止。我自己的习惯是每次做完一轮调试工具收尾时顺手把电视端的ADB开关关闭下次需要时再打开遥控器按几下的事情。这个习惯保持了很多年电视使用中没出过任何被异常连接的问题。说到最后再分享一个思路。ADB连接遇到问题时很多人第一反应是换工具、重启电视但更高效的办法是先想清楚问题出在哪一层——网络层、协议层还是授权层。网络层ping一下就知道协议层看状态是offline还是cannot connect授权层看是unauthorized还是device。分层排查比盲试快得多。这套方法不只适用于电视手机、盒子、开发板凡是Android系统设备排查ADB连接问题全都是同一个套路。祝各位一次连通。
返回列表