- SMB 3.1.1 多流条带传输(下载/上传),轮转交错写入、48MB 内存护栏 - 前台服务保活 + WiFi/CPU 锁,后台传输不断连 - HyperOS 焦点通知/超级岛适配(miui.focus.param 双轨协议) - 全屏连接编辑器:共享多选、批量建连;错误中文提示 + TCP 预探测 - 凭据 AndroidKeyStore 加密存储;失败自动/手动重试;空间预检 - 全局单层极光背景(修复切页闪烁)+ 单元测试
2.9 KiB
2.9 KiB
SMB 极速 (SmbFast)
一个以传输速度为第一目标的安卓 SMB 客户端,基于 SMB2/SMB3 协议(SMBJ 库)+ Jetpack Compose。
功能
- 连接管理:添加/编辑/删除 NAS、Windows 共享连接,支持域账号、匿名登录,连接前可测试
- 文件浏览:共享目录浏览(面包屑导航)、新建文件夹、重命名、删除、按类型显示图标
- 高速下载:多流分块并行下载(默认 4 流、1MB 分块,可调至 16 流 / 8MB)
- 上传:系统文件选择器上传(顺序流);本地文件多流并行上传
- 传输管理:实时进度、实时速度(EMA 平滑)、取消、完成后直接打开
- 设置:并行流数、分块大小、下载目录
为什么快
| 手段 | 说明 |
|---|---|
| SMB 3.1.1 协商 | 优先协商 SMB3(大 MTU),单请求 MaxRead/MaxWrite 可达 8MB(SMB2 仅 1MB) |
| 多流并行 | 大文件切成条带,每条带独立打开 SMB 句柄并行读取,靠 credits 在单连接上流水线并发 |
| 大分块 | 减少 RTT 往返次数,请求粒度默认 1MB、可调 8MB(自动按服务器协商值截断) |
| 连接复用 | Connection/Session/Share 全程池化,浏览无重复握手开销 |
| 关闭签名/加密 | 默认不做 SMB 签名与加密以换取吞吐(服务器强制时自动回退协商) |
| 本地零拷贝拼装 | FileChannel 定位写 + 预分配,各流直接写入自己的偏移 |
实测建议:手机连 5GHz Wi-Fi,NAS 开 SMB3(Windows 8+/Server 2012+ 默认开启)。千兆内网理论 110MB/s 左右,多流可基本跑满;百兆/2.5G 环境收益更明显(单流顺序读通常只能到 30~60MB/s)。
构建
要求:JDK 17+,Android SDK(platform 35、build-tools 34+)。
./gradlew :app:assembleDebug # 产物: app/build/outputs/apk/debug/app-debug.apk
./gradlew :app:assembleRelease # 需要签名配置
local.properties 中配置 sdk.dir。Gradle 仓库默认走阿里云镜像(settings.gradle.kts),国内环境无需代理。
使用
- 首页点 + 添加连接:填服务器 IP(如
192.168.1.10)、共享名称(如share)、用户名密码(或勾选匿名) - 点「测试」确认可用,然后「连接」
- 浏览目录,点文件右侧菜单选择 下载 / 下载并打开
- 「传输」页查看实时速度;设置页可调并行流数与分块大小
下载保存位置:优先 Download/SMBFast/,受限存储设备回退到应用私有目录(设置页可见实际路径)。
已知限制
- SMBJ 不支持 SMB3 Multichannel(多网卡聚合),多流并行在同一 TCP 连接上实现
- 密码明文保存在应用私有 SharedPreferences(未加密)
- 暂不支持 SMB over QUIC / 直连 TLS,未做流媒体边下边播
技术栈
Kotlin · Jetpack Compose (Material 3) · SMBJ 0.15.0 (SMB2/SMB3) · BouncyCastle · Gson · Coroutines