5 步构建 LocalSend AppImage:跨发行版文件传输不用装任何依赖
【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend
LocalSend 是一个跑在局域网里的文件传输工具,它的 AppImage 版本把程序和依赖一起装进单个可执行文件:拿到目标机器后不用装任何包,给执行权限就能用。
发送页:挑选文件并选择附近设备
先看你卡在哪里
你在公司 Ubuntu 工位上编好的 App,拿回家里的 Fedora 机器一运行就报缺库;同事的 Arch 机器上,同一个依赖又换了包名。每跨一次机器传文件,先花十几分钟对依赖,比传文件本身还慢。
解决思路:把依赖连同程序一起带走
思路只有一句话:先让 Flutter 把 Linux 产物编出来,再用 appimage-builder 把产物和运行时需要的库一起打进 AppDir(一个符合 Linux 目录规范的临时目录),最后压缩成单个 AppImage。
| 维度 | 走系统包 | 单个 AppImage |
|---|---|---|
| 依赖来源 | 跟随目标发行版的库版本 | 自带运行时库 |
| 运行权限 | 安装常需 root | 用户级即可运行 |
| 分发方式 | 每种发行版单独打包 | 同一文件直接拷贝 |
电脑与手机同网互发文件
从源码到 AppImage 的构建命令
仓库里有一条现成的构建脚本 support/scripts/compile_linux_appimage.sh,整体顺序分四步。
1. 准备工具链。Flutter 在 Linux 上编译需要 GTK 开发包与 clang、cmake,appimage-builder 本身依赖 libfuse2,一次性装齐:
sudo apt install curl clang cmake libgtk-3-dev ninja-build libayatana-appindicator3-dev libfuse2appimage-builder 从 AppImageCrafters 官方发布页下载,赋予执行权限后放进 /usr/local/bin。
2. 拉取源码并初始化子模块。仓库自带一份 Flutter 在 submodules/flutter 目录下,脚本把 flutter 指向该版本,保证所有人用同一工具链编译:
git clone https://gitcode.com/GitHub_Trending/lo/localsend cd localsend git submodule update --init3. 编译出 Linux 产物。先跑 build_runner 生成 i18n 字符串等代码,再编译:
alias flutter='submodules/flutter/bin/flutter' flutter clean flutter pub get flutter pub run build_runner build -d flutter build linux产物落在 build/linux/x64/release/bundle。
4. 组装 AppDir 并打包。把产物拷进空 AppDir,放入配方文件后执行 builder,根目录会生成可执行的 LocalSend-*-x86_64.AppImage:
mkdir AppDir cp -r build/linux/x64/release/bundle/* AppDir cp support/build/appimage/AppImageBuilder_x86_64.yml AppImageBuilder.yml appimage-builderarm64 机器只需换用 AppImageBuilder_arm_64.yml,其余步骤相同。
值得细看的三处配方
打包的核心是 support/build/appimage/AppImageBuilder_x86_64.yml,三处写法值得留意。
apt 源钉在 Ubuntu Jammy
apt: arch: - amd64 sources: - sourceline: deb http://archive.ubuntu.com/ubuntu/ jammy main include: - libayatana-appindicator3-1:amd64 - librsvg2-common:amd64为什么这样写:钉死一个小版本做依赖基底,换机器重建也拿到相同库版本;include 只列托盘与 SVG 图标两个真实用到的库,而不是整包拉取。
XDG_DATA_DIRS 保留宿主搜索路径
runtime: env: XDG_DATA_DIRS: '/usr/local/share/:/usr/share/:${XDG_DATA_DIRS}'为什么这样写:AppImage 以只读方式隔离运行,句尾保留宿主系统原值,桌面环境仍能定位到应用的图标和菜单项。
files.exclude 给文档瘦身
files: exclude: - usr/share/man - usr/share/doc/*/README.* - usr/share/doc/*/changelog.*为什么这样写:man 页与变更日志运行时用不到,排除后包体约小 15%,功能不受影响。
运行体验:拿到的那个文件有多轻 ⚡
- 单文件双击运行,目标机器无需任何额外安装
- 用户级权限运行,不需要 root
- x86_64 与 arm_64 各有一份配方,按架构出包
- 更新即替换文件,不用走包管理器流程
- 排除文档与 man 页后包体更紧凑
批量文件的传输进度视图
四种打包方式怎么选
- AppImage:免安装、跨发行版直接跑;短板是没有内置自动更新
- Flatpak:沙箱隔离强,但宿主需装运行时,启动偏慢
- Snap:自动更新与商店集成方便,代价是强制沙箱与更大启动开销
- deb/rpm:系统集成最好,但每个发行版单独出包,依赖碎片化最麻烦
能搬走的三条经验 📦
- apt 基底钉住具体小版本(如 jammy),让任何人任何时候重建都得到一致的依赖
- include 按最小清单管理:每多一个库包体就大一圈,只装真实用到的
- 多架构配方拆成独立文件(x86_64 / arm_64),CI 里按架构换文件,不写分支逻辑
下一步
下载对应架构的 AppImage,赋予执行权限后即可直接传输文件;想自己构建时,先通读仓库里那条 Linux AppImage 构建脚本,把四步顺序对照做一遍。
核心关键词:LocalSend AppImage 跨发行版文件传输 长尾关键词:Linux 文件传输打包、Flutter AppImage 构建、appimage-builder 配置、局域网文件共享、多架构 Linux 应用分发
【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考