Как интегрировать библиотеку Qt в собственный проект Android - PullRequest
0 голосов
/ 21 марта 2019

Я - нативный разработчик Android, и клиент попросил меня повторно использовать его проект библиотеки Qt в нативном приложении для Android.Я действительно новичок в разработке Qt, я имею в виду, я понимаю C / C ++, но никогда не занимался ни самой разработкой Qt, ни средой, ни методами развертывания.

Я изучал эти решения, но я неНе могу приблизиться к возможности создания проекта Android с библиотекой Qt, внутри которой я могу взаимодействовать.

Подобные решения:

Мой вопрос: Как мне экспортировать мой проект Qt в пригодный для использования формат для моего проекта Android?Любое пошаговое руководство будет очень полезно.

Спасибо!

1 Ответ

2 голосов
/ 22 марта 2019

Предполагая, что ваше приложение Qt используется только для его логики (не на стороне GUI), что вам нужно:

Добавление JNI в вашу библиотеку Qt для Android

JNI (собственный интерфейс Java) позволяет создавать интерфейс для связи и использования собственного (C ++) кода из Java. Это используется для переноса кода C ++ и предоставления функций, видимых и используемых непосредственно из вашего приложения Android

  • Установите нужную версию Qt для Android с помощью онлайн-установщика Qt (флажок при выборе нужной версии Qt)
  • Создайте интерфейс JNI, чтобы ваше приложение и библиотека могли общаться. Это рассматривается в этом примере: https://developer.android.com/ndk/samples/sample_hellojni. Я, вероятно, рекомендовал бы создать другую библиотеку C ++ / JNI, выступающую в качестве оболочки для вашей библиотеки C ++ / Qt. Таким образом, вы не загрязняете исходную библиотеку зависимостями JNI.

Интегрируйте свою библиотеку JNI в свое приложение

Если у вас есть интерфейс JNI, вы должны сделать кросс-компиляцию и отправить эту библиотеку вместе с приложением для Android

  • Создайте свою нативную библиотеку из Android Studio (после указания на ваши библиотеки Qt и включите dir). Кроме того, вы можете вручную собрать его из Qt Creator (немного проще) и импортировать только получившийся .so. Но это будет больно, если ваша библиотека Qt изменится
  • Упакуйте библиотеку (.so) и загрузите ее при запуске приложения. Это также рассматривается в примере. После загрузки библиотеки вы сможете использовать представленные вами функции JNI и передавать аргументы после некоторой работы по преобразованию. Ваше Android-приложение также может передавать дескриптор в собственную библиотеку, позволяя общаться обоими способами.

Примечания

  • Будьте осторожны с лицензированием вашего проекта. Кросс-компиляция Qt для Android, скорее всего, переключится на GPLv3 или коммерческую лицензию по сравнению с LGPLv3 без Android.
  • Библиотеки Qt должны быть включены в ваш окончательный пакет. Поэтому они либо должны быть статически связаны с вашей исходной библиотекой, либо динамически связаны, и храниться в вашем APK
  • Вы можете использовать классы Qt JNI, чтобы упростить создание интерфейса, но это не обязательно: https://doc.qt.io/qt-5/qandroidjniobject.html
  • Потоки могут стать трудными, так как вызовы в / из JNI должны выполняться из основного потока

Я бы порекомендовал начать с рабочего примера, если вы его найдете, поскольку вся эта настройка определенно займет некоторое время. Я не знаю полного учебника, охватывающего это, но не стесняйтесь поделиться, если найдете его!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...