SmbFast 极速 SMB 客户端

一个以传输速度为第一目标的安卓 SMB 客户端,基于 SMB2/SMB3 协议(SMBJ 库)+ Jetpack Compose Material3,专为局域网 NAS 场景打造。当前版本 v20(1.18.0)。

English · 极光玻璃界面 · 后台不断连 · HyperOS 灵动岛


✨ 功能总览

  • 连接管理:添加/编辑/删除连接,支持域账号与匿名登录;「自动发现共享」一键枚举服务器上全部共享(自研 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 在单 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;手机无线一般可跑到 5080MB/s。机械盘 NAS 追求稳定可把并行流数调到 24,固态盘 46。

📡 后台传输与灵动岛

  • 传输任务自动拉起前台服务(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),国内环境无需代理。

./gradlew :app:assembleDebug     # 产物: app/build/outputs/apk/debug/app-debug.apk
./gradlew :app:assembleRelease   # 签名 release(密钥库 smbfast.keystore 已含在仓库)
./gradlew :app:testReleaseUnitTest   # 单元测试

local.properties 配置 sdk.dir。签名配置见 app/build.gradle.kts(store: smbfast.keystore)。

⚠️ 仓库内含签名密钥与密码,便于克隆后构建同签名 APK(升级不冲突)。若要公开仓库,请先把密钥移出 git 历史并更换密码。

📖 使用

  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 连接上实现
  • 暂不支持 SMB over QUIC / 直连 TLS,未做流媒体边下边播
  • 下载断点续传未实现(失败重试为从头重传,已在路线图)
  • HyperOS 岛能否点亮最终取决于系统侧「焦点通知」权限,个别固件对侧载应用收紧

English

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

📄 许可

个人项目,仅供学习交流。请遵守所在网络环境的服务条款,勿用于未授权的文件访问。

S
Description
实现安卓上的SMB连接
Readme
262 KiB
Languages
Kotlin 100%