USBManager — Android USB 管理模块

Stars GitHub Downloads License KernelSU LSPosed

中文 | English

一个基于 LSPosed 框架的 Android 系统模块。手机通过数据线连接电脑时,它会显示 USB 选择窗口,让用户决定本次连接的 USB 模式和 ADB 状态。

本模块100%开源。源代码仓库链接见底部。

connection mainpage

实验性功能(点击展开)

“电脑识别与记忆”默认关闭。主应用只提供方案导入、调用和管理界面,设备支持检测、USB 接口、鉴权算法及配套 Windows 后端均由方案提供。

  1. 从可信作者处取得方案 ZIP,在“电脑识别与记忆”页面导入,检查作者、版本及 root 执行提示。
  2. 授予 root 权限,运行当前方案的“检测此设备”。是否需要数据线或配套电脑程序,以该方案的说明为准。
  3. 检测通过后手动启用识别,使用该方案配套的 Windows 程序,在手机打开首次配对窗口。
  4. 配对成功后可编辑电脑名称、USB 模式和 ADB 配置;以后插线按方案的鉴权结果自动应用配置。未知电脑、失败或超时仍进入正常 USB 选择流程。

用户可以自己编写方案和 Windows 后端。固定的只有应用与方案包之间的控制接口,手机与 Windows 的通信协议由作者决定。两套旧内置方案、它们的鉴权运行文件、设备检测及原有 Windows 后端已移入 额外识别方案项目,主应用不再自动选择或运行任何内置识别方案。

导入、更新、切换方案或固件变更后需重新检测并启用。移除方案会关闭识别并要求方案恢复 USB 状态,保留其电脑记录。两套参考方案会迁移旧版电脑记录。运行效果取决于方案和设备,不能用导入成功代替真实支持检测。

不使用此功能无需授予本应用 root 权限,基础 USB 管理不受影响。


功能

  • 自动检测连接:自动识别手机以设备模式连接电脑的事件。
  • 连接时选择模式:支持仅充电、文件传输(MTP)、图片传输(PTP)、USB 网络共享(RNDIS)和 MIDI,自动适配横屏和竖屏。
  • ADB 一键开关:在选择窗口中决定本次是否启用 USB 调试。
  • OTG 不弹窗:手机作为 USB 主机连接 U 盘、键鼠等设备时交给系统原生处理。
  • 拔线自动关闭 ADB:可在设置中关闭;启用时,拔出数据线后自动关闭 USB 调试。
  • 锁屏延迟弹窗:默认等待解锁后显示选择窗口,也可允许锁屏时弹出。
  • 游戏免打扰:默认关闭,可指定应用在前台时跳过选择窗口,执行“仅充电(推荐)”或“使用默认配置”。
  • 实时状态页:底栏切换“主页 / 状态 / 设置”;状态页显示当前连接、USB 模式与 ADB 状态,可直接修改并等待系统确认。

安装

前置条件

  • 已解锁 Bootloader 并取得 root 的 Android 设备。

  • 已安装支持现代 Xposed API 101 或更高版本的 LSPosed 兼容框架。

  • APK 最低要求 Android 8.0(API 26);设备能否运行模块还取决于框架和系统 USB 实现的兼容性。

步骤

  1. 从 Releases 下载最新 APK。
  2. 安装 APK。
  3. 在 LSPosed Manager → 模块中启用 USBManager。
  4. 作用域勾选 system(系统框架)。
  5. 重启设备。
  6. 打开 USBManager,确认模块检测显示正常。

使用

  1. 插入连接电脑的数据线。
  2. 在 USB 选择窗口中选择模式和 ADB 状态。
  3. 点击「确定」应用。

默认 USB 模式为仅充电,默认关闭 USB 调试;拔线自动关闭 ADB 默认开启,锁屏弹窗默认关闭。这些选项均可在应用主页修改。

构建

git clone https://github.com/TigerSpirit217/USBManager.git
cd USBManager
./gradlew :app:assembleRelease

