LocalSend AppImage 打包实操:Flutter 应用跨发行版部署
LocalSend AppImage 打包实操Flutter 应用跨发行版部署【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsendLocalSend 是一个局域网文件互传工具可看作 AirDrop 的开源替代品。本文讲它 Linux 发行版里最容易出问题的一环用 appimage-builder 把 Flutter 应用打成 AppImage一份二进制通吃多个发行版。一个思路把依赖压进自解压容器核心思路只有一句话用 Ubuntu 22.04 的源把缺失的系统库如系统托盘需要的 libayatana-appindicator3连同应用一起装进 AppDir再压成 SquashFS 打进自解压容器。运行时挂载即用不碰宿主机的库。产物就是一个可直接执行的.AppImage文件丢到任何 x86_64 的 Linux 桌面就能跑。实操从源码到产物完整链路在support/scripts/compile_linux_appimage.sh配置模板在support/build/appimage/下x86_64 和 arm64 各一份。第一步先产出 Flutter Linux 构建产物。脚本有个容易忽略的细节不用系统 PATH 里的 Flutter而是用仓库自带子模块里的版本保证构建环境可复现git submodule update --init alias fluttersubmodules/flutter/bin/flutter flutter clean flutter pub get flutter pub run build_runner build -d flutter build linux mkdir AppDir cp -r build/linux/x64/release/bundle/* AppDir第二步写 AppImageBuilder YAML 配方。最关键是app_info的execAppRun 会按它找可执行文件名字必须是bundle/里实际的二进制名写错就是运行后闪退、且没有任何报错AppDir: app_info: id: org.localsend.localsend_app name: LocalSend icon: localsend exec: localsend_appexec: localsend_app这个名字就是flutter build linux按 pubspec 包名生成的产物改过包名要同步改这里。第三步用 apt 段注入依赖。选 Jammy 源的原因很实际22.04 是 LTS源里包版本长期稳定apt 解析依赖时结果可预测不像滚动版源会让构建产物跟着漂移apt: arch: [amd64] sources: - sourceline: deb http://archive.ubuntu.com/ubuntu/ jammy main restricted # ... 其余 jammy / jammy-security 源略 include: - libayatana-appindicator3-1:amd64 - librsvg2-common:amd64两个决策点值得单独说include只留两个包。系统托盘Ayatana AppIndicator和 SVG 图标渲染rsvg是 Flutter 插件在 Linux 上真正会缺的库其余运行时都在 AppDir 里多包一个都是体积负担。arm64 配方只改arch和包架构后缀。两个 YAML 逐行 diff 过差异就在amd64/arm64这一处维护成本低。最后一条命令出包appimage-builder # 产出 LocalSend-latest-x86_64.AppImage踩过的三个坑⚠️CI 上直接报mksquashfs: command not found。打包机没装 squashfs-tools而配方文件本身不该要求机器预装。解法是写在配方script段里构建前先自检安装script: - which mksquashfs || apt install squashfs-tools⚠️部分发行版运行时报fuse: device not found。新系统默认不装 libfuse2而 AppImage 挂载依赖它。装一下即可一行命令sudo apt install libfuse2⚠️跨发行版测试在 CI 里跑不起来。配方里test段debian-stable、fedora 等镜像被整体注释掉了原因是 appimage-builder 的测试镜像在 GitHub Actions 环境里无法稳定拉取 AppImage。所以发行版兼容性只能靠发布前在实机上手动验证指望 CI 兜底会落空。已验证的发行版组合发行版架构验证方式Ubuntu 22.04x86_64构建基准源构建机验证Debian 12x86_64实机运行验证Fedora 36x86_64实机运行验证Archx86_64实机运行验证Ubuntu 22.04arm64实机运行验证配方内置的容器测试不可用见上文以上组合由构建机加发布前实机抽验覆盖覆盖不到的老发行版如 CentOS 7不做承诺。收尾这套方案的取舍是用包体积换部署自由度把两个系统库打进容器换来不用关心目标机器的发行版。无桌面环境的服务器或严格禁止挂载可执行文件的内网不适合用 AppImage那两台机器直接装 deb 或 rpm 更省事。模板在support/build/appimage/下想加自动更新的话下一步可以研究 appimage-builder 的 update-information 与 Zsync 机制。【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考