尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LocalSend 跨发行版 AppImage 打包部署怎么做?完整流程解析

LocalSend 跨发行版 AppImage 打包部署怎么做?完整流程解析 LocalSend 跨发行版 AppImage 打包部署怎么做完整流程解析【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend你手上有个局域网文件传输工具要装进 Ubuntu、Fedora、Arch 三台机器。发 .debFedora 直接不认。发源码没人愿意装一整条编译依赖链。LocalSend 就是一个 AirDrop 的开源替代品靠局域网广播发现设备、点对点传文件它在 Linux 上的解法是只维护一套 AppImage 配置x86_64 和 ARM64 各出一份产物下载下来 chmod x 就能跑。从 Flutter 构建到单文件产物AppImage 打包流水线分几步整条链路是四步Flutter 把 Dart 代码编译成 Linux 原生二进制把构建产物拷进 AppDir 目录appimage-builder 按配方recipe解析依赖、补上运行时库最后用 squashfs 压成单文件。产物里没有安装概念运行前由 FUSE 把文件挂载成目录再执行里面的 AppRun。本地构建入口在 compile_linux_appimage.sh核心动作就几行rm -rf /tmp/build cp localsend /tmp/build -r pushd /tmp/build git submodule update --init alias fluttersubmodules/flutter/bin/flutter flutter pub get flutter pub run build_runner build -d flutter build linux这段脚本把整个仓库拷进 /tmp/build 再构建。目的就一个中间产物不污染源码树构建失败也不用回头清理项目目录。注意 flutter 被 alias 指向仓库内的 submodule本地构建用的是锁定版本的 Flutter。CI 走的是另一条路build_linux_appimage_x64.yml 固定 Flutter 3.41.9、跑在 ubuntu-22.04 上编译完把 bundle 拷进 AppDir、补上 32/128/256 三档图标再调用 appimage-builder 的 action 出包。两条路殊途同归但版本都钉死了。配方里的依赖清单怎么定只带两个库排除一堆文档这是整个跨发行版兼容的关键。AppImage 里的动态库版本来自哪里来自配方里写的 apt sources。LocalSend 的 AppImageBuilder_x86_64.yml 锁死了 Ubuntu 22.04 (jammy) 的源AppDir: apt: arch: [amd64] sources: - sourceline: deb http://archive.ubuntu.com/ubuntu/ jammy main restricted # ... 其余 jammy 源省略 include: - libayatana-appindicator3-1:amd64 - librsvg2-common:amd64 exclude: - adwaita-icon-theme:*include 里只有两个库libayatana-appindicator3-1 给系统托盘librsvg2-common 负责 SVG 图标渲染。这是 Flutter Linux 应用运行时的真实硬依赖配方里多一个库产物就胖一分。exclude 排掉 adwaita 图标主题files.exclude 再清掉 man 页和各类 README、changelog。文档类文件占了不少字节用户也从不看。⚠️ 注意一个容易踩的坑include 必须和应用实际 dlopen 的库对齐少一个启动就报缺库多一个白付体积。配方里还留了一段 runtime envruntime: env: XDG_DATA_DIRS: /usr/local/share/:/usr/share/:${XDG_DATA_DIRS}这一行把包内的 share 目录排到宿主 XDG 路径前面但保留了宿主的原值。效果是 AppImage 内的应用既能找到自带资源还能看到系统图标和 MIME 类型托盘与文件管理器集成因此正常工作。 ARM64 走 AppImageBuilder_arm_64.yml和 x86_64 版几乎逐行相同只有 arch 和库的后缀arm64不同。双架构的维护成本被压到接近零。落地操作要点AppImage 比 Flatpak、Snap 快在哪又缺什么操作层面记住三件事。本地构建前装好 clang、cmake、libgtk-3-dev、ninja-build、libayatana-appindicator3-dev还要 libfuse2否则 AppImage 挂载不了。CI 与配方都钉在 Ubuntu 22.04镜像一升级库版本跟着变产物行为就变。验证很简单装一个干净的 Linux 容器把产物丢进去 chmod x 跑一遍托盘、图标、传输各点一遍。取舍上AppImage 赢在分发速度和启动速度单文件、免 root、不用等 runtime 下载输在没有沙箱、没有内置自动更新托盘这类系统级能力还依赖宿主环境。选型时只问两个问题维度AppImageFlatpak / Snapdeb / rpm跨发行版部署单文件直接跑需装平台仅对应系启动与包体快、较小首次拉 runtime偏重最轻沙箱隔离无完整无自动更新需自建商店/仓库自带需自建需要强隔离或统一商店管理就上 Flatpak/Snap追求分发效率和启动体验就留 AppImage。两者不冲突同一个项目可以同时发。打包前记住这 5 件事基础环境锁死在一个 Ubuntu LTS依赖版本差问题就从不可控变成可控。include 只放运行时硬依赖exclude 按路径规则清文档完事验证托盘和图标。XDG_DATA_DIRS 记得拼上宿主的 ${XDG_DATA_DIRS}不然包内应用看不到系统资源。双架构让配置共用只改 arch 和库后缀CI 里为两种架构各开一条流水线。AppImage 没有自动更新机制版本分发要自己配下载页或脚本别指望 AppRun。核心关键词LocalSend、AppImage 跨发行版部署、Flutter Linux 打包 长尾关键词AppImage 构建脚本怎么写、依赖排除清单怎么定、Flutter 应用 Linux 多架构分发【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表