资讯动态

LocalSend AppImage 打包完整指南:构建 Linux 便携式应用发行版

发布时间:2026/8/29 22:43:13 来源:尧图企业网站定制
LocalSend AppImage 打包完整指南构建 Linux 便携式应用发行版【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsendLocalSend 是一个跨平台的局域网文件传输工具桌面端基于 Flutter Rust 实现。本文围绕它的 Linux 分发链路讲解如何用 AppImage 打包技术把一个 Flutter 应用封成拷走即用的单文件产物包括 appimage-builder 配方文件的字段含义、x86_64 与 arm64 双架构构建、CI 流水线与 GPG 签名。按文中步骤操作你可以在一台 Ubuntu 机器上产出可发布到任意发行版的 AppImage 文件。先看成品一个文件就是一整个应用构建脚本的产物形如LocalSend-1.18.2-x86_64.AppImage单文件、带执行位双击或./运行即可不需要包管理器不要求 root。文件内部塞了应用二进制、缺失的运行时 .so、桌面入口配置和图标目标机器只要有一个普通的 Linux 用户环境就能跑。适用场景比较直接公司内部发版不依赖对方系统里装了什么在老机器上装不了 apt 源、没管理员权限U 盘拷过去就能用给测试同学提供和线上完全一致的构建产物排除我这边没问题。它是怎么工作的AppImage 原理与格式定位AppImage 的本质是应用 运行库 启动器打成一个可执行文件。启动流程文件自带一个小的运行器runtime执行时先自检把内嵌的 squashfs 压缩卷以 FUSE 方式挂载到临时目录或走无 FUSE 的解包回退执行挂载点里的AppRun由它拉起真正的localsend_app主程序退出时自动卸载不往系统里写任何文件。打包侧的流程则是把 Flutter 的 release 产物放进AppDir/再由 appimage-builder 按配方从指定 APT 源下载依赖库、组装、最后经mksquashfs压缩封装。在 Linux 桌面格式光谱里AppImage 的定位偏零安装维度AppImageSnapFlatpakdeb / rpm分发形态单文件商店仓库运行时 商店包仓库安装动作无snapd 安装flatpak 安装包管理器安装隔离策略无沙盒直接跑在用户环境严格沙盒共享运行时 沙盒融入系统目录自带依赖是是由运行时提供依赖系统包典型代价体积大、无自动更新需 snapd 服务首装体积大版本受发行版限制选 AppImage 的取舍很清楚换来最大兼容性付出的是体积和手动更新。对一个文件传输工具来说这个交换很划算。从零到一构建LocalSend AppImage 构建步骤1. 环境准备# Flutter 侧 sudo apt install curl clang cmake libgtk-3-dev ninja-build libayatana-appindicator3-dev # AppImage 侧 sudo apt install libfuse2 squashfs-tools # appimage-builder 从 AppImageCrafters 的发行版下载 # 安装后确认appimage-builder --version作用备齐 Flutter Linux 工具链、系统托盘指示器依赖和 AppImage 封装工具。脚本 support/scripts/compile_linux_appimage.sh 的注释里列的就是这套要求。2. 构建 Flutter Linux 产物git clone https://gitcode.com/GitHub_Trending/lo/localsend cd localsend git submodule update --init # 项目内嵌 Flutter SDK 在 submodules/flutter alias fluttersubmodules/flutter/bin/flutter flutter clean flutter pub get flutter pub run build_runner build -d # 生成 i18n 字符串与代码生成文件 flutter build linux作用产出build/linux/x64/release/bundle/里面是可直接运行的目录含localsend_app和 .desktop 文件。3. 组装 AppDir 并封装mkdir AppDir cp -r build/linux/x64/release/bundle/* AppDir/ cp support/build/appimage/AppImageBuilder_x86_64.yml AppImageBuilder.yml appimage-builder # 自动读取当前目录的 AppImageBuilder.yml chmod x LocalSend-*-x86_64.AppImage作用builder 按配方下载依赖、生成AppRun、压缩出最终 AppImage。产物名里的版本号取自配方里的version字段发布时由 release 自动化统一改写平时不用手填。4. arm64 多架构构建同一套步骤把配方换成 support/build/appimage/AppImageBuilder_arm_64.yml 即可cp support/build/appimage/AppImageBuilder_arm_64.yml AppImageBuilder.yml appimage-builder chmod x LocalSend-*-arm_64.AppImage作用得到 aarch64 版本产物后缀变为arm_64。两份配方仅apt.archamd64/arm64和AppImage.arch不同其余完全一致维护成本很低。注意 x86 配方在 arm 机器上跑不了反之亦然交叉发布建议走双架构 CI。配方文件逐条拆解关键字段与不配好的后果配方是 YAML核心字段作用如下字段作用不配好会怎样app_info.exec/exec_args指定入口二进制$透传命令行参数应用起不来或--version等参数被吞掉apt.sourcesapt.arch声明依赖解析的 APT 源与架构解析到错误架构的包或拉不到库导致封装失败apt.include显式打包的运行时库本项目含libayatana-appindicator3-1、librsvg2-common托盘图标、SVG 渲染在缺库的机器上失效runtime.env.XDG_DATA_DIRS补全桌面资源搜索路径.desktop 入口和图标在部分桌面环境下识别不到files.exclude剔除 man 页、doc 文本等冗余内容产物白白多出几 MB 无用文件AppImage.update-information: guess声明更新信息来源本项目靠猜测渠道地址内置 AppImage 更新机制找不到下载地址两个实操细节apt.include只列真正缺的库多包一个就多一分体积script里的which mksquashfs || apt install squashfs-tools是对 CI 环境缺 squashfs 工具的兜底本地机器一般不需要。踩坑与排查三个高频问题缺依赖怎么排查现象运行报error while loading shared libraries: libxxx.so: cannot open shared object file诊断./LocalSend-x86_64.AppImage --appimage-extract # 解包到 squashfs-root ldd squashfs-root/localsend_app | grep not found解决把对应包名加入配方的apt.include带架构后缀重新封装。桌面菜单/图标不生效现象运行正常但应用菜单里没有入口或图标错位诊断echo $XDG_DATA_DIRS grep -E ^(Exec|Icon) AppDir/localsend_app.desktop解决确认配方里runtime.env.XDG_DATA_DIRS存在本项目值前缀了/usr/local/share/:/usr/share/用户级目录跑update-desktop-database ~/.local/share/applications刷新索引。权限问题现象./AppImage提示 Permission denied诊断ls -l LocalSend-*.AppImage看执行位解决发布流程里chmod x产物从共享盘复制回来的文件记得补执行位。CI 里个别步骤需要sudobuilder 内部装依赖库时本地普通用户跑不需要。工程化上线CI 流水线把构建固化成一条 job核心就是把上面的脚本跑通并上传产物jobs: appimage: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 with: submodules: true - name: Build AppImage run: bash support/scripts/compile_linux_appimage.sh - uses: actions/upload-artifactv4 with: name: LocalSend-AppImage-x86_64 path: LocalSend-*-x86_64.AppImagearm64 版换 runner 为ubuntu-24.04-arm并选用 arm 配方逻辑相同。产物命名LocalSend-{version}-{arch}.AppImage如LocalSend-1.18.2-x86_64.AppImage。版本号只改配方一处release 脚本会同步改写两份 yml架构段保持x86_64/arm_64与文件名一致方便下载站按列展示。GPG 签名发布前对产物做 detached 签名用户在下载页可自行校验gpg --batch --yes --armor --detach-sign --output LocalSend-1.18.2-x86_64.AppImage.asc LocalSend-1.18.2-x86_64.AppImage gpg --verify LocalSend-1.18.2-x86_64.AppImage.asc LocalSend-1.18.2-x86_64.AppImage签名密钥只放 CI 的 secret公钥随页面公示本地调试密钥切勿用于发布。一个 yml 配方加一段 shell就能把 Flutter 应用变成跨发行版可携带的单文件LocalSend 的双架构产物也验证了这条路线的稳定性。随着 AppImage 运行时对新版 glibc 和无 FUSE 环境的适配持续改进这类单文件 Linux 发布会越来越接近零摩擦体验。【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价