← 返回文章列表

旧手机的USB能力,终于能看懂了——USBcheck诞生记

前阵子写了"纯视"PureView,把吃灰的旧手机变成显示器。文章发出去之后,得到很多朋友的支持,看来大家手上的旧手机不少。

但折腾的过程中我慢慢发现一件事:旧手机的很多玩法,都卡在 USB 上。

想接 U 盘?得看支不支持 OTG。想直连显示器?得看支不支持 DP 视频输出。想传个大文件?得看是 USB 2.0 还是 USB 3.x。

旧手机本身其实没毛病,毛病是我们根本不知道它的 USB 接口是什么水平

于是,脑子又一热:要不,再写一个USB测试软件?

一、为什么会有这个想法?

起因很简单——我在折腾旧手机的时候发现,旧手机的利用价值,很大程度取决于 USB 接口的能力。

  • 能不能接采集卡当显示器?→ 要看 USB 控制器支不支持 UVC、速率够不够
  • 能不能当下载机挂 U 盘?→ 要看支不支持 OTG、能不能稳定供电
  • 能不能 Type-C 直连显示器?→ 要看支不支持 DP Alt Mode
  • 老一点的 Micro-USB 机型呢?→ 还要看支不支持 MHL

这些能力,手机说明书上不会写,厂商也不一定公开。

而且就算你手头有专业的检测工具——像 USB Device Tree、USBlyzer 这种——那界面满屏的英文术语,什么 Descriptor、Endpoint、Configurations,普通人看了直接劝退。

专业的工具专业的人用,普通人看不懂。这就是需求。

我要做的,就是一个普通人都能用的 USB 检测工具:插上设备,它用大白话告诉你,这个口到底是什么水平。

二、它能检测什么?

这个 APP 叫 USBcheck,安卓手机直接装上就能用。

插上 USB 设备(或者充电线),它自动弹出检测结果,主要看这几样:

  • 🔌 接口类型:是 Type-C 还是 Micro-USB?
  • USB 版本 / 速率:USB 2.0(480Mbps)还是 USB 3.x(5Gbps+)?
  • 🔋 充电规格:充不充得进电、什么协议(USB / AC / DC / PD)、大概多少瓦
  • 🖥️ 视频输出:支不支持 DP Alt Mode(Type-C 直连显示器)、支不支持 MHL
  • 🔗 OTG 能力:能不能接 U 盘、键鼠
  • 📝 外设详情:接了什么设备、厂商、型号、VID:PID

每个结果都是绿、黄、红、灰四种颜色,一眼看懂:

  • 🟢 绿色 = 支持 / 正常
  • 🟡 黄色 = 需要注意
  • 🔴 红色 = 不支持
  • ⚪ 灰色 = 系统没暴露信息,无法判断(不瞎编)

最贴心的一点:每一条结果都标注了来源。它是从系统属性读的,还是从 sysfs 里探测的,还是电池服务报的,全都写清楚。这样你就知道这条结论可不可信。

接口概览

三、它到底是怎么测出来的?

可能有人会问:一个小 APP,怎么知道这么多底层的 USB 信息?

原理其实不复杂,安卓系统本身暴露了不少 USB 相关的接口,我把它分成几个通道去探测:

检测项数据来源
端口类型 / USB 版本系统属性 sys.usb.controller
已接入外设UsbManager.deviceList
充电状态 / 协议电池服务 + /sys/class/power_supply
DP 视频输出/sys/class/typec 端口模式
Type-C 插入方向/sys/class/typec partner orientation
OTG / 主机模式USB 外设枚举 + dual_role_usb
总线活动/sys/bus/usb/devices 节点数

系统说一句,我翻译一句;系统不说,我就去底层目录翻一翻;还翻不到,就老老实实显示"无法判断"。

这就是它和那些专业工具最大的区别:专业工具给你原始数据,我帮你把数据翻译成大白话。 充放电检测 外接设备嗅探

四、老规矩,AI 当"全栈外援"

跟"纯视"一样的路子——我提需求,AI 写代码。

说实话,我对 Android 底层这些 API 是一知半解,什么 UsbManager、BatteryManager、sysfs 探测,真要我自己从头啃,估计得啃一两个月。

把需求往 AI 一扔:"做个 USB 检测 APP,面向普通人,结果要能看懂,别整一堆术语。"

AI 给我生成了一整套 Kotlin 项目,Jetpack Compose 界面、MVVM 架构,连 USB 插入自动弹出检测结果这种细节都安排上了。

整个开发过程还是那套熟悉的流程:

  • 我说"要显示充电协议",AI 加电池服务读取
  • 我说"DP 信息有些机型读不到,别瞎编",AI 加了"无法判断"的灰色状态
  • 我说"结果来源要透明,用户才知道可不可信",AI 给每条检测项都挂了 source 字段
  • 我说"专业术语太多,加个名词速查",AI 直接加了一个帮助 Tab

前后迭代了好多版本,AI 帮我写了大部分代码,我负责提需求、看结果、提意见。

你当产品经理,AI 当程序员。你做决策,它写代码。 这套模式,我是越用越顺手。

五、还是得诚实说几句

虽然这个 APP 做出来了,但有些事我得提前说明白,免得大家期望值太高:

  1. 部分机型读不到 DP / 充电协议等信息。有些厂商把底层信息藏得死死的,软件层面确实拿不到,界面会显示"无法判断",而不是瞎编一个。
  2. "理论速率"是接口上限,不等于实际速度。实际传输速度还取决于数据线、对端设备和文件系统。
  3. 充电功率是按协议估算的,不是硬件功率计实测,参考就好。
  4. MHL 在 Type-C 时代基本淘汰了,新机型基本都判定"不支持",这是事实,不是它不行。

做这个 APP 的初衷,就是透明、可信、看得懂。测不出来就明说,绝不忽悠你。

六、现在还不完美,想继续完善

这个 APP 从 v0.1 一路迭代到现在,已经陆陆续续补上了不少东西:

  • v0.1 基础检测:接口 / 速率 / 充电 / DP / MHL / OTG / 外设详情
  • v0.2 实测带宽测试:写读 32MB 临时文件,测出真实读写速度
  • v0.3 USB-PD 协商信息:尽力探测电压 / 电流 / 功率挡位
  • v0.4 检测历史 + 图片报告分享 + 实时充电功率曲线
  • v0.5 自动更新 + 二维码长按保存相册
  • v0.6 全页面使用者体验优化

但说实话,它离我理想中的样子还差得远。很多机型的底层信息厂商就是不给你读,USB 生态又五花八门,我自己测不到的地方还很多。

我一个人 + AI,慢慢磨。如果你也有想检测的 USB 能力、或者发现了什么 bug,欢迎告诉我。

最后

从"纯视"到"USBcheck",其实都是同一件事:让吃灰的旧手机,再发挥一次价值。

旧手机不值钱,但它身上那些被埋没的能力——视频输出、OTG、高速传输——值得被看见、被用起来。

这个 APP 不收费、没广告,就图一件事:下次你拿起旧手机的时候,能清清楚楚地知道——它能干什么,不能干什么。

下载和源码都在 CNB 开源仓库:kyeo.top/USBcheck

玩出花样的、踩到坑的、有更好建议的,随时在公众号私信我。

感谢每一位关注和支持的朋友。

USBcheck

旧手机的 USB 能力,一看就懂。

微信公众号:集家嘴的壳玛