Russian Qt Forum

Qt => Уроки и статьи => Тема начата: ingwarsmith от Июнь 14, 2016, 04:42



Название: О кросскомпиляции библиотеки Qt 4.8.6 для ARM
Отправлено: ingwarsmith от Июнь 14, 2016, 04:42
В прилагаемом PDF-файле описаны действия, произведенные над некоторыми файлами исходников Qt 4.8.6 с целью успешной кросскомпилятивной сборки некоторых библиотек фреймворка (модули Core, Network, Sql) для архитектуры ARMv7-a.
Выбор отдельных модулей из фреймворка Qt4 обусловлен необходимостью решения конкретной задачи:
создание приложения Android/ARM для работы с удаленной БД под управлением MySQL через протокол интернета.
Надеюсь, кому-то будет полезно.


Название: Re: О кросскомпиляции библиотеки Qt 4.8.6 для ARM
Отправлено: lit-uriy от Июнь 14, 2016, 14:53
А чё всякие там Нецеситас (или как его там нынче) не рулят?


Название: Re: О кросскомпиляции библиотеки Qt 4.8.6 для ARM
Отправлено: ingwarsmith от Июнь 14, 2016, 20:53
Не спорю, рулят. Necessitas сам по себе, правда, поддерживает версию Qt максимум 4.5 (если верно помню),  свой QtCreator и "свой" Android NDK (тоже старые) - проект не развивается. Сейчас хорошая связка есть для Андроида с Qt5.
В моем случае было интересно адаптировать Qt 4.8.6 под ARMv7-a (на устройствах под управлением ОС Android) в связке с современным Android SDK/NDK, чтоб кросс-компилить компоненты (библиотечные файлы) с динамической линковкой, из которых происходят вызовы C++-функций посредством механизма JNI в обычном классе Activity, т.е. БЕЗ использования всяких там NativeActivity, без Ministro и прочих фишек (эти вещи для моей задачи были неудобны). При этом linux-либы под ARM компилились в обычном QtCreator с настроенным профилем компиляции для ARM, а Java-код GUI приложения на Андроид - в Android Studio 2.0


Название: Re: О кросскомпиляции библиотеки Qt 4.8.6 для ARM
Отправлено: titan83 от Июль 15, 2016, 18:03
Друг, подскажи, пожалуйста, такой вопрос: как я понимаю, через JNI реально использовать нативные функции Android? У меня просто давняя задачка была на андроиде поработать с MSSQL, а мой любимый Qt5 из доступных драйверов БД под андроидом предлагает только sqlite.
Я нативно, под джайвой, подключался к серверу MSSQL.
Т.е. я бы хотел писать основное приложение на Qt, а функции доступа к БД изолировать в Java.
Как думаешь, получится?


Название: Re: О кросскомпиляции библиотеки Qt 4.8.6 для ARM
Отправлено: ingwarsmith от Июль 15, 2016, 18:37
Цитировать
как я понимаю, через JNI реально использовать нативные функции Android
- это в принципе возможно, только надо знать "в лицо" конкретные либы от linux-ядра андроида и конкретные функции, которые необходимо вызывать; к тому же, необходимо будет скомпилировать (кросскомпилятивно под железо андроид) либу или либы, которые будут оберткой конкретных функций в JNI-интерфейсы - а) эти либы-обертки можно грузить через статический явовский метод System.loadLibrary(...), б) нужно объявить все необходимые "оберточные" методы статическими в Java-классе, из которого они будут вызываться. Кроме того, есть заморочки с составлением имён "оберточных" методов, хотя их можно и обойти. Тут можно посоветовать почитать книгу Сильвена Ретабоуила про Android NDK.
Цитировать
я бы хотел писать основное приложение на Qt, а функции доступа к БД изолировать в Java
- повторюсь, что функции доступа работают через механизм JNI и вызываются из кода Java, как интерфейсы, привязанные к реальным функциям C/C++-либ. Поэтому у меня, если я правильно понял вопрос, сделано как раз наоборот: на Qt написана "оберточная часть", а в Java - GUI андроид приложения. Получится ли у вас задуманное - не знаю, скорее, сомневаюсь.


Название: Re: О кросскомпиляции библиотеки Qt 4.8.6 для ARM
Отправлено: titan83 от Июль 15, 2016, 19:23
Спасибо за ответ. Видимо, я неверно понял концепцию JNI, буду еще читать на досуге.
Если не секрет - зачем вообще Qt, тем более Qt4, если гуи все равно на яве?


Название: Re: О кросскомпиляции библиотеки Qt 4.8.6 для ARM
Отправлено: titan83 от Июль 15, 2016, 19:29
Хм, читаю http://doc.qt.io/qt-5/qandroidjniobject.html#details
и сразу вижу, что Provides APIs to call Java code from C++.
Т.е. как раз то, что мне и нужно - вызывать java-функции из c++.
Ладно, не буду вас грузить - задача не срочная, поразбираюсь на досуге.
Вам еще раз спасибо, что оживили мой интерес к этому вопросу.