LocalSend 快速上手教程:开源跨平台文件传输项目完整拆解
【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend
LocalSend 是一款开源的跨平台文件传输应用,可以看作 AirDrop 的免费替代品:同一 Wi-Fi 下,Android、iOS、Windows、macOS、Linux 之间都能安全收发文件和消息,全程不需要互联网。本教程带你从第一次 clone 的角度,看懂它的目录结构、启动流程和关键配置。
它解决什么问题
LocalSend 用 REST API + HTTPS 加密在局域网内直连设备,TLS 证书在每台设备上动态生成,数据不经过任何第三方服务器。它面向两类人:需要离线传文件、又不想装一堆 IM 工具的用户,以及想学习 Flutter + Rust 混合架构项目的开发者。
clone 下来之后先别急着找入口,两条命令就能跑起来:
git clone https://gitcode.com/GitHub_Trending/lo/localsend cd localsend/app && flutter pub get && flutter run- 第 1 行:把仓库拉到本地
- 第 2 行:真正的 Flutter 应用在
app/子目录,先拉依赖再启动
📁 30 秒看懂目录结构
localsend/ ├── app/ # Flutter 应用:lib/ 下的页面、provider、i18n 资源 ├── packages/ # core(Rust 协议核心)、localsend_isolates(Dart↔Rust 桥) ├── cli/ # Rust 命令行版 ├── server/ # 独立 Rust 服务端 ├── support/ # 构建脚本、多语言 README ├── pubspec.yaml # Flutter 配置 └── Cargo.toml # Rust 配置packages/core里是协议、HTTP、WebRTC 的全部实现,用 Rust 写,UI 层通过localsend_isolates调过去- 同时存在
pubspec.yaml和Cargo.toml,说明这是典型的双语言 monorepo,找代码前先分清是 Dart 还是 Rust 的事
启动流程:main 里只做了两件事
入口在 app 入口源码(注意不是app/main.dart):
Future<void> main(List<String> args) async { final container = await preInit(args); // 1. UI 出现前的全部准备工作 runApp(RefenaScope.withContainer( container: container, child: TranslationProvider(child: const LocalSendApp()), // 2. 套上依赖容器和翻译层 )); }preInit(args)(定义在 config/init.dart)负责加载设置、启动本地网络服务、初始化 Rust isolate,失败则弹出错误页RefenaScope是依赖注入容器,组件通过context.ref拿 providerLocalSendApp外层还套了托盘、窗口、生命周期三个 Watcher,App 回到前台时会重启网络服务和发现广播
⚙️ 三个最容易踩坑的配置文件
app/pubspec.yaml:声明 Flutter 版本要求和依赖,其中本地包引用是理解架构的钥匙:
environment: flutter: ^3.41.0 # 要求的 Flutter 版本 localsend_isolates: path: ../packages/localsend_isolates # 指向仓库内的 Dart↔Rust 桥path依赖直接指向仓库内模块,不用猜桥接层在哪
.fvmrc:把 Flutter 版本锁死在 3.41.9。不读它最容易在编译时报莫名其妙的错,项目建议用 fvm 管理版本,装好后用fvm flutter替代flutter命令。
Cargo.toml:Rust workspace 列出四个成员(cli、packages/core、packages/localsend_isolates/rust、server),并单独给加密库开了优化等级,因为 RSA 密钥生成太慢会把拖慢本地测试。
下一步往哪看
- CONTRIBUTING.md:本地完整跑法(多了
dart run build_runner build -d这一步代码生成)和 PR 规范 - README.md:防火墙放行的 TCP/UDP 53317 端口、设备搜不到时的排查表、各平台打包命令
- app/assets/i18n/:60 多种语言的翻译文件,想从本地化切入贡献代码,这里门槛最低
从 clone 到flutter run只需要两分钟,读懂app/lib/main.dart和两个 workspace 配置文件之后,Dart 侧和 Rust 侧的边界就清楚了——这正是理解 LocalSend 源码的起点。
【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考