Qt Creator - среда разработки. Qt - Framework для разработки приложений под разные платформы, включая Android и iOS. QML = Qt Markup Language.
QML позволяет использовать JavaScript для разработки логики управления пользовательским интерфейсом. QML – declarative language. В рамках Qt QML используется для описания пользовательского интерфейса, а C++ для разработки тяжёлых задач. Qt Quick – это QML + JavaScript.
Стартовая страница: https://www.qt.io. Страница загрузки: https://www.qt.io/download
Для того, чтобы иметь возможность собирать приложения для Android, следует установить JDK, Android SDK и NDL.
Начать подготовку стенда сборки необходимо с установки Java SE Development Kit (JDK): http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Проверить успешность установки JDK можно командой: java -version
После успешной установки JDK имеет смысл добавить путь к исполняемыми файлам Java в «Path» (Переменные среды исполнения). Например: C:\Program Files\Java\jdk1.8.0_191\bin
Современные Android-приложения представляют собой смесь bytecode JVM и native-кода целевой платформы (x86, либо ARM). Bytecode JVM генерируется, преимущественно, из кода на Java. Виртуальная машина JAVA (JVM) устанавливается вместе c Java Runtime (JRE), а компиляторы с Java, а также – дополнительный инструментарий, устанавливаются посредством JDK. Основная причина использования JDK: инструментальные средства, используемые при создании package с Android-приложения, а также JVM для работы систем сборки (в частности, для Gradle нужна JVM, т.к. этот инструмент написан на Java).
Инсталлятор Android Studio доступен здесь: https://developer.android.com/studio/
В Android Studio это не только IDE, но и набор инструментария, из которых наиболее важными являются:
- Средства установки Android SDK и NDK
- Эмуляторы мобильных устройств
- Gradle - система сборки (apk-файлов из bundle)
Android Studio устанавливается сразу с последним SDK, который отключить нельзя.
При установке SDK и NDK разумно выбрать простое имя корневого каталога, БЕЗ ПРОБЕЛОВ, например: c:/Android_SDK и c:/Android_SDK/ndk-bundle. Наличие пробелов в пути приводит к тому, что сборка фатально разваливается.
При тестировании кода, преимущественно, используются эмуляторы на базе архитектуры x86, т.е. они работают на порядок быстрее (официальная оценка Google), чем эмуляторы мобильных устройств на базе ARM-процессоров.
SDK Platforms различаются по API Level и, чаще всего, номер API Level связан к официальной версией Android. Например, API Level 23 – означает Android 6.0 “Marshmallow”. При работе с утилитами командной строки, чаще всего используется именно этот номер. На персональном компьютере может быть установлено несколько разных SDK Platforms.
Существует как платная версия Qt, так и бесплатная Community Edition. Для получения любой из версий необходимо выполнить регистрацию учётной записи разработчика.
Официальная статья по настройке окружения: http://doc.qt.io/qt-5/androidgs.html
При установке Qt необходимо крайне внимательно изучить диалог "Выбор компонентов". Если принять варинаты выбора по умолчанию, может быть установлено компонентов на 40-60 Гб.
При установке Qt Creator запускается скрипт автоматического поиска конфигураций toolchains - наборов компиляторов для сборки Native-кода. Если нужные toolchain найти не удалось, настройку придётся сделать вручную, что гарантированно занимает много времени и редко заканчивается успехом. Проблема совместимости Qt и NDK действительно значимая.
Поиск доступных toolchains в автоматическом режиме возможен при использовании setup-toolchains. Пример вызова:
qbs setup-toolchains --detect
Подробнее о qbs: https://download.qt.io/official_releases/qbs/. Также доступен подобный инструмент для поиска toolchains для Android.
При сборке проектов, которые долго не изменялись, возможны ошибки, связанные с указанием некорректного ABI. Так, например, приложение могло разрабатываться с использованием Android-эмулятора для архитектуры процессора x86, что обеспечивает высокую скорость работы приложения. При этом сборка этого приложения под архитектуру ARM может завершиться ошибкой. Несовместимость может появиться из-за неаккуратной настройки pro-файлов. В приведённом ниже примере, часть кода собирается только при использовании ABI для x86:
contains(ANDROID_TARGET_ARCH,x86) {
ANDROID_PACKAGE_SOURCE_DIR = \
$$PWD/android
}
При смене минорной версию на более современную могут возникнуть ошибки сборки. Например, при переходе с Qt 5.12 на 5.15 мне пришлось изменить структуру "AndroidManifest.xml". Статья, которая помогла устранить проблему сбоя: https://stackoverflow.com/questions/61097966/qt-on-android-runtime-error-invalid-package-identifier-when-getting-bag-for-res
Также авторы Qt Framework периодически пересматривают правила оформления кода. Так, например, в Qt 5.12 прикрасно работал следующий код:
connect(networkReply, QOverload<QNetworkReply::NetworkError>::of(&QNetworkReply::error),
this, &MyQmlProxyClass::networkReplyError);
В 5.15 этот код уже не собирается (Deprecated) и его нужно заменить на следующий (более ясный и компактный):
connect(networkReply, &QNetworkReply::errorOccurred, this, &MyQmlProxyClass::networkReplyError);
Бесплатная книга о QML: http://qmlbook.github.io/
Бесплатный курс по разработке приложений для Android: https://www.udacity.com/course/new-android-fundamentals--ud851
Облачный эмулятор Android (высокопроизводительный и платный): https://www.genymotion.com/