# DeepSeek Harness Android App [English](README.md) · [返回项目首页](../../README.md) DeepSeek Harness 是这个社区维护的 Android WebView App 的显示名称。它直接打开插件提供的已认证 HTTPS 页面,不打包另一套 DSH 前端;App 与手机浏览器获得相同的 DSH 功能,以及电脑端配置的移动页面定制。 当前正式 App 为 **0.7.2**;构建号为 87。npm 插件与 Android App 独立编号、独立更新;插件升级不代表需要重新安装 APK。此次改进见 [0.7.2 更新](#072-更新)。 此 APK 支持 Android 10 及以上系统。iPhone 和 iPad 使用 [Safari 主屏幕 Web App 与可选网页推送](../../docs/WEB_PUSH.md),不安装 Android 包;本项目不分发原生 iOS App。 ## 安装与配对 1. 按[项目快速开始](../../README.md#快速开始)安装并启用插件。局域网配置可通过命令行或电脑端的 **移动访问** 面板完成。 2. 从 [GitHub Releases](https://github.com/saya-ch/dsh-mobile/releases/tag/android-v0.7.2) 安装已签名 APK。原有 HTTPS 通道可选兼容版 `.apk`;arm64-v8a/x86_64 设备使用实验性 iroh 时选完整版 `-iroh.apk`。两包使用相同包名和正式签名,选一个原位升级即可保留配对;不同签名的 Debug 包不能直接覆盖正式版,不要为绕过签名不匹配而卸载或清除数据。 3. 在电脑 **移动访问 → 局域网访问** 中生成密钥/配对链接,或配置远程通道并生成远程配对二维码。在 App 选择对应方式,扫码或粘贴链接。 4. 为电脑命名。每条局域网或远程配对单独保存;手机无需安装 cpolar、Cloudflare 或 Tailscale App。 局域网还提供扫描和手动 `https://IP:端口` 输入。自动发现不能绕过防火墙、校园网隔离或缺失的网络路由;需要使用可达地址或远程通道。手机浏览器另见[项目连接说明](../../README.md)。 ## 设备与设置 **已配对设备**列表显示名称、连接类型、地址、可达状态和最近连接时间。点按可连接;长按或点击“更多”可重命名、检测、排序或删除本机记录。新配对追加到末尾,**上移/置顶**只调整显示顺序,不改变启动选择。**添加电脑**可输入新配对链接;以相同方式重新配对同一安装实例会保留自定义名称。 | 位置 | 设置或操作 | | --- | --- | | 设备列表 → 右上角设置 → 启动行为 | **直接进入 DSH**(默认)优先连接最近使用且配对仍有效的电脑,即使保存了多台设备;**显示设备列表**则每次启动先选择。 | | 设备列表 → 右上角设置 → 应用图标 | 可选鲸鱼娘和六种鲸鱼标志配色,不改变包名或配对数据。 | | 设备列表 → 右上角设置 → 同电脑自动连接 | App 0.6.7+ 与插件 0.6.16+:保留默认的 **手动**,或选择 **自动检测并提示**、**自动切换并提醒**。局域网和远程须分别配对,草稿处理见[切换规则](#同电脑自动连接)。 | | DSH 页面 → 设置 → 通用设置 → 切换电脑 | 返回已配对设备列表;长按左上角抽屉按钮也可进入。这是 App 内网页的操作,不在设备列表设置里重复提供。 | | DSH 页面 → 设置 → 通用设置 → 页面缩放 | App 0.6.2+ 与插件 0.6.3+:80–125%,可恢复 100%;保存在当前 App 中,不刷新会话。 | | DSH 页面 → 设置 → 通用设置 → 移动端字号 | 默认 16px、范围 12–32px,按当前地址保存;受支持主题还提供代码字号及正文/代码字体选项。编辑输入框至少 16px,终端字体由 DSH 管理。 | | DSH 页面 → 设置 → 通用设置 → 移动页面模块 → 管理 | 选择当前配对设备加载的可选前端模块,不卸载电脑插件,也不撤销其权限;依赖和生效方式见[模块规则](../../docs/CLIENT_MODULES.md)。 | | DSH 页面 → 设置 → 通用设置 → 任务通知 | 申请 Android 通知权限或打开系统应用通知设置,限制见[通知与扩展](#通知与扩展)。 | 页面缩放影响整个网页,与按地址保存的文字偏好不同。App 专属操作只在原生 Bridge 支持时显示。原生页面跟随 Android 系统语言,支持简体中文、英文和意大利文;网页跟随 DSH 选择的语言,当前 DSH 尚未提供意大利语。 删除本机记录会移除保存的设备令牌和固定 CA,不等于撤销电脑授权或清除所有 WebView 短期 Cookie。需要立即终止访问时,请在电脑的 **移动访问** 中撤销设备。Android“清除应用数据”会删除全部配对和网页数据,不是普通重连的处理步骤。 ## 0.7.2 更新 仅当 `wss:` 证书回调的主机、端口与已保存的 HTTPS 入口一致,且证书通过固定 CA、有效期、签名和 SAN 校验时,才允许该连接。普通 HTTPS 导航与下载规则不变,第三方 WebSocket 路径仍需电脑端明确放行。这是 App 原生改动,仅升级 npm 不会安装;两种 APK 均沿用正式签名,可保留已有配对升级。 ## 0.7.1 更新 更新 AndroidX WebKit 至 1.18.0,构建工具更新为 AGP 9.4.1 / Gradle 9.8.2;保留 Android API 36 和既有配对格式。两种 APK 均沿用正式签名,可原位升级。插件 0.8.0 的 iPhone/iPad 网页推送属于电脑端功能,不要求为此升级 Android App。 ## 0.7.0 更新 App 0.7.0/构建 85 在完整版中增加可选的实验性 iroh 配对和原生传输,配合插件 0.7.0 及以上版本使用。兼容版不含原生库,保留现有 HTTPS 通道并继续支持 32 位设备。旧版更新入口默认下载兼容版;使用 iroh 时请主动选择完整版。两包均保留设备列表、HTTPS 配对和原有正式签名。独立实验 App 的记录不会自动迁移。 iroh 默认关闭。电脑端在 **移动访问** 的连接列表选择 **iroh(实验性)**,安装经过校验的组件并开启通道后,生成专属配对二维码。直连和中继可用性取决于两端网络,手机浏览器不能直接使用这条传输,详见 [iroh 使用说明](../../docs/IROH.md)。 ## 0.6.8 更新 App 0.6.8/构建 84 让首次页面下载沿用既有连接总期限,不再被较短页面计时器打断后自动重新下载。首次加载确实失败时保留明确重试;已经正常打开的页面仍可恢复连接,TLS 验证和取消能力不变。这项原生修复需要升级 App,不能仅靠更新插件获得。 ## 0.6.7 更新 App 0.6.7/构建 83 配合插件 0.6.16 及以上版本,新增可选的同电脑局域网/远程切换,默认仍为手动。分别配对两个入口后,在设备列表设置中选择切换方式;符合条件的同会话纯文本草稿可随自动切换迁移,但这不是完整页面状态迁移,详见[切换规则](#同电脑自动连接)。 前台恢复使用 DSH 的公开重连操作;App 0.6.7 还声明 `auth.renew` 能力,在一次持续断连中尝试一次原生续期。网页请求的续期沿用已有取消和连接期限,已显示文档上只保留小型 **停止重连** 按钮,不主动收起键盘;Session Cookie 按主机串行写入,跨 Activity 重建也等待系统真实回调。恢复不自动重放操作或刷新当前页面,根页面按返回仍退出 App。已有正式版配对和发布签名保持不变。 插件 0.6.16 在支持图片附件的专用移动菜单中提供 **相册 → 拍照 → 文件**。相册通过标准选择器只请求图片,不触发拍摄;取消不改变草稿,旧结果不能附加到其他输入框或文档。App 0.6.4 起已支持这条选择器路径,因此相册入口本身不要求另装 APK。**文件**仍是通用附件入口,实际选择器取决于 Android 与可用应用。浏览器配对和重连页还会记住当前网关主机名下受支持的 DSH 显示语言,Android 原生界面仍跟随系统语言。 ## 0.6.6 更新 Android 0.6.6/构建 82 避免续期或安装 Cookie 尚未完成时重复触发自动恢复。同一凭据的后台恢复会等待上一项任务真正退出,不再重叠执行。 取消和连接总期限会撤销排队任务及迟到结果,避免旧恢复覆盖新的操作。已有配对、包名和配对协议保持不变,升级无需清除数据或重新配对;网络是否可达、未保存网页能否恢复,仍取决于连接与 WebView 状态。 ## 0.6.5 更新 Android 0.6.5/构建 81 在启动连接、已配对电脑连接、局域网扫描和配对过程中均提供立即可用的 **取消连接**。取消后回到设备列表或可编辑表单,不删除原有配对;**停止重连**保留仍可用的 DSH 页面,空白或失效文档则返回列表。 首次等待沿用鲸鱼娘背景、居中动画和取消按钮,不叠加独立弹窗。可信网页首次显示后立即露出网页自身的加载进度;页面尚未可操作时只保留小型、非阻挡的取消按钮,出现可用控件后再移除。不等待所有图片完成,也不依赖特定布局类名。 每次连接共用一个总预算,涵盖排队、原生认证、重试和首次页面加载:**局域网 30 秒、远程 60 秒**,重试不重新计时。手动连接失败会明确结束等待;“暂不可达”的历史状态仍可主动重试,也不会因失败静默切换到其他电脑。 取消会撤销排队重试和迟到的导航结果,并请求断开原生网络操作;无法回滚电脑端已经接受的配对,一次性二维码若已被消耗,请重新生成。这些原生控制需要 App 0.6.5 及以上版本,仅升级 npm 不会安装它们。 ## 同电脑自动连接 App 0.6.7 配合插件 0.6.16 及以上版本,在设备列表 → 设置 → 同电脑自动连接中提供三种方式:**手动**、**自动检测并提示**、**自动切换并提醒**。默认仍为手动。局域网与远程须分别配对;只有成功原生配对/续期/探测响应中认证的 `installationId` 一致才分组。旧插件或无该字段的旧记录保持独立,直至认证刷新或续期学习,无需重新配对/重置;发现信息、名称和相同地址都不能授权分组。每个入口保留自己的令牌、`instanceId` 固定身份和 CA。 开启检测后,冷启动优先同电脑的有效局域网配对。使用局域网时 Wi-Fi 断开,会提前独立探测可信远程入口,不再等局域网续期超时才处理。前台网络回调及每 30 秒检查仍有防抖、限频与切换冷却。局域网续期仅在临时网络故障时可回退到该电脑可信远程配对;撤销、过期、TLS 和身份错误不会触发回退。后台或过期回调不能切换页面,不重放发送或其他写请求。 **不改 DSH 核心的受限纯文本迁移。** 已打开网页时,“自动检测并提示”会在替换页面前弹窗确认;“自动切换并提醒”可通过插件的公开会话输入接口,迁移当前唯一被观察会话的纯文本草稿(可为空,最大 256 KiB UTF-8)。源 WebView 会保留到目标独立认证成功、通过公开导航接口打开同一会话、恢复文本并读回验证完成。目标原稿必须为空或与待迁移文本完全一致;接管前还需核对目标导入版本和最终源版本。文本变化、目标冲突、迟到回调、导航或认证失败不能授权接管。成功后仅轻提示,接管完成才丢弃源页。同源恢复仍沿用原有页面保留逻辑。 这**不是完整跨地址状态迁移**:附件、结构化引用、命令模式、队列、已观察到的发送/媒体/输入法活动、多个输入会话或协议未知/缺失,不符合该自动迁移路径。源页不符合条件时仍提示确认;目标加载或迁移失败保留源页,不静默丢弃。取消/推迟保留页面。未观察到的隐藏草稿、分离的待完成发送/上传,以及滚动和面板不会迁移;公开接口不能证明这些内部状态全部安全。确认重载前请保存/复制相关内容。 迁移快照和租约仅在内存中短暂保存,不额外持久化跨地址传输数据;目标写入仍会使用 DSH 自身正常的草稿持久化。取消时仅在导入版本仍未变化的情况下回滚本次写入;渲染器崩溃或回滚接口不可用时,不能保证清除已被 DSH 保存的目标草稿。不重放发送或上传。真机覆盖范围与剩余网络限制见[验收与已知限制](#验收与已知限制)。 ## 连接恢复与信任 设备记录、可撤销的长期令牌和固定 CA 使用 Android Keystore 加密保存,旧版局域网/远程槽可迁移,无需重新配对。暂时无法解密时会报告错误,不当成空列表或用新凭据覆盖。CA 已过期的记录仍能删除或重新配对,但 TLS 继续拒绝过期证书。 App 只向已保存的精确 Origin 续期短期 Web 会话。局域网地址变化后,可在默认端口发现同一安装实例,并在原有固定证书校验下续期。远程 Origin 失效后无法从旧地址发现新地址,应扫描电脑端当前远程二维码验证;旧设备令牌不会发送给该未验证地址。 发现过程只携带元数据:同时使用 DNS-SD/mDNS、UDP 公告、端口 `3443` 主动查询,以及可见私有 Wi-Fi/热点 `/24` 网段的有限 HTTPS 探测。其他端口或可路由子网可手动输入地址;发现成功不代表已获配对授权。 局域网和自签 FRP 配对会在不发送设备凭据的情况下读取 CA,校验有效期及与配对密钥一致的指纹,然后按精确 Origin 在 App 内固定。其他 TLS 错误一律拒绝,不向系统安装 CA。同一 CA 下续签叶证书无需重配;CA 更换或过期则必须重新核对并配对。 常规远程入口使用系统信任的 HTTPS 证书。[托管自建 FRP](../../docs/SELF_HOSTED_FRP.md) 的公开 CA 路径支持 App 0.3.3+;[既有 frps 的自签入口](../../docs/ATTACH_EXISTING_FRPS.md)需要 App 0.4.6+,普通浏览器不会自动信任其私有 CA。证书有效期不等于无需维护即可持续可用。 临时断网不等于设备被撤销。收到在线撤销通知后,条目显示 **电脑端已移除**,后续探测不会恢复它;离线时被撤销的设备也可能只收到通用的 **配对已过期**,请使用新码重新配对。App 不会向未知令牌暴露设备是否曾被移除。 自动恢复在续期后尽量保留仍运行的 DSH 文档。渲染进程失效或启动失败时可能需要重新打开,未保存状态不保证恢复。受支持的旋转、窗口和键盘变化保留 WebView;系统主题/字体/语言变化、进程终止及渲染失败可能导致重建。 ## 文件、相机与输入 ### 标准附件 App 0.6.4+ 在 Android 13+ 对支持的图片过滤优先使用系统 Photo Picker,保留网页的 MIME 和多选要求,并遵守系统数量限制。其他过滤、拍摄请求、较旧 Android 或选择器不可用时使用 Documents;无需存储权限,也不保证出现某个厂商的相册。 标准文件回调绑定当前 WebView、Origin 和文档。支持导航监听时,文档替换前撤销旧请求,导航结束后才能再次选择。较旧 WebView 使用可用回调;如换页后选择器不再打开,可更新 WebView,或回设备列表重新打开电脑,无需清除数据。 DSH 的文件入口仍在 **添加** 组;当前附件 owner 支持图片时,Mobile 加入 **拍照** 和 **相册**。仅专用移动页面将 **相册 → 拍照 → 文件** 放在最前;其他官方项目保持上游默认顺序,普通/桌面页面的菜单排序不变。**相册** 打开仅选择图片的标准文件选择器,不请求拍摄;在 App 内使用上文所述的系统选择器,在手机浏览器内使用浏览器的文件选择器,无需新增 Bridge 能力或安装新版 App。**拍照** 仍明确申请相机权限后返回完整分辨率 JPEG。两者均交给 DSH 现有的草稿附件入口处理;取消选择不会添加附件,属于旧会话或已销毁页面的结果会被忽略。排查时可选一张小 JPEG/PNG,检查未发送草稿的预览;尚未提交的文件不必已经成为电脑端图片对象,无需发送模型请求来验证选择结果。 ### 键盘与页面空间 系统返回键先关闭支持的网页层级,再处理同源 WebView 历史,根页面退出;模型子菜单先退回上一级再关闭。WebView 上方不显示额外原生工具栏。 原生软键盘适配只在屏幕键盘占据窗口、未报告实体键盘且活动会话输入框聚焦时,把普通 Enter 用作换行。插件另有触屏浏览器规则,也将 Enter 用于草稿换行,触屏设备的外置键盘同样可能使用该规则。菜单、输入法组合和组合键仍交给 DSH,非触屏桌面行为不变;多行消息请点发送,DSH 常规键盘策略下也可用 Shift+Enter 换行。 系统栏、屏幕缺口和键盘空间只预留一次。WebView 151+ 为 App 的可复用版本化 DSH 资源提供至少 64 MiB HTTP 缓存配额;旧内核保持默认配额。Chromium 低于 100 的提醒不阻断使用,也不承诺旧内核支持全部 DSH 接口。 App 连接成功不代表网页脚本能够运行。DSH 0.2.1-rc.2 的前端含有 Chromium 92 无法解析的语法;系统内核无法更新时可使用已验证可用的浏览器,不必清除配对。插件的启动反馈与支持范围见[旧内核说明](../../README.md#app-与手机浏览器)。 ### 语音 DSH 通过 `getUserMedia` 录音并交给电脑已配置的语音提供方,不使用浏览器 SpeechRecognition 或扩展 Bridge。Android 申请麦克风权限,仅接受配对 HTTPS Origin 的纯音频请求;电脑组件、模型和网络仍需可用,录音授权不代表转写成功。同源前端插件共享该页面权限。 ## 通知与扩展 任务提醒依赖页面仍存活时收到的 Host 完成事件和待确认卡片。锁屏只显示通用文案,点击返回 App;它不是离线推送服务,完成事件需要 SSE,断连后不会补发。Cloudflare 快速隧道不支持该事件流,详见[通道限制](../../docs/CLOUDFLARE_TUNNEL.md#快速隧道的功能限制)。 认证页面可通过 `dshMobile` Bridge 调用 `files.pick`、`camera.capture`、分享、剪贴板读写、任务通知/设置、切换电脑及页面缩放。扩展单独调用的 `files.pick` 返回一个文件,遵循声明的 MIME 类型,通过 Bridge 返回的文件最多 8 MiB;这不是 DSH 标准附件选择器的大小限制。 Bridge 文件/相机操作串行执行,最长等待五分钟。取消、文档/会话变化或 WebView 销毁会拒绝旧结果并清理资源。浏览器媒体选择等待实际结果、明确取消、中止或超时,恢复焦点不直接视为取消;不支持的能力返回 `unsupported`。 电脑端 `host.mjs` 扩展是另一层受信任 Node.js 代码,原生 Bridge 不能编辑或上传其源码。电脑管理的前端资源及扩展激活见[项目指南](../../README.md),可选 Worker 执行见 [Worker 指南](../../docs/EXTENSION_WORKERS.md)。 ## 安全边界 | 控制项 | Android 行为 | | --- | --- | | 传输 | 仅 HTTPS,Manifest 禁止明文流量。 | | 信任 | 按精确 Origin 使用系统信任或私有配对 CA,不广泛信任用户另装的系统 CA。 | | 导航 | 同源主页面保留,明确点击的外部 HTTPS 链接交给系统浏览器。 | | 权限 | 明确扫码/拍照时申请相机权限,DSH 录音时申请麦克风权限,通过前台操作申请或设置通知;标准选文件无需存储权限。 | | Bridge | WebMessage listener 校验精确顶层 Origin 和主框架,不使用 `addJavascriptInterface`,不暴露任意 Android API。 | | 限额 | 入站消息 1 MiB、剪贴板 256 KiB、二进制 Bridge 结果 8 MiB、回复 12 MiB。 | | 凭据 | Bridge 回复不自动附带已保存的配对凭据,也不提供直接读取凭据存储或私钥的接口;剪贴板和所选文件仍可能包含敏感内容,请仅使用可信扩展。 | | 下载 | 仅当前精确 Origin 的前台 GET,排除认证控制路径。 | | 存储 | 配对使用 Keystore 加密,网页数据位于沙箱;关闭云备份和设备迁移,签名/TLS 私钥不得进入仓库。 | ## 构建 使用 Android Studio 或 Android SDK 36 与 JDK 17;仓库包含 Gradle 9.8.2 Wrapper。 ```powershell Set-Location apps/mobile/android ./gradlew.bat :app:lintDebug :app:testDebugUnitTest :app:assembleDebug -x :app:lintAnalyzeDebugUnitTest -x :app:lintAnalyzeDebugAndroidTest ``` Debug APK 位于 `app/build/outputs/apk/debug/app-debug.apk`。正式发布沿用只保存在仓库 Secrets 中的签名密钥,本地未签名 Release 构建或 Debug 安装不能替代正式签名核验。 每次构建默认自带实验性 iroh 传输。需要 Rust 1.99.1(含 `aarch64-linux-android` 与 `x86_64-linux-android` 目标)与明确指定的 NDK: ```powershell Set-Location apps/mobile/android ./gradlew.bat :app:assembleDebug -PirohNdk=C:/Android/Sdk/ndk/25.2.9519653 -x :app:lintAnalyzeDebugUnitTest -x :app:lintAnalyzeDebugAndroidTest ``` 传 `-PirohNative=false` 可走免工具链的快速通道,构建的是不包含 iroh 传输的原 HTTPS 外壳,`IrohNative` 会报告自身不可用。使用 iroh 需要完整版构建。传输库生成在 `app/build/generated/iroh/jniLibs/` 下,永不提交。启用原生库的构建不改变包名与既定正式签名;实验阶段的独立 alpha 签名在这里不使用。 原生构建还会从固定提交的官方 Maven 归档引入与 `native/Cargo.lock` 匹配的 JVM TLS 校验组件。必须保留其 JNI/Proguard 规则,仅打包 `.so` 不足以完成接入。APK 验证会检查 Debug 和压缩后的 Release 是否保留所需 JVM 类和原生入口名称。 当前源码的 Debug 构建使用包名 `io.github.sayach.dshmobile.debug` 与 `-debug` 版本后缀,可与正式 App 并存,存储和配对彼此独立。它不会升级或迁移旧版无后缀 Debug 应用;切换包名时应保留旧应用和数据,不要为此卸载或清除。Release 构建继续使用 `io.github.sayach.dshmobile` 与既定正式签名。 已核验的正式版本为 [Android 0.7.2](https://github.com/saya-ch/dsh-mobile/releases/tag/android-v0.7.2),构建 87。兼容版与完整版分别附有对应的 `.sha256` 校验文件;两个公开下载均沿用正式发布签名及包名 `io.github.sayach.dshmobile`。旧版本历史集中在 [CHANGELOG](../../CHANGELOG.md)。 ## 验收与已知限制 - App 0.7.1 的两份公开 APK 均通过校验值、Manifest、既定正式签名、许可文本和对齐检查;完整版另检查两个 ABI 及保留的 JVM TLS/JNI 入口,兼容版确认没有原生库。本版未新增真机或公网中继回归。较早 arm64 开发构建的链路记录仍属历史证据,不能据此断言当前连接的数据已经过中继。 - App 0.6.8 的公开 APK 已核验身份、校验值和既定正式签名。Debug 包同签名原位升级后可打开 DSH,并保留原设备记录;受控慢链路故障注入在配对前中断,不计为通过。 - App 0.6.7 Debug 构建在 PJW110、Android 16、WebView 153 上,通过 USB 映射和固定 CA 的 HTTPS 连接隔离的 DSH 0.2.1-rc.2。真实自动接管保留同会话 Unicode 草稿,目标原生缩放/续期可用且不额外刷新;还通过确认取消、目标加载中按返回取消与迟到响应、原生续期取消、键盘返回和选择器取消。临时配对与映射已清理;这不是实际 Wi-Fi/蜂窝切网,也不是正式签名 APK 的装机验收。 - 连接控制的开发包使用 Debug 元数据 0.6.4/构建 80,在 PJW110、Android 16、Google WebView 153.0.8010.36 上,通过 USB 和固定 CA 的 HTTPS 连接隔离的 DSH 0.2.0-rc.2/插件 0.6.10。检查了配对/启动/已保存连接取消、系统返回、手动失败收尾,以及停止原生恢复后从失效页面返回;暂停模块响应时也验证了提前露出网页、非按钮区域触摸透传、取消和放行后完成。原配对保留,临时 QA 记录已清理。 - App 0.6.4 的 Debug 构建在同一 WebView 中覆盖文档替换/刷新、拒绝旧选择、接收受控 PNG 字节并形成已解码草稿预览;还检查了暂停导航及 HTTP 204 后选择器的可用性。更早的检查覆盖模型菜单返回、旋转保留草稿/引用/图片、已知撤销、重新配对、图标选择与列表顺序,均未发送模型请求。 - 这些观察不代表最终正式签名 APK 已完成真机验收,也不覆盖所有公网提供方、远程 60 秒期限、全部断连/恢复时序、HyperOS/旧 WebView 或所有屏幕/手势组合。自签 FRP 尚无真实 VPS 加手机的端到端验收记录;权限授予不代表语音转写成功,进程终止后的状态恢复也不作保证。 Apache-2.0 licensed. See [LICENSE](../../LICENSE).