FEATURED · 精选文章

LocalSend 一个 AppImage 装下所有 Linux 发行版:完整拆解它的打包配置与构建步骤

发布时间 / 2026/8/29 8:05:00
来源 / 创域科博编辑部
栏目 / 资讯中心
LocalSend 一个 AppImage 装下所有 Linux 发行版:完整拆解它的打包配置与构建步骤 LocalSend 一个 AppImage 装下所有 Linux 发行版完整拆解它的打包配置与构建步骤【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsendLocalSend 是一个开源的跨平台文件传输工具可理解为局域网内的 AirDrop支持 Windows、macOS、Linux、iOS、Android 和 Web 端互传文件。在 Linux 这边它没有走为每个发行版各打一个包的老路而是产出了一个 AppImage 单文件下载下来、加上执行权限、双击就能跑Ubuntu、Fedora、Debian、Arch 通吃。这篇文章把它的实现拆开给你看——配置在做什么、两种架构怎么区分、一条脚本如何把 Flutter 工程变成 .AppImage 成品以及拿到手之后怎么验证和分发。为什么选单文件这条路 先摆一个现实问题你的 Flutter 应用构建出来之后要给 Linux 用户交付什么交付方式用户侧体验维护成本给出一堆.so 可执行文件用户自己装依赖缺库就崩每种发行版都可能出不同问题为每个发行版打 deb / rpm / pacman 包安装规范但只有对应用户能装包要跟随各系统 API 更新长期维护重单文件 AppImage无需 root、直接运行、删文件即卸载一次构建到处运行LocalSend 选的是第三条。AppImage 的思路可以概括为一句话把应用二进制、它依赖的共享库、桌面集成文件一起塞进一个 SquashFS 镜像外层再包一个小的加载器。运行时加载器把这个镜像挂载成只读文件系统从里面拉起程序。系统本身缺什么库都不重要因为依赖已经随身带了——这就是它能跨发行版运行的根本原因。对使用者的好处很直观免安装、免 root拷到 U 盘上带到另一台机器照样能跑卸载就是删文件不留残留配置目录版本回退也简单旧文件放着就行。配置在做什么读懂那两个 YAML 文件 项目里的配方文件就两个放在 support/build/appimage/ 下分别对应 x86_64 和 ARM64。先看AppImageBuilder_x86_64.yml的几个关键块。app_info应用的身份与入口app_info: id: org.localsend.localsend_app name: LocalSend icon: localsend exec: localsend_app exec_args: $这段声明了应用 ID、显示名、图标以及真正要拉起的主程序localsend_app。exec_args: $一行容易被忽略但它保证你在命令行追加的参数比如--port之类原样传给应用AppImage 不会把命令行吞掉。apt.include只带两个第三方库apt: arch: [amd64] sources: - sourceline: deb http://archive.ubuntu.com/ubuntu/ jammy main restricted # ... 其余 jammy 与 security 源 include: - libayatana-appindicator3-1:amd64 - librsvg2-common:amd64 exclude: - adwaita-icon-theme:*整个配方里第三方依赖只有两个各有明确用途libayatana-appindicator3-1——系统托盘支持LocalSend 常驻托盘靠它librsvg2-common——SVG 图标渲染桌面图标能正确显示靠它。依赖源锁定在 Ubuntu 22.04jammy一个 LTS 版本而不是当前系统有什么就用什么。这意味着无论在哪台机器上构建打进镜像的库版本都一致不会出现我这台 Fedora 上构建的包在别人 Debian 上缺符号这类问题。runtime.env 与 files.exclude沙箱里的两个细节AppImage 运行时相当于一个自包含的小沙箱配了两处补丁runtime: env: XDG_DATA_DIRS: /usr/local/share/:/usr/share/:${XDG_DATA_DIRS} files: exclude: - usr/share/man - usr/share/doc/*/README.* - usr/share/doc/*/changelog.*前者让应用能读到宿主系统的 mime 类型、桌面条目等数据后者把 man 手册和一堆 README/NEWS/TODO 文档砍掉纯省体积。x86_64 与 ARM64 的配置差异只有一处对比两份文件app_info、源、include 列表、exclude 规则完全一样唯一分叉点配置项x86_64 配方ARM64 配方apt.archamd64arm64include 库后缀:amd64:arm64AppImage.archx86_64arm_64也就是说双架构不是两套工程而是同一份配置换三个字段。这也解释了为什么发布时 x86_64 和 ARM64 两个 AppImage 的体积、功能完全对齐。从零构建一个 AppImage 的完整步骤 ️配方文件只是说明书真正跑流程的是 support/scripts/compile_linux_appimage.sh。整条链路可以压成四步# 1) 装依赖Flutter 编译链 托盘开发库 AppImage 工具 sudo apt install curl clang cmake libgtk-3-dev ninja-build \ libayatana-appindicator3-dev libfuse2 # appimage-builder 本体从 appimage-builder 官方发布页下载 # 后放到 /usr/local/bin/ 并加执行权限 # 2) 构建 Flutter Linux 可执行文件 git submodule update --init flutter clean flutter pub get flutter pub run build_runner build -d flutter build linux # 3) 把 release 产物拷进 AppDir再交给 appimage-builder mkdir AppDir cp -r build/linux/x64/release/bundle/* AppDir cp support/build/appimage/AppImageBuilder_x86_64.yml AppImageBuilder.yml appimage-builder第 3 步的appimage-builder是重头戏它按 YAML 从 apt 源拉取 include 里的库、连同 AppDir 中的应用文件一起压缩成 SquashFS再挂上加载器壳最后吐出LocalSend-版本-x86_64.AppImage。脚本最后还做了一件事——chmod x并把这个文件从临时构建目录/tmp/build搬回项目根目录保证产物干净、可追溯。几点实操提醒构建要在 Linux 上进行flutter build linux只认 Linux 宿主如果报mksquashfs相关错误apt install squashfs-tools即可配方文件里的script块也写了这层兜底ARM64 产物需要 arm64 机器或容器里执行把第 3 步换用AppImageBuilder_arm_64.yml就行。想拿完整源码自己走一遍的话仓库地址是 https://gitcode.com/GitHub_Trending/lo/localsend git clone后即可按上面的步骤操作。验证可用拿到 AppImage 之后的三件事 ✅构建成功不等于到处能跑建议按这个顺序验证本机冒烟测试chmod x LocalSend-*-x86_64.AppImage ./LocalSend-1.18.2-x86_64.AppImage窗口能打开、托盘图标出现、局域网内另一台设备能看到这台机器基本就说明核心路径通了。真跨发行版测试配方文件里其实预留了一段测试用例注释状态用官方测试镜像在 Fedora、Debian、Arch、CentOS 容器里执行./AppRun。如果你要自己对外分发至少挑一个和构建机不同源的发行版比如构建用 Ubuntu验证用 Fedora跑一遍完整收发流程。做一次真实传输传个几十 MB 的文件确认加密通道建立、进度条和速度显示正常。分发与排错的落地建议 最后给几条能直接照做的建议分发把 AppImage 丢到内网网盘或静态服务器即可无需任何安装说明文件名自带版本号方便用户按版本管理。首次运行报 appimage: executable format error多半是没加执行权限chmod x一下即可。老系统CentOS 7 之类挂载失败通常是 FUSE 缺失装libfuse2对应 glibc 版本后重试这也是为什么构建前脚本要求先装libfuse2——加载器本身也依赖它。想再瘦身可以继续往files.exclude里加规则但libayatana和librsvg2这两个是功能底线别动。托盘图标不显示检查目标桌面是否支持 AppIndicatorGNOME 需装 AppIndicator 扩展这是桌面环境问题不是包的问题。如果你自己的 Flutter 桌面应用也在为 Linux 打包发愁可以把 LocalSend 这套当作模板抄一个锁定 LTS 源的 apt 配方 一份 AppDir 拷贝脚本 appimage-builder三件套齐了。先在你的机器上把 x86_64 跑通再补 ARM64 那份配置基本就是一天的工作量。【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