HolySister22/Toy-Android-App

GitHub: HolySister22/Toy-Android-App

一款隐私优先、无需账号的开源 Android 蓝牙玩具遥控应用,支持本地 BLE 直连和可选的自托管远程控制。

Stars: 0 | Forks: 0

# Toy Remote 一款免费、隐私的 Android 应用,用于控制蓝牙 (BLE) 玩具 —— 包含一个简洁的经典面板、一个有趣的“波浪”面板,以及**可选的**长距离远程控制功能。该功能可以通过您自行运行的 relay server,在两部手机之间进行控制。 无需账号。无跟踪。本地蓝牙控制完全离线工作。 ## 下载与安装 1. 前往 [**Releases**](../../releases) 页面并下载最新的 `toy-remote.apk`。 2. 在您的 Android 手机上,打开该文件并点击 **Install**。如果出现提示,请允许从未知来源 / 此浏览器安装。 3. 打开 **Toy Remote**,授予其请求的蓝牙(在 Android 9–11 上还包括位置)权限 —— 这是 Android 进行 BLE 扫描所必需的,且仅用于寻找您的玩具。 ## 功能特性 - **本地控制(仅限蓝牙)** —— 连接您的玩具并直接驱动它。 - **经典** 面板:每个电机一个滑块,外加一个“所有电机”总滑块。 - **波浪** 面板:为每个电机上下拖动滑块。 - **悬浮**:松开手指后,它会保持在当前水平。 - **序列**:通过拖动录制上下起伏的模式;松开手指后,它会无限循环播放。 - 通过将一个滑块停留在另一个滑块上方来组合电机;长按可拆分。 - **远程控制(可选)** —— 一部手机连接玩具(“共享”),另一部手机通过 relay server 从任何地方驱动它(“控制远程玩具”)。请参阅 [远程 / 自托管](#remote--self-hosting)。 - **安全第一。** 所有数值在到达硬件之前,都会在 Rust core 中被重新限制在玩具的安全上限内;如果 controller 断开连接或失去响应,gateway 会进入安全失效状态(将所有输出逐渐降为零)。 ## 远程 / 自托管 远程控制需要一台小型的、始终在线的 **relay server**,且两部手机都能访问它。该应用默认指向一个私有服务器,因此**开箱即用时,所有人都只能使用本地蓝牙控制** —— 远程控制属于“自带服务器”模式。 要为您自己启用远程控制: 1. 构建并运行 relay:`cd rust && cargo run --release -p toy-server`(监听 `0.0.0.0:8080`)。将其置于 TLS 之后,以便应用可以使用 `wss://your-host/ws`,或者通过诸如 [Tailscale](https://tailscale.com/) 的私有网络访问它。 2. 在应用中:**Settings → Signaling URL** → 您服务器的 `ws(s)://…/ws`。两部手机必须使用相同的 URL 并且能够访问它。 relay 仅在配对的两部手机之间转发不透明的消息;它完全不需要了解玩具本身。 ## 从源码构建 **Toolchain:** Flutter (stable)、Android SDK + NDK、JDK 17,以及配置了 Android targets 的 Rust toolchain (`rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android`)。 ``` cd app flutter pub get flutter build apk --release # signed if android/key.properties exists, else debug-signed ``` 输出的 APK 位于 `app/build/app/outputs/flutter-apk/app-release.apk`。 ### Release 签名 Release 构建使用 `app/android/key.properties`(已被 git 忽略)进行签名。要为您自己的构建签名,请创建一个 upload keystore 和该文件 —— 请参阅 [Flutter 签名指南](https://docs.flutter.dev/deployment/android#signing-the-app)。 如果没有此文件,项目仍然可以构建(退回到使用 debug 签名)。 ## 项目结构 ``` app/ Flutter app (UI + Bluetooth + relay client) lib/ Dart source rust/ Rust FFI crate (rust_lib_toy_remote) bridging Dart <-> core rust/ toy-core/ Toy-agnostic core: profile parsing, safety governor, encoding toy-net/ Transport abstraction (test harness) toy-server/ The relay / signaling server ``` **核心大脑**(配置文件、安全限制/渐变、命令编码、session 状态)使用 Rust 编写,并由应用和 server 共享;玩具被建模为通用的 *channels*,而不是某种特定的设备类型。 ## 许可证 本仓库中的代码基于 [MIT License](LICENSE) 发布。 注意:本应用使用 `flutter_blue_plus` 及其免费的 **非营利** 许可层级。这涵盖了免费的、非商业用途的使用;如果对该应用收费,则需要获取商业版的 `flutter_blue_plus` 许可证。
标签:Android, DSL, Rust, 可视化界面, 硬件控制, 移动应用, 网络流量审计, 蓝牙低功耗, 远程控制