docs: 重写 README 同步至 v20,新增 HTML 版页面
This commit is contained in:
@@ -1,55 +1,119 @@
|
||||
# SMB 极速 (SmbFast)
|
||||
# SmbFast 极速 SMB 客户端
|
||||
|
||||
一个以**传输速度为第一目标**的安卓 SMB 客户端,基于 SMB2/SMB3 协议(SMBJ 库)+ Jetpack Compose。
|
||||
一个以**传输速度为第一目标**的安卓 SMB 客户端,基于 SMB2/SMB3 协议(SMBJ 库)+ Jetpack Compose Material3,专为局域网 NAS 场景打造。当前版本 **v20(1.18.0)**。
|
||||
|
||||
## 功能
|
||||
[English](#english) · 极光玻璃界面 · 后台不断连 · HyperOS 灵动岛
|
||||
|
||||
- **连接管理**:添加/编辑/删除 NAS、Windows 共享连接,支持域账号、匿名登录,连接前可测试
|
||||
- **文件浏览**:共享目录浏览(面包屑导航)、新建文件夹、重命名、删除、按类型显示图标
|
||||
- **高速下载**:多流分块并行下载(默认 4 流、1MB 分块,可调至 16 流 / 8MB)
|
||||
- **上传**:系统文件选择器上传(顺序流);本地文件多流并行上传
|
||||
- **传输管理**:实时进度、实时速度(EMA 平滑)、取消、完成后直接打开
|
||||
- **设置**:并行流数、分块大小、下载目录
|
||||
---
|
||||
|
||||
## 为什么快
|
||||
## ✨ 功能总览
|
||||
|
||||
- **连接管理**:添加/编辑/删除连接,支持域账号与匿名登录;「自动发现共享」一键枚举服务器上全部共享(自研 DCERPC srvsvc 枚举,fnOS/群晖/Samba/Windows 实测可用),**支持多选共享批量创建连接**
|
||||
- **文件浏览**:目录浏览、面包屑导航、新建文件夹、重命名、删除、按类型显示图标
|
||||
- **高速下载/上传**:下载与上传均为**多流条带并行**(默认 4 流、1MB 分块,可调 16 流 / 8MB),交错式写入对机械盘友好
|
||||
- **后台传输**:前台服务(dataSync)+ WiFi 低延迟锁 + CPU 唤醒锁,退后台/熄屏不断连;通知栏显示进度与速度,可「全部停止」
|
||||
- **HyperOS 灵动岛**:小米 HyperOS 2 焦点通知 / HyperOS 3 超级岛适配,传输进度上岛(其他品牌自动忽略、零副作用)
|
||||
- **传输中心**:实时速度仪表(EMA 平滑)、会话峰值、失败任务一键重试、下载失败自动重试一次
|
||||
- **健壮性**:填错 IP 5 秒内给出中文原因(TCP 预探测 + 异常链穿透翻译);下载前磁盘空间预检;上传自动改名防覆盖远端文件
|
||||
- **安全**:NAS 凭据使用 AndroidKeyStore AES/GCM 加密存储;独立签名密钥
|
||||
- **诊断**:崩溃与传输错误自动写入日志,设置页可查看/复制
|
||||
|
||||
## 🚀 为什么快
|
||||
|
||||
| 手段 | 说明 |
|
||||
| --- | --- |
|
||||
| SMB 3.1.1 协商 | 优先协商 SMB3(大 MTU),单请求 MaxRead/MaxWrite 可达 8MB(SMB2 仅 1MB) |
|
||||
| 多流并行 | 大文件切成条带,每条带独立打开 SMB 句柄并行读取,靠 credits 在单连接上流水线并发 |
|
||||
| 大分块 | 减少 RTT 往返次数,请求粒度默认 1MB、可调 8MB(自动按服务器协商值截断) |
|
||||
| 连接复用 | Connection/Session/Share 全程池化,浏览无重复握手开销 |
|
||||
| 关闭签名/加密 | 默认不做 SMB 签名与加密以换取吞吐(服务器强制时自动回退协商) |
|
||||
| 本地零拷贝拼装 | FileChannel 定位写 + 预分配,各流直接写入自己的偏移 |
|
||||
| 多流条带并行 | 大文件切成条带,每条带独立打开 SMB 句柄并行读写,靠 credits 在单 TCP 连接上流水线并发 |
|
||||
| 轮转交错写入 | 各条带按块轮转推进,任意时刻写入聚在一个 ~8MB 连续窗口内整体前移——机械盘不再来回寻道,速度稳 |
|
||||
| 大分块 | 减少 RTT 往返,请求粒度默认 1MB、可调 8MB(自动按服务器协商值截断) |
|
||||
| 连接复用 | Connection / Session / Share 全程池化,浏览与续传无重复握手开销 |
|
||||
| 关闭签名/加密 | 默认不做 SMB 签名与加密以换取吞吐(服务器强制时自动回退) |
|
||||
| 本地零拷贝拼装 | FileChannel 定位写 + positioned read(pread),多协程并发安全 |
|
||||
| 内存护栏 | 全部条带缓冲合计硬性上限 48MB,配置拉满也不会堆溢出闪退 |
|
||||
|
||||
> 实测建议:手机连 5GHz Wi-Fi,NAS 开 SMB3(Windows 8+/Server 2012+ 默认开启)。千兆内网理论 110MB/s 左右,多流可基本跑满;百兆/2.5G 环境收益更明显(单流顺序读通常只能到 30~60MB/s)。
|
||||
> 实测建议:手机连 **5GHz Wi-Fi**、靠近路由器;NAS 开 SMB3(Windows 8+/Server 2012+ 默认开启)。千兆内网理论 ~110MB/s;手机无线一般可跑到 50~80MB/s。机械盘 NAS 追求稳定可把并行流数调到 2~4,固态盘 4~6。
|
||||
|
||||
## 构建
|
||||
## 📡 后台传输与灵动岛
|
||||
|
||||
要求:JDK 17+,Android SDK(platform 35、build-tools 34+)。
|
||||
- 传输任务自动拉起前台服务(`foregroundServiceType="dataSync"`),通知栏常驻进度(任务名、总进度条、速度),支持「全部停止」;任务结束服务自动退出
|
||||
- 持有 `PARTIAL_WAKE_LOCK` + `WIFI_MODE_FULL_LOW_LATENCY`,熄屏不断流
|
||||
- 小米 HyperOS:客户端本地上岛协议 `miui.focus.param`(`param` 双轨根节点兼容 HyperOS 2 / `param_v2` 兼容 HyperOS 3),首次上岛自动展开大岛,之后静默更新小岛;若系统未授予「焦点通知」权限则退回普通通知
|
||||
- Android 14+ 对 dataSync 前台服务有单日累计 6 小时政策上限,常规传输足够
|
||||
|
||||
## 🛠 构建
|
||||
|
||||
要求:JDK 17+,Android SDK(platform 35、build-tools 34+)。Gradle 仓库默认走阿里云镜像(`settings.gradle.kts`),国内环境无需代理。
|
||||
|
||||
```bash
|
||||
./gradlew :app:assembleDebug # 产物: app/build/outputs/apk/debug/app-debug.apk
|
||||
./gradlew :app:assembleRelease # 需要签名配置
|
||||
./gradlew :app:assembleDebug # 产物: app/build/outputs/apk/debug/app-debug.apk
|
||||
./gradlew :app:assembleRelease # 签名 release(密钥库 smbfast.keystore 已含在仓库)
|
||||
./gradlew :app:testReleaseUnitTest # 单元测试
|
||||
```
|
||||
|
||||
`local.properties` 中配置 `sdk.dir`。Gradle 仓库默认走阿里云镜像(`settings.gradle.kts`),国内环境无需代理。
|
||||
`local.properties` 配置 `sdk.dir`。签名配置见 `app/build.gradle.kts`(store: `smbfast.keystore`)。
|
||||
|
||||
## 使用
|
||||
> ⚠️ 仓库内含签名密钥与密码,便于克隆后构建同签名 APK(升级不冲突)。**若要公开仓库,请先把密钥移出 git 历史并更换密码。**
|
||||
|
||||
1. 首页点 **+** 添加连接:填服务器 IP(如 `192.168.1.10`)、共享名称(如 `share`)、用户名密码(或勾选匿名)
|
||||
2. 点「测试」确认可用,然后「连接」
|
||||
3. 浏览目录,点文件右侧菜单选择 **下载** / **下载并打开**
|
||||
4. 「传输」页查看实时速度;设置页可调并行流数与分块大小
|
||||
## 📖 使用
|
||||
|
||||
下载保存位置:优先 `Download/SMBFast/`,受限存储设备回退到应用私有目录(设置页可见实际路径)。
|
||||
1. 首页点 **+** 添加连接:填服务器 IP(如 `192.168.31.10`)、用户名密码(或勾选匿名)
|
||||
2. 点「自动发现共享」枚举全部共享 → **可连点多个胶囊批量勾选** → 「测试并连接(N 个)」一次建多条连接
|
||||
3. 浏览目录,点文件操作菜单选择 **下载 / 下载并打开**;工具栏可上传本机文件
|
||||
4. 「传输」页看实时速度与峰值;失败任务点 ↻ 重试
|
||||
5. 设置页可调并行流数、分块大小、查看下载目录与错误日志
|
||||
|
||||
## 已知限制
|
||||
下载保存位置:优先 `Download/SMBFast/`,受限存储回退应用私有目录。
|
||||
|
||||
### 局域网分发
|
||||
|
||||
电脑(如 `192.168.31.3`)在 `dist/` 目录起 `python -m http.server 8080`,手机浏览器访问 `http://192.168.31.3:8080/SmbFast-release-v20.apk` 直接安装,避免聊天工具传输截断(「解析软件包出现问题 33」多为此因)。
|
||||
|
||||
## 🧪 测试
|
||||
|
||||
- `ShareParseTest`:用真实 fnOS 服务器抓取的 NetShareEnumAll 响应(884 字节样本)做回归,锁定 DCERPC 解析正确性
|
||||
- `PathsTest`:SMB 路径工具(拼接/父路径/文件名)回归
|
||||
|
||||
## 📁 项目结构
|
||||
|
||||
```
|
||||
app/src/main/java/com/smbfast/app/
|
||||
├── smb/ # SMBJ 封装:连接池、错误翻译、自研 DCERPC 共享枚举、多流传输引擎
|
||||
├── transfer/ # 传输管理器(任务队列/进度/重试)+ 前台服务(保活/通知/灵动岛)
|
||||
├── ui/ # Compose 界面:极光组件库、全屏连接编辑器、浏览/传输/设置页
|
||||
├── data/ # 连接配置与设置(AndroidKeyStore 加密持久化)
|
||||
└── util/ # 崩溃日志、文件工具
|
||||
```
|
||||
|
||||
## 📜 版本历程
|
||||
|
||||
| 版本 | 主要变化 |
|
||||
| --- | --- |
|
||||
| 1.0 ~ 1.8 | 基础功能、Compose 界面、多流下载、崩溃日志体系、DCERPC 共享枚举字节级攻坚(fnOS 实测) |
|
||||
| 1.9.0 (v11) | 连接编辑改为全屏分区页面,视觉全面华丽化 |
|
||||
| 1.10.0 (v12) | 共享多选、批量建连;整体 UI 缩小一号 |
|
||||
| 1.11.0 (v13) | 前台服务保活 + WiFi/CPU 锁,修复后台传输被系统断连 |
|
||||
| 1.12.0 (v14) | 上传多流条带化;修复条带句柄互相截断的 bug |
|
||||
| 1.13 ~ 1.14 (v15/v16) | HyperOS 焦点通知/超级岛适配;修复横幅轰炸(islandFirstFloat 只在首条生效)与双轨协议 |
|
||||
| 1.15.0 (v17) | TCP 预探测 + 异常链穿透翻译:填错 IP 5 秒内中文报错 |
|
||||
| 1.16.0 (v18) | 编辑模式同样支持多选共享(当前连接用第一个,其余新建) |
|
||||
| 1.17.0 (v19) | 内存护栏、下载自动重试、空间预检、上传防覆盖、凭据加密、通知「全部停止」 |
|
||||
| 1.18.0 (v20) | 全局单层极光背景,修复切页闪烁 |
|
||||
|
||||
## ⚠️ 已知限制
|
||||
|
||||
- SMBJ 不支持 SMB3 Multichannel(多网卡聚合),多流并行在同一 TCP 连接上实现
|
||||
- 密码明文保存在应用私有 SharedPreferences(未加密)
|
||||
- 暂不支持 SMB over QUIC / 直连 TLS,未做流媒体边下边播
|
||||
- 下载断点续传未实现(失败重试为从头重传,已在路线图)
|
||||
- HyperOS 岛能否点亮最终取决于系统侧「焦点通知」权限,个别固件对侧载应用收紧
|
||||
|
||||
## 技术栈
|
||||
## <a id="english"></a>English
|
||||
|
||||
Kotlin · Jetpack Compose (Material 3) · SMBJ 0.15.0 (SMB2/SMB3) · BouncyCastle · Gson · Coroutines
|
||||
SmbFast is a speed-first SMB2/SMB3 client for Android (SMBJ + Jetpack Compose). Highlights: multi-stream striping transfers with rotationally-interleaved writes, persistent foreground service with WiFi/CPU wakelocks for background transfers, Xiaomi HyperOS Focus-Notification/"Super Island" integration, batch share discovery & multi-select connection creation (hand-rolled DCERPC srvsvc enumeration), AndroidKeyStore-encrypted credentials, and a glitch-free single global aurora UI. Build with JDK 17 + Android SDK 35: `./gradlew :app:assembleRelease`.
|
||||
|
||||
## 🧰 技术栈
|
||||
|
||||
Kotlin · Jetpack Compose (Material 3) · SMBJ 0.15.0 (SMB2/SMB3) · BouncyCastle · Gson · Coroutines · AndroidKeyStore
|
||||
|
||||
## 📄 许可
|
||||
|
||||
个人项目,仅供学习交流。请遵守所在网络环境的服务条款,勿用于未授权的文件访问。
|
||||
|
||||
Reference in New Issue
Block a user