FEATURED · 精选文章

如何把 LocalSend 打成 Linux AppImage 单文件包:一份从 0 到可用的构建指南

发布时间 / 2026/8/29 15:10:35
来源 / 创域科博编辑部
栏目 / 资讯中心
如何把 LocalSend 打成 Linux AppImage 单文件包:一份从 0 到可用的构建指南 如何把 LocalSend 打成 Linux AppImage 单文件包一份从 0 到可用的构建指南【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend任务很具体把 LocalSend 这个开源的局域网文件互传工具AirDrop 的跨平台替代方案交付到一台什么都没装过的 Linux 机器上对方只要求双击就能用、不折腾包管理器。在 Ubuntu 上编译好的可执行文件拿到 Fedora 或 Arch 上经常因共享库版本不同而跑不起来所以我选择用 AppImage 这条路把应用和它需要的依赖全部塞进一个可执行文件里交付物从一堆 .so 一堆 apt 指令变成一个文件。项目速览LocalSend 是一个跑在本地网络上的文件传输工具同一 Wi-Fi 下的电脑、手机互相发现选设备、传文件全程不经过公网。单文件交付AppImage 双击即跑无需 root、无需安装跨发行版同一个包在 Ubuntu/Debian/Fedora/Arch 上行为一致依赖自包含运行时库随包携带不挑目标机器的环境机制拆解AppImage 到底是什么用一个类比就能讲清楚。给外地朋友寄一套拼装模型你可以把零件和说明书全放进一个箱子箱子上贴一张开箱说明。对方不需要自己有工具箱打开箱子就能照说明装。AppImage 就是这个箱子它内部是一个 SquashFS 只读镜像装着应用二进制、图标、桌面条目以及编译时从 Ubuntu 22.04 源里下载的几个运行时库文件头部的一个小启动器负责在运行时把镜像挂载到内存然后以普通进程方式拉起应用。卸载就是删文件不污染系统目录。下面是 LocalSend 的实际效果两台设备互相发现、互传文件全部走本地网络。最小可行路径从 0 到跑通先说结论整个构建发生在Ubuntu 22.04环境里与配方锁定的 apt 源一致能避免源版本漂移。仓库已经提供了一条龙的构建脚本support/scripts/compile_linux_appimage.sh你完全可以只装依赖、然后跑它下面拆开的 5 步是脚本内部实际做的事方便你定位问题。第 1 步装构建工具链。一条命令搞定 Flutter Linux 编译依赖、托盘库开发包和 AppImage 运行所需的 fusesudo apt install curl clang cmake libgtk-3-dev ninja-build \ libayatana-appindicator3-dev libfuse2 squashfs-tools再单独装打包器从 AppImageCrafters 的 appimage-builder 发布页下载appimage-builder-x86_64.AppImage加执行权限后放进/usr/local/bin/appimage-builder。预期结果appimage-builder --help能正常输出。第 2 步拿源码。git clone https://gitcode.com/GitHub_Trending/lo/localsend cd localsend第 3 步构建 Flutter 的 Linux 可执行文件。仓库自带了 Flutter SDK在子模块里不需要额外装git submodule update --init export FLUTTERsubmodules/flutter/bin/flutter $FLUTTER clean $FLUTTER pub get $FLUTTER pub run build_runner build -d $FLUTTER build linux预期结果出现build/linux/x64/release/bundle/目录里面是localsend_app主程序、图标和 .desktop 文件。第 4 步组装 AppDir。AppImage 的箱子在打包前是一个普通目录结构mkdir AppDir cp -r build/linux/x64/release/bundle/* AppDir第 5 步执行打包收走成果。cp support/build/appimage/AppImageBuilder_x86_64.yml AppImageBuilder.yml appimage-builder chmod x LocalSend-*-x86_64.AppImage预期结果当前目录多出一个LocalSend-x.x.x-x86_64.AppImage拷到任何 glibc 系的 Linux 机器上执行即可。关键配置逐项讲打包规则集中在 AppImageBuilder_x86_64.yml有三个决策值得单独讲它们决定了包为什么小、为什么稳。1. 把 apt 源钉死在 Ubuntu 22.04jammy。apt: arch: [amd64] sources: - sourceline: deb http://archive.ubuntu.com/ubuntu/ jammy main restricted # ... 其余 jammy / jammy-updates / jammy-security 源为什么运行时依赖的版本一旦随最新源漂移今天打的包明天就可能复现不出来。锁到 LTS 版本后任何人任何时间构建拿到的libayatana、rsvg都是同一批版本号。2. include 清单只留两个库其余全排除。include: - libayatana-appindicator3-1:amd64 # 系统托盘图标 - librsvg2-common:amd64 # 渲染 SVG 图标 exclude: - adwaita-icon-theme:* # 主题包, 纯体积为什么这是最小依赖思路的落点。托盘和 SVG 渲染是 Flutter Linux 应用真正会动态链接到、且目标机器未必有的库只收这两个主题、文档man、changelog 等统统不要。包体大小基本就压在这份清单上。3. 双架构 两份配方只改两处。仓库里有 support/build/appimage/ 目录AppImageBuilder_arm_64.yml与 x86_64 版本几乎相同差异只有apt.arch: arm64、依赖包后缀:arm64和AppImage.arch: arm_64。为什么不做成一份通用配方包名后缀和库后缀都必须跟架构对齐拆两份文件比在脚本里做条件分支更不容易出错。踩坑与排错三个高频问题按现象 → 原因 → 处理对照现象原因处理打包时报mksquashfs: command not found构建机缺压缩工具AppImage 底层就是 squashfsapt install squashfs-tools官方脚本里已带which mksquashfs \|\| apt install squashfs-tools兜底目标机上运行提示 fuse 相关加载失败目标机器没有 libfuse2部分新发行版已换成 libfuse3sudo apt install libfuse2不想起装就./AppImage --appimage-extract解包后直接跑squashfs-root/AppRun应用能跑但系统托盘不出现图标缺libayatana-appindicator3-1运行时库确认 include 清单里包含该库并重新打包托盘库是 AppIndicator 系普通机器未必预装另外两个小习惯能省时间产物记得chmod x脚本已做构建前清掉旧的AppDir和appimage-build目录避免残留文件混进新包。选型与边界AppImage 不是万能解边界先说清适合交付给不可控环境的用户、便携盘场景、给同事/客户快速试用不适合需要自动更新、需要被系统包管理器统一管控apt 升级/回滚的服务器环境与deb/rpm的差别后者注册进系统、依赖走系统源升级规范但绑死单一发行版家族与Flatpak的差别Flatpak 走沙箱 公共 runtime隔离更彻底但首次下载体积大、配置更重AppImage 更轻、更文件即应用对 LocalSend 这类桌面工具单文件 免安装的组合体验最直接所以官方把它作为 Linux 的一等分发格式与 deb/rpm 并行维护见app/linux/packaging/下的 make 配置。延伸与收尾构建脚本support/scripts/compile_linux_appimage.sh打包配方support/build/appimage/贡献指南CONTRIBUTING.md多语言说明见 support/readme/应用内构建产物说明app/assets/CHANGELOG.md读完这篇你可以独立完成装好 Ubuntu 22.04 构建环境 → 跑通 5 步产出 x86_64 / arm_64 两个 AppImage → 读懂配方里锁源、最小 include、双架构拆分这三个决策并把同样的套路套用到你自己的 Flutter 项目上。【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