From b6b1b712a4aa98ecc24bf5d24a95b66814ee0075 Mon Sep 17 00:00:00 2001 From: cbb <2625274797@qq.com> Date: Sun, 11 Oct 2026 21:03:53 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E9=87=8D=E5=86=99=20README=20=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E8=87=B3=20v20=EF=BC=8C=E6=96=B0=E5=A2=9E=20HTML=20?= =?UTF-8?q?=E7=89=88=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.html | 227 ++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 126 ++++++++++++++++++++++------- 2 files changed, 322 insertions(+), 31 deletions(-) create mode 100644 README.html diff --git a/README.html b/README.html new file mode 100644 index 0000000..fcd2d73 --- /dev/null +++ b/README.html @@ -0,0 +1,227 @@ + + + + + +SmbFast 极速 SMB 客户端 · README + + + +
+
+ +
+
⚡
+

SmbFast 极速 SMB 客户端

+

以传输速度为第一目标的安卓 SMB2/SMB3 客户端 · SMBJ + Jetpack Compose · 为局域网 NAS 而生

+
+ 当前版本 v20 · 1.18.0 + Android 8.0+ + Kotlin · Compose M3 + SMBJ 0.15.0 · SMB 3.1.1 + HyperOS 灵动岛 +
+
+ +
+

功能总览

+
+
🔌

连接管理

自动发现共享(自研 DCERPC 枚举,fnOS/群晖/Samba/Windows 实测);多选共享批量创建连接;域账号/匿名;TCP 预探测,填错 IP 5 秒内中文报错。

+
📁

文件浏览

目录浏览、面包屑导航、新建文件夹、重命名、删除,按类型显示图标;连接全程池化,无重复握手。

+
🚀

多流高速传输

下载与上传均为多流条带并行(4~16 流、1~8MB 分块),轮转交错写入对机械盘友好,内置 48MB 内存护栏。

+
🌙

后台不断连

前台服务(dataSync)+ WiFi 低延迟锁 + CPU 唤醒锁;通知栏进度/速度/全部停止;退后台、熄屏照常满速。

+
🏝️

HyperOS 灵动岛

小米焦点通知/超级岛适配(miui.focus.param 双轨协议),传输进度上岛;其他品牌自动忽略,零副作用。

+
🛡️

安全与健壮

凭据 AndroidKeyStore AES/GCM 加密存储;失败自动重试一次 + 一键重试;下载前磁盘空间预检;上传自动改名防覆盖。

+
+
+ +
+

为什么快

+
+ + + + + + + + + + +
手段说明
SMB 3.1.1 协商优先协商 SMB3 大 MTU,单请求 MaxRead/MaxWrite 可达 8MB(SMB2 仅 1MB)
多流条带并行大文件切条带,每条带独立 SMB 句柄并行读写,靠 credits 在单 TCP 连接上流水线并发
轮转交错写入各条带按块轮转推进,写入聚在 ~8MB 连续窗口整体前移——机械盘不再来回寻道,速度稳
大分块请求粒度默认 1MB、可调 8MB,自动按服务器协商值截断,减少 RTT 往返
连接复用Connection / Session / Share 全程池化,浏览与传输无重复握手
关闭签名/加密默认不做 SMB 签名与加密以换取吞吐(服务器强制时自动回退协商)
零拷贝拼装FileChannel 定位写 + pread 并发读,多协程安全
内存护栏条带缓冲合计上限 48MB,配置拉满也不堆溢出闪退
+
+
实测建议:手机连 5GHz Wi-Fi、靠近路由器,NAS 开 SMB3。千兆内网理论 ~110MB/s,手机无线一般可跑 50~80MB/s。机械盘 NAS 求稳把并行流数调到 2~4,固态盘 4~6。
+
+ +
+

构建

+

要求 JDK 17+、Android SDK(platform 35 / build-tools 34+)。Gradle 走阿里云镜像(settings.gradle.kts),国内无需代理。

+
./gradlew :app:assembleDebug        # 调试包
+./gradlew :app:assembleRelease      # 签名 release(密钥库 smbfast.keystore 已含在仓库)
+./gradlew :app:testReleaseUnitTest  # 单元测试(含 fnOS 真实响应回归样本)
+
⚠️ 仓库内含签名密钥与密码(克隆即可构建同签名 APK,升级不冲突)。若要公开仓库,请先把密钥移出 git 历史并更换密码。
+
+ +
+

使用

+ +

局域网分发

+

电脑在 dist/ 目录起 python -m http.server 8080,手机浏览器访问 http://电脑IP:8080/SmbFast-release-v20.apk 直接安装——聊天工具传 APK 常被截断,导致「解析软件包出现问题 (33)」。

+
+ +
+

版本历程

+
+ + + + + + + + + + + + +
版本主要变化
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.14HyperOS 焦点通知/超级岛适配;修复横幅轰炸与双轨协议(v15/v16)
1.15.0 (v17)TCP 预探测 + 异常链穿透翻译:填错 IP 5 秒内中文报错
1.16.0 (v18)编辑模式同样支持多选共享
1.17.0 (v19)内存护栏、自动重试、空间预检、上传防覆盖、凭据加密、通知「全部停止」
1.18.0 (v20)全局单层极光背景,修复切页闪烁
+
+
+ +
+

已知限制

+ +
+ +
+

技术栈

+

Kotlin Jetpack Compose · Material 3 SMBJ 0.15.0 BouncyCastle Coroutines Gson AndroidKeyStore

+
+ +
SmbFast · 个人项目,仅供学习交流 · 极光玻璃 UI · 极速 SMB
+
+ + diff --git a/README.md b/README.md index cf3bcda..4722c09 100644 --- a/README.md +++ b/README.md @@ -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 岛能否点亮最终取决于系统侧「焦点通知」权限,个别固件对侧载应用收紧 -## 技术栈 +## 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 + +## 📄 许可 + +个人项目,仅供学习交流。请遵守所在网络环境的服务条款,勿用于未授权的文件访问。