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

资讯详情

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

LocalSend AppImage打包完整指南:四步做出单文件即开即用的Linux便携应用

LocalSend AppImage打包完整指南:四步做出单文件即开即用的Linux便携应用 LocalSend AppImage打包完整指南四步做出单文件即开即用的Linux便携应用【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend你刚想把几百MB的文件从电脑传到手机上LocalSend一个开源的局域网跨设备文件传输工具最合适。可装到别的Linux机器上时换台机器想直接用依赖版本却总是对不上包管理器报错报个不停。本文以LocalSend的AppImage打包流程为例用大白话讲清楚三件事AppImage凭什么做到免安装、它的打包配方怎么写的、你自己如何产出一个 .AppImage 文件。AppImage概念自包含、免安装、免root意味着什么AppImage是Linux上的一种单文件便携格式核心就一个词自包含。应用本体加上运行需要的第三方库全部打在一个文件里。可以把它想象成U盘程序和家具依赖库都装进了盒子插到谁的电脑上都能用不挑那台电脑原来装了什么。它落在实处有三点免安装下载下来加个执行权限就能运行全程不经过包管理器免root运行在用户级不动系统目录跨发行版依赖自带Ubuntu、Fedora、Arch上基本都能跑原理上它启动时通过FUSE把自己临时解压到内存里执行关窗口就清理不给系统留垃圾。和另外几种Linux分发方式怎么比对比项AppImageSnapFlatpakdeb/rpm依赖放哪打包时随文件自带沙盒运行时内置沙盒运行时内置靠系统提供要不要安装不用直接运行需snapd需flatpak需包管理器权限要求用户级可能需要root用户级通常需要root跨发行版兼容高好好绑定具体发行版更新方式手动换包/外部工具内置自动更新内置自动更新走包管理器一句话选型图省事、要拿起来就走选AppImage要自动更新和沙盒看Snap/Flatpak要融入系统用deb/rpm。从源码到最终单文件完整主线是这样的LocalSend打包配方关键字段逐个讲仓库里准备好了两份打包配方一份x86_64、一份arm64本质是写给appimage-builder的清单入口跑哪个文件、依赖装哪些、文件删哪些。你不用背YAML看懂每个字段的作用就行字段作用LocalSend配方里的取值app_info.id应用唯一标识桌面集成用它org.localsend.localsend_appapp_info.exec入口可执行文件名localsend_appapp_info.exec_args透传命令行参数给应用$apt.arch目标CPU架构amd64 / arm64apt.include运行时依赖白名单libayatana-appindicator3-1、librsvg2-commonapt.exclude剔除的发行版依赖adwaita-icon-themeruntime.env启动时注入的环境变量XDG_DATA_DIRS 指向 /usr/local/share 和 /usr/sharefiles.exclude剔除的静态文件usr/share/man 及各类doc文档AppImage.arch产物架构x86_64 / arm_64AppImage.update-information更新源推断方式guess两个细节值得注意依赖统一从Ubuntu 22.04jammy源下载。也就是说这个AppImage的运行环境相当于一台装齐了所需库的干净Ubuntu 22.04理解排错时很有用。依赖用白名单只列了系统托盘和SVG渲染真正要用的两个库包体小、可审计。 四步构建自己的 .AppImage第一步装构建依赖一条命令搞定sudo apt install curl clang cmake libgtk-3-dev ninja-build libayatana-appindicator3-dev libfuse2前几个是编译Flutter应用用的最后的libfuse2是运行appimage-builder工具用的。另外从appimage-builder官方发布页下载它的AppImage放到/usr/local/bin/appimage-builder并加上执行权限。第二步拿代码编译Linux版git clone https://gitcode.com/GitHub_Trending/lo/localsend cd localsend git submodule update --init flutter pub get flutter pub run build_runner build -d flutter build linux机器上没装Flutter也别慌着装最新的仓库submodules/flutter/里带了锁定版本的Flutter SDK官方构建脚本就是直接用它避免版本漂移。第三步组装AppDir并打包mkdir AppDir cp -r build/linux/x64/release/bundle/* AppDir appimage-builder --recipe support/build/appimage/AppImageBuilder_x86_64.yml chmod x LocalSend-*-x86_64.AppImageappimage-builder会连做三件事按配方从jammy源下载白名单库放进AppDir、剔除配方里标记的文件、最后用mksquashfs把整个目录压成单个 .AppImage。第四步验证双击或./LocalSend-*.AppImage直接跑窗口正常出来就成功了。⚠️ 避坑指南多架构发布与常见报错排查要发arm64版得从头再来吗不用。arm64有一份独立配方和x86_64版的差异只有几处apt.arch与依赖后缀改成arm64、AppImage.arch改成arm_64。构建时把--recipe指过去就行。包体积想再小一点从哪下手配方里两类exclude在干活files.exclude把man手册、doc里的changelog、README这类纯文本剔掉运行时毫无价值apt.exclude把adwaita图标主题这种整包剔掉。打完后体积比预期大多半是白名单里多塞了带大库的依赖。运行报错快速排查清单双击没反应或提示AppImage错误先确认libfuse2装没装sudo apt install libfuse2Permission denied忘了加执行位chmod x一下Error while loading shared libraries缺依赖。ldd AppDir/usr/bin/localsend_app | grep not found找出缺的库手动拷进AppDir重新打包应用菜单里没有图标update-desktop-database ~/.local/share/applications想看清包内部结构./LocalSend-*.AppImage --appimage-extract然后直接翻解压出来的squashfs-root目录最后一条是调试时的第一选择运行有问题就先解压文件一个个看问题出在哪基本一眼能定位。拿到AppImage之后的自查清单发布这个单文件之前按顺序过五关chmod x已执行干净桌面环境下双击能直接启动架构与目标机器一致目标机uname -m的结果和文件名里的架构对得上x86_64或arm_64文档类文件确实被剔除包体积极在预期范围内传输链路可用两端连同一个Wi-Fi接收页能看到附近设备发一个文件能正常往返按LocalSend-{版本}-{架构}.AppImage命名例如LocalSend-1.18.2-x86_64.AppImage别人看文件名就知道版本和适用架构五条都过了这个文件就可以放心丢给别人任何一台Linux机器拿到即用。【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表