Я пытаюсь заставить плагины формата изображения работать на Android.
Я планирую создать этот плагин формата изображения APNG, который точно соответствует стилю официального дополнения Qt плагины формата изображений. Ответ на мою проблему будет таким же и для них.
На десктопе (винда) работает. Пока вы помещаете DLL плагина в подкаталог imageformats
следующим образом:
myapp/<all my binaries>
imageformats/qapng.dll
Но на Android это другая история;
Первая идея заключалась в том, чтобы поместить libqapng.so
в libs
, чтобы qtcreator
связал его со всеми остальными как часть сборки APK. Он входит, но не загружается Qt во время выполнения.
Итак, я изучаю, как работают существующие форматы изображений qt;
оказывается, они не в подкаталоге, а именуются по этому шаблону;
libplugins_imageformats_libqapng.so
Поэтому я переименовываю libqapng.so
в указанное выше и помещаю его в libs
. Хорошая попытка, но не получилось.
После долгих размышлений я обнаружил, что существует секретный массив resource, который связывает логическое расположение плагинов с именами физических файлов;
Это живет в;
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>
....
Итак, мне просто нужно добавить мой новый плагин в этот список.
Конечно же, если я ВЗЛОМАЮ его, он работает! но как правильно добавить мой плагин в этот список как часть сборки?
на этой странице о развертывании Qt Android упоминается вещь под названием bundled_in_lib
, которая действительно то, что мне нужно. Но, к сожалению, не объясняет, как это изменить или добавить к этому.
Я думаю, что может быть секретное магическое заклинание, которое я могу добавить в свой qmake
.pro
файл, чтобы воздействовать на этот bundled_in_lib
ресурс.
Как это сделать? или есть лучший способ, которого я еще не видел. Кажется, не так уж много нужно объяснять эти детали для Android.
В заключение, альтернативой может быть ручная загрузка плагина в main.cpp
. Я пробовал это, и это не работает. Возможно, они должны быть загружены загрузчиком плагинов формата изображений Qt, а не просто загружены вообще. Может быть, есть способ сделать это. не уверена?
используя Qt5.9.1
Спасибо за любую помощь.