AppImage打包

AppImage打包:

一、下载工具链

复制代码
linuxdeploy,linuxdeploy-plugin-qt
下载命令
`
wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage

chmod +x linuxdeploy-*.AppImage
`

二、构建AppDir目录

a. 添加.desktop文件及icon文件等,执行 build_AppDir.sh

三、确认目录现在完整如下(非常关键)

复制代码
	myproject/

└── usr/

├── bin/myproject

├── lib/...

├── share/

├── applications/

│ └── myproject.desktop ✅ 必须

└── icons/

└── hicolor/

└── 256x256/apps/

└── myproject.png ✅ 必须

四、构建AppImage

执行构建命令前先临时设置LD_LIBRARY_PATH添加依赖库路径
linuxdeploy-x86_64.AppImage \ --appdir myproject \ --executable myproject/usr/bin/myproject \ --plugin qt \ --output appimage

五、打包完成后的必做验证步骤(2 条命令)

1️⃣ 验证 AppImage 能启动:

./myproject-x86_64.AppImage

2️⃣ 验证依赖是否全部来自包内:

./myproject-x86_64.AppImage --appimage-extract

ldd squashfs-root/usr/bin/myproject | grep usr/lib

六、AppImage读取配置文件相关修改

打包后路径对应

./xxx.conf //当前目录此时对应的时AppImage包所在路径

applicationDirPath() //此时对应的路径为AppImage包目录下的/usr/bin

  1. APPImage包只读的配置文件路径可直接一起打包,修改查找路径:

#ifdef BUILD_APPIMAGE

strAppPath = QCoreApplication::applicationDirPath()

  • "/.../share/myproject/dist/combinnav";

#else

strAppPath = QDir::currentPath()+"/dist/combinnav";

#endif

复制代码
1. 需要安装后修改的,
a. 默认配置仍然放在 AppImage 内(只读模板)
b. 启动时自动复制到"用户可写目录"
你必须保证 main() 启动第一行就执行这段代码:

void initConfDir()

{

QString userConfDir =

QStandardPaths::writableLocation(

QStandardPaths::AppConfigLocation) + "/conf";

QString defaultConfDir =

QCoreApplication::applicationDirPath()

  • "/.../share/myapp/conf";

QDir userDir(userConfDir);

if (!userDir.exists())

userDir.mkpath(".");

QDir src(defaultConfDir);

for (const QFileInfo &fi : src.entryInfoList(QDir::Files)) {

QString dst = userConfDir + "/" + fi.fileName();

if (!QFile::exists(dst)) {

QFile::copy(fi.absoluteFilePath(), dst);

}

}

}

在 main() 中:

复制代码
int main(int argc, char *argv[])

{

QApplication app(argc, argv);

initConfDir(); // ✅ 必须在任何读配置之前

MainWindow w;

w.show();

return app.exec();

}

c. 之后 所有写配置操作只允许使用用户目录

复制代码
//写入示例

QString confDir =

QStandardPaths::writableLocation(

QStandardPaths::AppConfigLocation) + "/conf";

QSettings def(confDir + "/default.ini", QSettings::IniFormat);

def.setValue("ui/theme", "dark"); // ✅ 这里一定可写

def.sync();

复制代码
或者用户手动修改后直接使用
#ifdef BUILD_APPIMAGE
    QString confDir =
    QStandardPaths::writableLocation(
        QStandardPaths::AppConfigLocation) + "/conf";
    QSettings m_settings(confDir + "/default.ini", QSettings::IniFormat);
    qDebug()<< Q_FUNC_INFO << "Appimage Config Path:" << confDir + "/default.ini";
#else
    QSettings m_settings("./conf/default.ini", QSettings::IniFormat);
    qDebug() << Q_FUNC_INFO << "Config Path:" << "./conf/default.ini";
#endif

七、其他

  1. 本地缓存runtime

    a. 手动下载runtime包

    wget -O runtime-x86_64 https://github.com/AppImage/type2-runtime/releases/download/continuous/runtime-x86_64

    b. 设置环境变量让 appimagetool 使用本地 runtime(关键)

    export APPIMAGE_RUNTIME_FILE=~/appimage/runtime/runtime-x86_64

    c. 重新运行你的 linuxdeploy 打包命令

  2. 兼容本地调试及Appimage的配置路径写法

    confdir.h

相关推荐
水木姚姚3 天前
搭建 TensorFlow 在 VScode 下编程环境(Debian)
人工智能·windows·vscode·debian·tensorflow
wadesir3 天前
Debian dd命令详解(磁盘备份与恢复完整教程)
linux·运维·debian
云空4 天前
《Debian 系统上部署 YOLO11》
人工智能·神经网络·yolo·debian
李李李li4 天前
debian系统打包(live build)
debian·live build
无名3875 天前
FusionPBX Debian 12 安装
运维·debian·通信
fiveym6 天前
PXE 装机引导文件提取与验证(Debian 9.13 适配,含 TFTP 传输测试)
运维·debian
wadesir7 天前
Debian容器存储管理(Docker中实现数据持久化的完整指南)
运维·docker·debian
一个平凡而乐于分享的小比特8 天前
Linux、Debian、Yocto、Buildroot、Android系统详解
android·linux·操作系统·debian·yocto·buildroot
quweiie8 天前
debian 12安装postgis3.6
debian·debian12·安装postgis