# 本机无线启动(0.4.11) 首次使用按顺序完成: 找不到开发者选项时,先开启开发者模式。小米路径:**设置 → 我的设备 → 连续点击 OS 版本**,直到提示已进入开发者模式。开启后返回玻璃投影继续配对。主页面和配对小窗均提供帮助入口及「打开系统设置」按钮;未开启开发者选项时,首次配对会先展示说明。 1. 在玻璃投影里点「配对」。没有配对记录时,打开系统配对小窗并进入无线调试;已有记录时提示无需重复配对,并尝试自动连接。不需要通知回复、悬浮窗权限或提前开启无障碍。如果设备没有接受自动小窗请求,请从最近任务把「玻璃投影配对」切换为小窗,再点「打开无线调试」。不支持直达的系统会回到开发者选项;小窗也保留「改从开发者选项进入」入口。 2. 打开系统无线调试,选择「使用配对码配对设备」。保持这个窗口打开。 3. 在配对小窗中输入系统显示的 6 位码。小窗可拖动,避免挡住系统窗口;应用自动发现本机的配对端口,配对后再发现连接端口,不需要手抄地址和端口。「其他配对输入方式」仍提供原悬浮控件与通知回复,但部分系统设置会隐藏悬浮控件。 4. 收到「助手已连接」后,返回应用开启「玻璃投影」无障碍服务。 配对身份保存在应用私有、不可备份的目录;覆盖安装保留,卸载或清除数据后需要重新配对。配对码不写文件或日志。后续打开应用或恢复无障碍时优先自动发现并连接,失败重试间隔至少 30 秒;无线调试关闭、配对记录被移除或系统限制后台网络时仍需要用户处理。重启后助手进程不保留,应用不承诺在无线调试关闭时无操作启动,也不会代替用户点击系统授权。 v0.4.11 将连接区简化为一个「配对」按钮,移除「自动连接」「首次配对 / 重新配对」及 Shizuku 备用入口;旧 Shizuku 宿主兼容代码暂未删除。已配对且助手在线时仅提示无需重复配对;只有本地配对记录、助手不在线时先尝试认证,成功后再提示已配对。系统明确返回 AdbPairingRequiredException 时清除失效配对标记,用户本次点击会继续进入小窗配对;网络不可用等其他失败不清除配对记录,仍提供打开无线调试的小窗入口。后台正在连接时等本轮完成再判断,避免误把忙碌当作失败。UI 始终先引导连接助手,再引导开启无障碍。已启用的无障碍允许进入管理页面,不会因为连接失效而阻止用户关闭服务。 ## 实现边界 - v0.4.10 统一无线调试跳转:优先请求通用 action;小米系设备使用导出的 `com.android.settings.SubSettings` 与 `AdbWirelessDebuggingFragment` 页面参数。均由普通应用发起,不通过 shell 或 Shizuku 打开设置。入口不存在或被系统拒绝时返回开发者选项;系统更新改变子页面实现时,可使用小窗内手动备用入口。开发者选项未开启时仍先显示开启说明。 - NSD/mDNS 只接受本机网络接口地址匹配的服务;实际配对和连接固定使用回环地址 `127.0.0.1`,不连接同一 Wi-Fi 上的其他设备。 - 默认路径是独立任务中的普通 `WirelessPairingActivity`,通过 ActivityOptions 请求 freeform 模式;系统可以接受或拒绝请求,不伪造系统身份、不依赖 shell/Shizuku 启动小窗。Activity 可见期间搜索配对端口,停止显示时停止发现。返回应用会移除配对任务。 - 原悬浮控件与通知 RemoteInput 是备用路径,使用 150 秒短时前台服务;结束配对或关闭服务时移除悬浮控件。 - ADB 只执行固定的已安装 APK 入口,不提供任意命令输入。启动后关闭 ADB 连接,助手通过仅限本应用 UID 和 shell 的 Binder 调用管理内置 DEX。 - v0.4.9 修复配对后助手无法启动:旧命令立即后台退出,在本机 LibADB 的 legacy shell 会话中,子进程尚未完成脱离就结束,日志为空。现在用 `setsid -w nohup` 启动独立会话,保留启动流直到 Binder 握手完成(最长等待 12 秒),再关闭 ADB。单独加 `setsid` 但仍立即 `&` 退出的实机对照仍失败;保留会话至握手完成后成功。增加启动阶段诊断,不记录配对码或私钥。 - 独立助手使用进程锁避免重复启动;原有输出所有者死亡回收和停止协议继续生效。暂停动画会停止助手;应用更新后的版本检查防止旧宿主接入。 - 配对与 TLS 采用 LibADB Android,不自行实现密码协议。授权依然来自 Android 无线调试,不是权限绕过。 - 现阶段不实现完全自动首次授权,也不保证锁屏、系统重启、无线调试关闭后的无感重连。连接方式不改变系统切屏本身的硬件限制。 ## 依赖与来源 - [LibADB Android 3.1.1](https://github.com/MuntashirAkon/libadb-android/tree/3.1.1):ADB、配对与本机服务发现;使用 Apache-2.0 许可选项,组件另含 BSD/MIT 声明。 - [Conscrypt](https://github.com/google/conscrypt):TLS 实现,Apache-2.0。 - [Bouncy Castle](https://www.bouncycastle.org/licence.html):本地证书及密码原语,Bouncy Castle 许可。 - [Android 无线调试](https://developer.android.com/tools/adb#connect-to-a-device-over-wi-fi)、[通知直接回复](https://developer.android.com/develop/ui/views/notifications/build-notification#reply-action):系统操作与通知输入约束。 0.4.7 在测试机外屏上从应用按钮实际启动后,配对 Activity 处于 freeform 模式,开发者设置处于 fullscreen,截图及窗口状态均确认两者同时可见,未使用分屏。v0.4.9 沿用用户在小窗完成的配对身份,实机由应用自动连接并启动独立助手;认证后约 1.5 秒完成 Binder 握手,启动会话关闭后宿主与两份 DEX 子进程继续存活,渲染器输出首帧。此次成功路径未通过电脑启动助手。正式发布前仍需补充错误码重试、关闭无线调试后助手持续运行、重启后的恢复和更多设备验证。 同轮复测正常停用无障碍后,宿主和两个子进程全部退出;恢复原有无障碍状态后,应用再次使用已保存身份自动认证,约 1.7 秒重新接回独立助手并输出首帧。构建与 lint 通过(0 错误、25 警告)。