调试

可在 LSPosed Manager 的日志页面搜索 USBManager,或使用:

adb logcat -s USBManager

主要日志标记:

  • [WATCHER]:USB 连接和选择流程。
  • [AUTH]:电脑识别流程。
  • [RX]:系统广播。
  • [HOOK]:模块加载。
  • [CLIENT]:应用与系统模块通信。
  • [CONTROLLER]:USB 模式和 ADB 应用。

许可证

Copyright © TigerSpirit217 · Mulan PubL v2

本项目使用木兰公共许可证,第 2 版(Mulan PubL v2)。完整授权见 LICENSE。

源码与发布

Releases

Version 8

Stable

10/11/2026, 1:16:50 PM

✨ 新增:

  • 完整横屏适配:应用整体适配横屏显示。
  • USB 实时状态:新增 USB 实时连接状态与ADB状态显示与切换功能。
  • 不兼容模块检测:新增不兼容模块检查与提醒,帮助排查因模块冲突导致的功能异常。
  • 主题与自定义:支持手动选择深浅色;支持使用系统动态颜色,或自定义应用主题颜色。提供两种底栏样式供选择。
  • 独立应用语言设置:完善中英双语支持,现已可通过 Android 系统设置单独设置 USBManager 的应用语言。

🔧 优化:

  • 移除不必要的依赖及测试文件,进一步精简应用体积,优化发布构建。

📦 发布说明

今后本仓库将只发布release包,若您对debug包有需求,可在 Debug文件夹 下载最新版本的debug包。

Assets

1

Version 7

Stable

10/7/2026, 9:01:08 AM

✨ 新增:

  • 横屏状态USB模式选择窗口
  • 游戏免打扰功能,当指定应用处于前台时,不再弹出USB选择窗口,避免打断游戏操作

🔧 优化:

将电脑识别与记忆功能与主项目剥离,并允许用户使用自己或其他渠道来源(请务必核实来源!)的方案包。详情见 额外识别方案项目 。

Assets

2

Version 6

Stable

9/18/2026, 10:13:32 AM

✨ 新UI

  • 总体UI重做,视效更美观
  • USB 配置设置合并,视觉效果统一
connection mainpage
感谢@QWEOVO123提供UI设计参考。

🐛 修复

重新检测或其他页面返回时,保持激活状态卡稳定,避免页面闪烁

Assets

2

Version 5

Stable

9/17/2026, 7:10:01 AM

⚠️ 电脑识别与记忆(实验性功能,点击展开)

重新加入「电脑识别与记忆」实验性功能。本次通过独立的 USB Authenticate 接口验证电脑身份,不再依赖 USB PID/VID。

该功能需要 root 权限,并须配合 Windows 后端 USBManagerWinBackEnd 使用。关闭该功能后,应用不会申请 root 权限,原有的 USB 模式选择、ADB 开关及拔线自动关闭 ADB 等功能不受影响。

鉴权端口采用即用即开、用完即关的方式。启用该功能后,从插入数据线到显示 USB 选择窗口或自动应用配置所需的时间会明显增加。当前主要适配 AOSP、Google 原生及类原生系统,实际兼容性请以应用内检测结果为准。

使用前请务必阅读 README 中折叠区域内的完整说明。

✨ 技术信息

首个版本提供通用 ConfigFS / FunctionFS 和 Qualcomm / QTI USB HAL 两类手机端实现。

已在 Nothing Phone Android 16 上验证 qxr FunctionFS 与临时 USB composition 方案,可在不修改内核的前提下提供 MTP、Authenticate、ADB 三接口复合设备。

鉴权使用 FunctionFS 原生数据通道和 root app_process 服务。电脑身份采用持久 ECDSA P-256 密钥;握手采用临时 ECDH P-256、HKDF-SHA256、AES-256-GCM 和完整转录签名,并严格区分普通身份查询与用户明确允许的配对操作。


🔧 优化

同步更新中英文界面文案及 README。

