ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

5 步构建 LocalSend AppImage:跨发行版文件传输不用装任何依赖

5 步构建 LocalSend AppImage:跨发行版文件传输不用装任何依赖 5 步构建 LocalSend AppImage跨发行版文件传输不用装任何依赖【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsendLocalSend 是一个跑在局域网里的文件传输工具它的 AppImage 版本把程序和依赖一起装进单个可执行文件拿到目标机器后不用装任何包给执行权限就能用。发送页挑选文件并选择附近设备先看你卡在哪里你在公司 Ubuntu 工位上编好的 App拿回家里的 Fedora 机器一运行就报缺库同事的 Arch 机器上同一个依赖又换了包名。每跨一次机器传文件先花十几分钟对依赖比传文件本身还慢。解决思路把依赖连同程序一起带走思路只有一句话先让 Flutter 把 Linux 产物编出来再用 appimage-builder 把产物和运行时需要的库一起打进 AppDir一个符合 Linux 目录规范的临时目录最后压缩成单个 AppImage。维度走系统包单个 AppImage依赖来源跟随目标发行版的库版本自带运行时库运行权限安装常需 root用户级即可运行分发方式每种发行版单独打包同一文件直接拷贝电脑与手机同网互发文件从源码到 AppImage 的构建命令仓库里有一条现成的构建脚本 support/scripts/compile_linux_appimage.sh整体顺序分四步。1. 准备工具链。Flutter 在 Linux 上编译需要 GTK 开发包与 clang、cmakeappimage-builder 本身依赖 libfuse2一次性装齐sudo apt install curl clang cmake libgtk-3-dev ninja-build libayatana-appindicator3-dev libfuse2appimage-builder 从 AppImageCrafters 官方发布页下载赋予执行权限后放进 /usr/local/bin。2. 拉取源码并初始化子模块。仓库自带一份 Flutter 在 submodules/flutter 目录下脚本把 flutter 指向该版本保证所有人用同一工具链编译git clone https://gitcode.com/GitHub_Trending/lo/localsend cd localsend git submodule update --init3. 编译出 Linux 产物。先跑 build_runner 生成 i18n 字符串等代码再编译alias fluttersubmodules/flutter/bin/flutter flutter clean flutter pub get flutter pub run build_runner build -d flutter build linux产物落在 build/linux/x64/release/bundle。4. 组装 AppDir 并打包。把产物拷进空 AppDir放入配方文件后执行 builder根目录会生成可执行的 LocalSend-*-x86_64.AppImagemkdir AppDir cp -r build/linux/x64/release/bundle/* AppDir cp support/build/appimage/AppImageBuilder_x86_64.yml AppImageBuilder.yml appimage-builderarm64 机器只需换用 AppImageBuilder_arm_64.yml其余步骤相同。值得细看的三处配方打包的核心是 support/build/appimage/AppImageBuilder_x86_64.yml三处写法值得留意。apt 源钉在 Ubuntu Jammyapt: arch: - amd64 sources: - sourceline: deb http://archive.ubuntu.com/ubuntu/ jammy main include: - libayatana-appindicator3-1:amd64 - librsvg2-common:amd64为什么这样写钉死一个小版本做依赖基底换机器重建也拿到相同库版本include 只列托盘与 SVG 图标两个真实用到的库而不是整包拉取。XDG_DATA_DIRS 保留宿主搜索路径runtime: env: XDG_DATA_DIRS: /usr/local/share/:/usr/share/:${XDG_DATA_DIRS}为什么这样写AppImage 以只读方式隔离运行句尾保留宿主系统原值桌面环境仍能定位到应用的图标和菜单项。files.exclude 给文档瘦身files: exclude: - usr/share/man - usr/share/doc/*/README.* - usr/share/doc/*/changelog.*为什么这样写man 页与变更日志运行时用不到排除后包体约小 15%功能不受影响。运行体验拿到的那个文件有多轻 ⚡单文件双击运行目标机器无需任何额外安装用户级权限运行不需要 rootx86_64 与 arm_64 各有一份配方按架构出包更新即替换文件不用走包管理器流程排除文档与 man 页后包体更紧凑批量文件的传输进度视图四种打包方式怎么选AppImage免安装、跨发行版直接跑短板是没有内置自动更新Flatpak沙箱隔离强但宿主需装运行时启动偏慢Snap自动更新与商店集成方便代价是强制沙箱与更大启动开销deb/rpm系统集成最好但每个发行版单独出包依赖碎片化最麻烦能搬走的三条经验 apt 基底钉住具体小版本如 jammy让任何人任何时候重建都得到一致的依赖include 按最小清单管理每多一个库包体就大一圈只装真实用到的多架构配方拆成独立文件x86_64 / arm_64CI 里按架构换文件不写分支逻辑下一步下载对应架构的 AppImage赋予执行权限后即可直接传输文件想自己构建时先通读仓库里那条 Linux AppImage 构建脚本把四步顺序对照做一遍。核心关键词LocalSend AppImage 跨发行版文件传输 长尾关键词Linux 文件传输打包、Flutter AppImage 构建、appimage-builder 配置、局域网文件共享、多架构 Linux 应用分发【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表