如何使 AppDir 文件可用于 AppImage 应用程序?

How to make AppDir files available to an AppImage application?

我的构建系统使用介子,将我的应用程序需要的一些文件放在 AppDir/usr/share/myapp/resources 下的 AppDir 中。当它是 运行 时,应用程序需要同时读取和写入这些文件。当我查看这些文件时,这些文件位于 AppDir 中,但是当生成 .AppImage 时,独立的 运行 可执行文件无法访问这些文件。将应用程序与桌面集成时,应用程序会安装在 ~/Applications 中,但它不包含这些文件。

这是在不使用 AppImage (ninja install)

的情况下在系统上安装应用程序时的可视化效果
 usr
    share
         myapp
             resources
                 MainWindow.glade
                 dataCache.json

当我执行 DESTDIR=AppDir ninja install 时,结构会这样结束

 AppDir
     usr
         share
             myapp
                 resources
                     MainWindow.glade
                     dataCache.json

当应用程序 (MyApp.AppImage) 通过 AppImageLauncher 集成到用户桌面时,它只会将 AppImage 复制到应用程序目录中。没有其他文件夹或文件。

编辑:我正在使用 ./linuxdeploy-x86_64.AppImage --appdir AppDir 创建目录 AppDir。然后我使用 DESTDIR=AppDir ninja install 将应用程序安装到 AppDir,然后我使用 ./linuxdeploy-x86_64.AppImage --appdir AppDir --output appimage 创建 AppImage

一旦应用程序被捆绑,人们将如何访问 AppDir 中的那些文件?或者如何让应用程序集成将这些文件复制到应用程序文件夹,以便应用程序可以在应用程序处于 运行 时访问它们?

要在 运行 时解析 AppImage 挂载点,您可以使用 APPDIR 环境变量。例如,如果要解析 usr/share/icons/hicolor/myicon.png 则需要使用以下路径 $APPDIR/usr/share/icons/hicolor/myicon.png.

建议您修改应用程序,使其能够根据二进制位置解析其资源。作为替代方案,您可以使用自定义环境变量来设置主二进制文件旁边的路径或配置文件。

关于在 AppImage 中写入文件。这在设计上是不可能的。 AppImage 是一个只读的 SquashFS 映像,在 运行 时间挂载。任何应用程序数据都应写入 $HOME/.config$HOME/.local/share,具体取决于它是配置数据还是其他类型的数据。推荐的工作流程是在第一个 运行.

上复制此类数据

有关是否复制您的申请数据的详细信息,请参阅https://www.freedesktop.org/wiki/Software/xdg-user-dirs/