2026/8/29 9:07:43

如何 4 步完成 Linux AppImage 打包:以 LocalSend 为例

如何 4 步完成 Linux AppImage 打包:以 LocalSend 为例 如何 4 步完成 Linux AppImage 打包以 LocalSend 为例【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend你拿到一个LocalSend-*-x86_64.AppImage文件双击没反应拖进终端跑一下就报缺库——这是 Linux 便携式应用分发最常见的现场。反过来想如果你是开发者AppImage 打包就是把编译好的桌面应用连同依赖压进单个文件的过程LocalSend 用不到 40 行的 YAML 配方加一个 shell 脚本就做完了。两句话说清 AppImage 是什么一句话定义AppImage是一个自包含的单文件应用——程序本体、运行时依赖、桌面元数据全部压进一个squashfs镜像执行时解包、直接运行不需要安装。值得选它的理由有两条。其一免安装、免 root文件拷到哪儿就在哪儿跑适合「把应用发给同事测试」的场景。其二跨发行版依赖锁在包内Ubuntu 上的包在 Fedora 上通常也能跑。机制上补一句squashfs 是只读压缩格式挂载即可读天然适合分发。老系统靠FUSE内核模块做临时挂载新版运行时已内置解包逻辑包内本质是AppRun启动脚本加squashfs-root目录这也是后文--appimage-extract调试手法能成立的原因。 实操路径AppImage 制作流程 4 步走第 1 步环境准备git clone https://gitcode.com/GitHub_Trending/lo/localsend cd localsend git submodule update --init sudo apt install curl clang cmake libgtk-3-dev ninja-build libayatana-appindicator3-dev libfuse2前两条拿到源码并初始化子模块项目里附带了 Flutter SDK构建时直接用子模块内的可执行文件不用全局安装。apt 一行装齐 Flutter Linux 构建依赖、托盘图标用的 appindicator 库和 AppImage 运行所需的 libfuse2。第 2 步构建 Flutter 应用flutter clean flutter pub get flutter pub run build_runner build -d flutter build linux产物落在build/linux/x64/release/bundle/主程序localsend_app、lib/里的资源文件和桌面文件。build_runner这步生成 i18n 文案和资源索引跳过会直接构建失败。这一步是标准 Flutter 桌面构建和 AppImage 无关。第 3 步用配方打包配方放在support/build/appimage/下是两份只差架构的 YAML核心字段如下AppDir: app_info: id: org.localsend.localsend_app exec: localsend_app exec_args: $ # ...apt 源与依赖 include/exclude 规则等字段省略... AppImage: arch: x86_64apt.include显式列出libayatana-appindicator3-1和librsvg2-common两个运行时依赖apt.sources锁定 Ubuntu 22.04 源保证每次打包结果可复现files.exclude顺手清掉 man 和 doc。执行打包mkdir AppDir cp -r build/linux/x64/release/bundle/* AppDir appimage-builder --recipe support/build/appimage/AppImageBuilder_x86_64.yml chmod x LocalSend-*-x86_64.AppImageappimage-builder 按配方拉依赖、把 AppDir 压成 squashfs、封装成最终文件全程一条命令完整流程见构建脚本。做多架构 AppImage时只需换配方arm64 版与 x86_64 版只差 apt 的arch和末尾的arm_64两处。第 4 步验证产物./LocalSend-*-x86_64.AppImage ./LocalSend-*-x86_64.AppImage --appimage-extract cd squashfs-root ldd AppRun | grep not found第一行直接运行窗口弹出、能扫到附近设备即通过。后两行是排查手段解包后ldd列出所有缺失的 .so缺什么补什么。AppImage、Snap、Flatpak、deb 怎么选四种格式的本质区别在于「依赖放在哪、谁来管更新」。维度AppImageSnapFlatpakdeb / rpm安装方式无需安装文件即应用需要 snapd需要 Flatpak 运行时需要包管理器权限要求用户级可能需要 root用户级需要 root跨发行版✅ 完全支持✅ 支持✅ 支持❌ 受限自动更新❌ 手动替换文件✅ 内建✅ 内建✅ 包管理器一句话建议给外部用户试用、不想让对方装任何前置组件选 AppImage要上应用商店选 Snap / Flatpak走内部运维通道用 deb / rpm。⚡ AppImage 打包避坑清单现象双击闪退或无反应。原因FUSE 挂载失败或文件没有执行权限。 解法终端里直接运行看真实报错chmod x补权限内核不支持 FUSE 就用--appimage-extract跑解包内容。现象error while loading shared libraries。原因运行时缺某个 .so打包时没进包。 解法apt-file search 库名找到对应包加进配方apt.include重新打包。现象mksquashfs: command not found。原因打包机没装 squashfs-tools。 解法apt install squashfs-toolsLocalSend 配方里那行which mksquashfs || apt install ...就是给 CI 环境兜底的。现象arm64 机器跑不了 x86_64 的包。原因架构不匹配AppImage 是原生二进制不存在跨架构兼容。 解法换AppImageBuilder_arm_64.yml重新打包产物名里的架构后缀不要混用。进阶话题各一句签名用gpg --detach-sign生成 .sig 附在发布页供用户gpg --verifyCI 集成就是把上面的构建脚本丢进 GitHub Actions 的 ubuntu-latest 运行器工具本身从 AppImageCrafters 的 releases 页下载即用配方末尾的update-information: guess可让 AppImage 从发布页检测新版本属可选项体积上files.exclude清 man / doc 是最直接的收益squashfs 默认压缩已经够用。AppImage 打包的核心价值是把「在我机器上能跑」变成「在任何 Linux 上都能跑」。不妨给你的项目也打一个试试。【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考