# DroidNet
**Repository Path**: SandMo/DroidNet
## Basic Information
- **Project Name**: DroidNet
- **Description**: Android device bridge service - HTTP+WebSocket server on 127.0.0.1:1145 for file system and hardware access
- **Primary Language**: Android
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-03
- **Last Updated**: 2026-08-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# DroidNet
一个轻量级的 Android 设备桥接服务,在本地 `127.0.0.1:1145` 启动 HTTP + WebSocket 服务,允许网页通过 REST API 和 WebSocket 实时访问设备的文件系统、硬件和外设。
说白了就是把你的安卓手机变成一个可以被网页控制的服务器——文件管理、手柄事件、麦克风、摄像头,全都能通过接口调用。
## 截图
## 界面
应用采用三页底部导航布局,暗色仪表盘风格:
- **概览** — 顶部渐变色状态卡片(运行时绿色 / 停止时红色),下方统计网格显示运行时长、请求总数、启动时间,底部设备信息列表(型号、系统版本、CPU 架构、应用版本)
- **控制台** — 终端风格实时日志输出,支持彩色日志级别、一键复制和清空
- **设置** — 分区管理权限(存储、悬浮窗)、接口配置(访问令牌)、行为选项(开机自启、悬浮窗保活、打开即启动)
## 功能特性
- **文件访问** — 读写 `/storage/emulated/0/` 下的所有文件,支持列表、读取、写入、新建、复制、移动、重命名
- **手柄支持** — 多 Xbox 手柄检测,通过 WebSocket 实时推送按键和摇杆事件
- **音频控制** — 扬声器音量调节,支持左右声道独立控制,PCM 数据播放
- **麦克风输入** — 通过 WebSocket 实时采集麦克风音频流
- **摄像头输入** — 通过 WebSocket 实时推送摄像头画面(JPEG 帧)
- **系统信息** — 设备型号、系统版本、屏幕、内存、存储、CPU 信息、已安装应用列表
- **权限转接** — 远程请求设备权限、启动应用、代理 Intent
- **后台保活** — 前台服务 + 悬浮窗,长期低功耗运行,开机自启动
- **访问控制** — 基于 Token 的接口鉴权,可自定义访问令牌
## 环境要求
- Android 8.0 (API 26) 及以上
- 需要以下权限(应用内引导授权):
- 存储访问(MANAGE_EXTERNAL_STORAGE)
- 悬浮窗(SYSTEM_ALERT_WINDOW)
- 麦克风(RECORD_AUDIO)
- 摄像头(CAMERA)
## 安装
### 方式一:直接下载 APK
前往 [Releases](../../releases) 页面下载对应架构的 APK:
| APK | 适用架构 |
|-----|---------|
| `app-arm64-v8a-release.apk` | 64 位 ARM(大多数现代手机) |
| `app-armeabi-v7a-release.apk` | 32 位 ARM(旧设备) |
| `app-x86_64-release.apk` | x86 64 位(模拟器) |
| `app-x86-release.apk` | x86 32 位(模拟器) |
| `app-universal-release.apk` | 通用版(包含所有架构) |
### 方式二:自行编译
```bash
git clone https://gitee.com/SandMo/DroidNet.git
cd DroidNet
./gradlew assembleRelease
```
编译产物在 `app/build/outputs/apk/release/`。
## 使用方法
1. 安装并打开 DroidNet
2. 切换到 **设置** 页,点击「存储访问权限」和「悬浮窗权限」完成授权
3. 切换到 **概览** 页,点击「启动服务」按钮
4. 服务启动后,状态卡片变为绿色,显示运行时长和请求计数
5. 在同一设备的浏览器中访问 `http://127.0.0.1:1145` 即可看到 API 列表
6. 如需鉴权,在「设置 > 访问令牌」中设置 Token,请求时携带 `Authorization: Bearer `
### 快速测试
```bash
# 健康检查
curl http://127.0.0.1:1145/api/ping
# 列出根目录文件
curl http://127.0.0.1:1145/api/fs/list?path=/storage/emulated/0
# 查看已连接的手柄
curl http://127.0.0.1:1145/api/hw/gamepads
# 获取系统信息
curl http://127.0.0.1:1145/api/hw/info
```
完整的 API 文档见 [PROTOCOL.md](PROTOCOL.md)。
## 配置
在 App **设置** 页可以配置以下选项:
| 选项 | 说明 |
|------|------|
| 访问令牌 | 设置后所有接口需要携带 Token 鉴权,留空则不鉴权 |
| 开机自启动 | 设备开机时自动启动桥接服务 |
| 悬浮窗保活 | 显示悬浮窗防止后台被杀 |
| 打开即启动 | 每次打开 App 时自动启动服务 |
## 项目结构
```
DroidNet/
├── app/src/main/java/com/droidnet/
│ ├── DroidNetApp.java # Application 入口
│ ├── MainActivity.java # 底部导航 + Fragment 切换
│ ├── ui/ # 三个页面 Fragment
│ │ ├── InfoFragment.java # 概览:服务状态、运行统计、设备信息
│ │ ├── ConsoleFragment.java # 控制台:实时日志输出
│ │ └── SettingsFragment.java # 设置:权限、配置、行为选项
│ ├── util/ # 工具类
│ │ ├── PrefManager.java # SharedPreferences 封装
│ │ ├── LogBuffer.java # 内存日志缓冲
│ │ └── RequestCounter.java # 请求计数与运行时长
│ ├── fs/FileManager.java # 文件操作
│ ├── hardware/ # 硬件访问
│ │ ├── GamepadManager.java
│ │ ├── AudioController.java
│ │ ├── MicCapture.java
│ │ ├── CameraCapture.java
│ │ ├── SystemInfoProvider.java
│ │ └── PermissionProxy.java
│ ├── server/ # HTTP/WebSocket 服务
│ │ ├── DroidHttpServer.java
│ │ ├── ApiRouter.java
│ │ └── AuthInterceptor.java
│ ├── service/ # 后台服务
│ │ ├── BridgeService.java
│ │ └── KeepAliveService.java
│ └── receiver/BootReceiver.java
├── app/src/main/res/ # 资源文件(暗色主题、矢量图标)
├── PROTOCOL.md # API 协议文档
├── LICENSE # MIT 许可证
└── build.gradle # Gradle 构建配置
```
## 技术栈
- Java 17 + Android SDK 35
- NanoHTTPD / NanoWSD(HTTP + WebSocket 服务器)
- AndroidX / Material Design 3(Dark NoActionBar 主题)
- Camera2 API(摄像头)
- AudioRecord / AudioTrack(音频采集与播放)
- InputDevice API(手柄检测)
## 注意事项
- 服务监听在 `127.0.0.1`,仅允许本机访问。如果需要远程访问,请自行实现端口转发或 VPN。
- 手柄事件捕获需要悬浮窗获得焦点(点击悬浮窗图标切换到手柄模式,图标变绿表示已激活)。
- 麦克风和摄像头功能需要对应权限,WebSocket 连接时自动开始采集,断开时自动停止。
- 在 Android 14+ 上,前台服务类型为 `specialUse`。
## 开源协议
[MIT License](LICENSE)
## 贡献
欢迎提 Issue 和 PR。如果你用到了这个项目,给我个 Star 就行。