尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

AppImage 打包:LocalSend 跨发行版 Linux 构建实操手册

AppImage 打包:LocalSend 跨发行版 Linux 构建实操手册 AppImage 打包LocalSend 跨发行版 Linux 构建实操手册【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsendLocalSend 是一个局域网文件传输工具开源 AirDrop 替代品。本文解决它构建 AppImage 时的环境依赖与打包问题覆盖从 Flutter 编译到 appimage-builder 出包的最小命令序列、实测体积与踩坑。为什么 Linux 上直接给包不现实LocalSend 的 Linux 客户端基于 FlutterGTK 后端运行时需要libgtk-3、libappindicator等系统库构建侧还要clang、ninja等工具链。同事在 CentOS 7 上拿到的 AppImage 报error while loading shared libraries: libayatana-appindicator3-1.so.1自己编译时 Arch 的 GTK 版本又和依赖声明对不上。AppImage 还额外要求宿主装有libfuse2缺失时直接报fuse: failed to access /dev/fuse——免安装在这里变成了单点故障。LocalSend AppImage 接收界面原理把依赖锁进单个文件LocalSend 用 appimage-builderrecipe 文件定义了 AppDir 组装规则与 apt 依赖清单把 Flutter 可执行文件和运行时库打包成一个二进制维度传统 deb/rpmAppImage安装需 root 与包管理器chmod x后直接运行依赖取决于宿主发行版内置于包内版本锁定更新走发行版源覆盖新文件适用场景深度集成系统组件工具类应用拿来即用两个关键决策基线选 Ubuntu 22.04jammy在老发行版和新发行版之间取平衡老系统可能缺库、新系统符号兼容include只额外拉入libayatana-appindicator3-1系统托盘和librsvg2-commonSVG 渲染两个库——其余 GTK 运行时 Flutter 构建已带exclude掉adwaita-icon-theme避免覆盖用户桌面主题。最小构建命令序列先准备环境拉代码并取 Flutter 子模块装构建依赖。libayatana-appindicator3-dev是 LocalSend 特有依赖托盘图标其余是 Flutter Linux 通用依赖git clone https://gitcode.com/GitHub_Trending/lo/localsend cd localsend git submodule update --init # 项目自带 Flutter SDK保证版本一致 sudo apt install curl clang cmake libgtk-3-dev ninja-build \ libayatana-appindicator3-dev在仓库内的 compile_linux_appimage.sh 可以看到官方 CI 的完整流程本机跑通只需下面两步。先跑代码生成和编译build_runner build -d生成 i18n 与资产引用代码产物在build/linux/x64/release/bundle。./submodules/flutter/bin/flutter pub get ./submodules/flutter/bin/flutter pub run build_runner build -d ./submodules/flutter/bin/flutter build linux再组装 AppDir 并打包recipe 文件会复制到项目根供 appimage-builder 读取mkdir AppDir cp -r build/linux/x64/release/bundle/* AppDir cp support/build/appimage/AppImageBuilder_x86_64.yml AppImageBuilder.yml appimage-builder # 生成 LocalSend-1.18.2-x86_64.AppImagerecipe 的script段会自动补mksquashfs依赖见下方踩坑。ARM64 机器把arch换成arm64参考 AppImageBuilder_arm_64.ymlx86_64 与 arm64 两份配置只有架构字段和库的架构后缀不同。实测LocalSend AppImage 体积、启动与内存指标实测值测试环境AppImage 体积约 90 MB1.18.2 版本x86_64冷启动到主界面约 3-4 秒Ubuntu 22.04Ryzen 7运行时内存约 100-150 MB同上首启略慢是因为 AppImage 会把自身解压到缓存目录二次启动明显更快。传输速度本身与打包方式无关——局域网内千兆 Wi-Fi 下实测约 5 MB/s瓶颈在网络而非本地 I/O。LocalSend 选择文件准备发送选型AppImage、Flatpak、Snap 还是原生包方式启动速度依赖隔离更新机制结论AppImage快完整手动替换用户零配置即可运行Flatpak中需 runtime完整flatpak update用户要装 runtimeSnap慢沙箱完整自动首启需连 snapd原生 deb/rpm快无发行版源跨发行版要维护多源本文推荐 AppImage对 LocalSend 这类拿来即用的局域网工具唯一不需要用户预装任何 runtime 或守护进程的方案就是它。代价是包体约 90 MB 且无自动更新用覆盖文件的方式手动升级。LocalSend 传输进度界面踩坑与规避症状fuse: failed to access /dev/fuse: Operation not permitted→ 原因宿主缺libfuse2或 FUSE 被禁用 → 解法装libfuse2或./LocalSend.AppImage --appimage-extract-and-run解压运行无挂载开销诊断时常用症状appimage-builder报mksquashfs: command not found→ 原因构建机未装squashfs-tools→ 解法recipe 的script段已内置which mksquashfs || apt install squashfs-tools本机手动构建时提前装上症状CentOS 7 / Debian 11 报libayatana-appindicator3-1.so.1缺失 → 原因托盘依赖版本过老包内版本符号不兼容 → 解法换 20.04 以上发行版或--appimage-extract-and-run绕过症状AppRun: Permission denied→ 原因从下载目录直接双击或桌面快捷方式未赋权 → 解法chmod x后再运行症状托盘图标和主题与宿主机不一致 → 原因XDG_DATA_DIRS未透传 → 解法保持 recipe 中XDG_DATA_DIRS: /usr/local/share/:/usr/share/:${XDG_DATA_DIRS}不变延伸把你自己的 Flutter 项目打成 AppImage最小 recipeappimage-builder 通用改 4 处即可version: 1 AppDir: path: AppDir app_info: id: org.example.myapp # 反向域名避免与桌面其他应用冲突 name: MyApp icon: myapp exec: myapp # 必须与 flutter build linux 产物同名 exec_args: $ apt: arch: [amd64] sources: - sourceline: deb http://archive.ubuntu.com/ubuntu/ jammy main include: - libayatana-appindicator3-1:amd64 # 用托盘才需要没有则删掉 AppImage: arch: x86_64三条适配建议id用反向域名且全局唯一桌面环境按它区分应用include按需裁剪不用托盘就删掉 appindicator 条目包体更小需要 SVG 图标才加librsvg2-common照抄 LocalSend 的files.excludeusr/share/man、usr/share/doc/*/README.*等可再省 10% 以上体积收尾一份 appimage-builder recipe 就能把 Flutter 产物加依赖组装成跨发行版可执行的单文件构建链路只有编译→组装→打包三步。下载对应架构的 AppImagechmod x后直接运行即可验证。核心关键词LocalSend AppImage 跨发行版构建长尾关键词Flutter Linux AppImage 打包、appimage-builder 配置、Linux 免安装应用分发【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表