gpt4 book ai didi

android - 如何在 Android 上部署 Qt 图像格式插件

转载 作者:行者123 更新时间:2023-11-29 00:03:24 25 4
gpt4 key购买 nike

我正在尝试让图像格式插件在 Android 上运行。

我的计划是构建这个 APNG图片格式插件,与官方Qt extra的风格非常接近image format plugins .对于这些问题,我的问题的答案也是一样的。

在桌面(Windows)上它可以工作。只要将插件 DLL 放入 imageformats 子目录中,如下所示:

myapp/<all my binaries>
imageformats/qapng.dll

但在 Android 上,则是另一回事;

第一个想法是将 libqapng.so 放入 libs 以便 qtcreator 将它与所有其他的 bundle 在一起作为 APK 构建的一部分.它会进入,但不会在运行时由 Qt 加载。

所以我研究了现有的 qt 图像格式是如何工作的;

事实证明,它们不是在子目录中,而是根据这种模式命名的;

libplugins_imageformats_libqapng.so

所以我将 libqapng.so 重命名为上面的名称并将其放入 libs 中。不错的尝试,但没有成功。

经过一番摸索,我发现有一个 secret 的资源数组将插件的逻辑位置与物理文件名联系起来;

这个住在;

res/values/libs.xml

看起来像这样:

<array name="bundled_in_lib">
...
<item>libplugins_imageformats_libqgif.so:plugins/imageformats/libqgif.so</item>
<item>libplugins_imageformats_libqicns.so:plugins/imageformats/libqicns.so</item>
<item>libplugins_imageformats_libqico.so:plugins/imageformats/libqico.so</item>
<item>libplugins_imageformats_libqjpeg.so:plugins/imageformats/libqjpeg.so</item>
<item>libplugins_imageformats_libqsvg.so:plugins/imageformats/libqsvg.so</item>
<item>libplugins_imageformats_libqtga.so:plugins/imageformats/libqtga.so</item>
<item>libplugins_imageformats_libqtiff.so:plugins/imageformats/libqtiff.so</item>
<item>libplugins_imageformats_libqwbmp.so:plugins/imageformats/libqwbmp.so</item>
<item>libplugins_imageformats_libqwebp.so:plugins/imageformats/libqwebp.so</item>
....

所以,我只需要将我的新插件添加到该列表中即可。

果然,如果我HACK进去,它就成功了!但是如何将我的插件作为构建的一部分正确地添加到这个列表中呢?

this Qt Android 部署页面提到了一个叫做 bundled_in_lib 的东西,这确实是我需要的。但不幸的是,它没有解释如何更改它或添加它。

我在想可能有一个 secret 魔法可以添加到我的qmake .pro 文件来影响这个bundled_in_lib 资源。

怎么做?或者有没有更好的方法我还没有见过。对于Android,似乎没有太多解释这些细节。

最后一点,另一种方法可能是在 main.cpp 中手动加载插件。我已经试过了,但没有用。也许,它们需要由 Qt 图像格式插件加载器加载,而不是完全加载。也许有办法做到这一点。不确定?

使用Qt5.9.1

感谢您的帮助。

最佳答案

按照@Felix 的回答,ANDROID_EXTRA_PLUGINS是正确的,但它的工作原理有点奇怪。

在讨论缺少此功能的文档之后 here ,经过反复试验,我发现了这一点;

ANDROID_EXTRA_PLUGINS必须指定目录,而不是文件。所以你指向一个你自己的插件目录。这个目录下的东西(包括子目录)在我原来的问题中被破坏并在下面解释。

所以,对于我的插件 libqapng.so ,我有:

ANDROID_EXTRA_PLUGINS += <some path>/plugins

我的 android 插件构建 .pro 将输出放入;

<some path again>/plugins/imageformats/libqapng.so

.so lib,然后最终被破坏(例如对于 arm);

android-build/libs/armeabi-v7a/libplugins_imageformats_libqapng.so

资源获取条目;

android-build/res/values/libs.xml

    <array name="bundled_in_lib">
...
<item>libplugins_imageformats_libqapng.so:plugins/imageformats/libqapng.so</item>
</array>

根据需要。

感谢@Felix 几乎给出了答案,但我想为了其他人的利益,我应该在这里写下额外的细节。

关于android - 如何在 Android 上部署 Qt 图像格式插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47061829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com