🐛 修复

修复快速拔出并重新插入数据线后,不再弹出 USB 选择窗口的问题。

隔离上一连接遗留的弹窗回调,避免旧窗口的确认或关闭事件干扰新的 USB 连接。

感谢@QWEOVO123的支持。

Assets

2

Version 4

Stable

9/12/2026, 7:27:46 AM

🐛 修复

Android 16 / 部分定制 ROM 开机崩溃:注入阶段 system_server 的 Context 尚未完成初始化导致 HostProviderClient 空指针、注册广播时 ActivityManagerService 尚未就绪导致注册失败。现改用 ActivityThread.getSystemContext() 直接引导初始化,注册广播前先轮询等待 AMS 就绪,Application.attach 保留为兜底路径。(感谢 @GADDQ 提交 PR #3)

🔧 优化

开启 Release 构建 R8 代码混淆与资源压缩:减小包体积、提高安全性,并新增完整 ProGuard 保留规则(模块入口、system_server hook 反射路径、Gson 跨进程载荷、UsbMode 枚举)。

开启 staticScope 静态作用域注入,避免误勾选。

修正软件内部分语言表述问题。

Assets

2

Version 3

Stable

9/7/2026, 9:57:44 AM

⚠️ 重要变更

移除「设备识别 + 记忆」功能:由于ADB 设备端无法读取主控端 PID/VID,不同电脑会被误判成同一台并套用别的配置。现改为每次连接都弹窗选择,不再记忆、不再自动套用;OTG(手机作为 USB 主机)保持不弹窗。升级后自动清理旧版已保存的识别数据。
如果您有比较好的识别方案,欢迎提交Issue我们一起讨论!


✨ 新增

锁屏弹窗开关(默认关闭):锁屏插入时先不弹,解锁后再自动弹出,规避后台启动限制并避免锁屏泄露信息。 中英双语:界面与通知文案跟随系统语言切换。

🔧 优化

跨进程鉴权:以调用方 UID 白名单(system 1000 与模块自身)为准,BRIDGE_TOKEN 降为纵深防御;选择器通知可见性改为 SECRET。 动态广播兼容:适配 SDK 33+ 的 exported 标志(bridge 用 RECEIVER_EXPORTED、USB_STATE 用 RECEIVER_NOT_EXPORTED),修复广播注册失败。 移除死代码反射路径,统一默认模式取值与展示。

🐛 修复

确认后又弹一次窗口:应用配置触发 USB 重新枚举被误判为新连接。新增 3s 抑制窗口并清理残留 pending-apply,确认后不再重复弹窗、拔线后不再闪窗。 拔线后选择器残留:新增 ACTION_DISMISS_CHOOSER 广播,拔线时主动关闭仍在屏上的选择器。 默认「仅充电」不一致:统一为 CHARGING。

Assets

2

Version 2

Stable

8/28/2026, 4:57:38 PM

已知bug:

无法正确识别不同设备,对于不同设备都只会套用已保存的设备策略。(预计下个版本修复)


🔧 优化

ADB 状态管理:连接时按策略开启 ADB,拔线后保证 adbd 守护进程彻底关闭。
跨进程通信改用 BRIDGE_TOKEN 鉴权,移除签名权限依赖,兼容 system_server 调用。
原生落地 JSON 统一走 Gson 单例,删除手写转义。
清理死代码、补齐空 hostKey 保护、轮询命中提前结束、确认宽限窗口对齐 30s。

🐛 修复

ADB 关闭时连接已保存电脑会反复开关约 3 次后才常开
应用配置触发 USB 重新枚举,产生瞬时 DISCONNECTED→CONNECTED;现对断开事件加入 800ms 去抖,上升沿会自动取消挂起的断开动作,ADB 不再闪烁。
ADB 开启时拔线会先弹“USB 调试已连接”通知
改为优先通过框架 AdbService 驱动 ADB(统一管理设置、adbd 与通知生命周期),不再绕过导致通知悬空。

Assets

2