Заметки по платформе и компилятору — Android
Эта страница содержит информацию, специфичную для создания приложений Qt и их запуска на платформе Android. Qt поддерживает версии Android 2.3.3 (уровень API 10) и более поздние.
Разработка приложений для Android в Qt Creator
Самый простой способ разработки приложений Qt для Android — использовать Qt Creator. При применении набора инструментов Qt для Android к проекту Qt Creator, он создаст и будет поддерживать набор файлов, необходимых для работы приложения на Android.
Файлы, добавленные в ваш проект:
- Файлы .java будут служить точкой входа в ваше приложение и автоматически загружать Qt для выполнения нативного кода вашего приложения
- AndroidManifest.xml, который предоставляет метаданные о вашем приложении
- Другие XML-файлы, описывающие зависимости вашего приложения
- Файлы ресурсов
- В зависимости от выбранного метода развертывания в Qt Creator, дополнительные файлы, такие как библиотеки и файлы QML, могут быть включены в проект.
Qt Creator добавляет эти файлы в подкаталог вашего проекта, называемом android. Содержимое папки android используется в качестве основы для пакета вашего приложения.
Пакет приложения
На Android приложения распространяются в пакетах, называемых APK. Qt Creator создаёт APK для вас, но если по какой-либо причине вы хотите сделать это вручную, вы должны убедиться, что соответствующие файлы упаковки и сборки на месте. Для получения более подробной информации о том, как выполняется упаковка, см. Развёртывание приложения на Android.
Развертывание
Qt Creator в настоящее время поддерживает три метода развертывания приложений для Android: метод по умолчанию подходит для распространения файла APK. С этим методом развертывания необходимые библиотеки и файлы Qt будут скопированы в каталог вашего проекта и включены в APK, так что вы получите автономный, распространяемый пакет приложения.
Развертывание с Ministro
Второй метод подходит, если вы хотите минимизировать размер вашего APK, и его можно выбрать, открыв настройки Запуск вашего проекта, развернув Конфигурации развертывания и сняв отметку с поля Использовать локальные библиотеки Qt. В этом случае ваше приложение будет иметь внешнюю зависимость под названием Ministro. Если пользователь загрузит ваше приложение, и это первое приложение на его устройстве, которое зависит от Ministro, ему будет предложено установить его перед запуском вашего приложения. Ministro загружает библиотеки Qt из репозитория по вашему выбору. URL репозитория можно установить, отредактировав файл android/res/values/libs.xml, который создаётся Qt Creator при настройке вашего проекта. Ministro затем будет служить централизованным репозиторием для библиотек Qt, и несколько приложений могут использовать библиотеки, чтобы ограничить количество дублирования. Обратите внимание, что использование этого метода развертывания требует репозитория для библиотек, которые вы хотите распространять.
Развертывание для отладки
Третий метод удобнее при тестировании приложения на устройстве, физически подключённом к вашей машине разработки (или эмуляторе). Он скопирует библиотеки Qt в временную директорию на вашем устройстве и запустит приложение с использованием этих библиотек. APK, созданный таким образом, не пригоден для распространения, так как он зависит от подготовки устройства к содержанию библиотек Qt в нужном месте. Однако, так как библиотеки Qt копируются на устройство только один раз, это обеспечивает более быстрый цикл разработки, поэтому он больше подходит для тестирования изменений в приложении во время разработки. Этот метод развертывания можно выбрать, открыв настройки Запуск вашего проекта, развернув Конфигурации развертывания и выбрав Развернуть локальные библиотеки Qt. Убедитесь, что также отмечена галочка Использовать локальные библиотеки Qt.
Особые соображения для плагинов и импортов
Если приложение использует плагины или импорты, которые зависят от других модулей, эти модули должны быть перечислены в зависимостях приложения. Это связано с тем, что Qt Creator не знает заранее, какие импорты или плагины будет загружать ваше приложение.
Например, если код QML вашего приложения импортирует Qt Multimedia, тогда модуль Qt Multimedia должен явно стать зависимостью приложения. Вы можете сделать это, добавив его в файл .pro приложения:
QT += multimedia
Также можно вручную включить зависимости от библиотек Qt, открыв настройки Запуск вашего проекта, развернув Конфигурации пакета и выбрав вкладку Библиотеки. Вручную проверьте библиотеки, которые являются зависимостями вашего проекта.
Особые соображения для текста
Из-за ошибки в некоторых драйверах OpenGL, механизм, используемый Qt для кэширования глифов текста, не работает должным образом на всех устройствах Android, что приводит к искажению текста. Для решения этой проблемы реализовано обходное решение, которое увеличивает потребление памяти и может также повлиять на производительность рендеринга текста. До Qt 5.3.2 обходное решение было включено только для определённого набора устройств. Сейчас оно используется по умолчанию на всех устройствах.
Вы можете отключить обходное решение, установив переменную среды QT_ANDROID_DISABLE_GLYPH_CACHE_WORKAROUND в значение 1. Вы должны сделать это только после того, как убедитесь, что текст отображается правильно на всех целевых устройствах.
Особые соображения для OpenGL
Существуют некоторые особые соображения, когда используется OpenGL. Плагин платформы поддерживает только полноэкранные окна OpenGL верхнего уровня. Это означает, что даже диалоги и всплывающие окна будут отображаться в полноэкранном режиме. Также могут возникнуть ошибки рисования, если вы попытаетесь разместить окна, которые имеют анимации или требуют обновления своего интерфейса, в то время как они скрыты другим окном.
Рекомендуется избегать нескольких окон верхнего уровня в приложениях для Android, так как на этой платформе нет традиционной системы окон.
Примечание: Встраивание QGLWidget внутри иерархии виджетов не поддерживается. При использовании QGLWidget он должен быть виджетом верхнего уровня.
Примечание: Избегайте использования устаревшего QGLWidget. Для встраивания содержимого OpenGL или Qt Quick в интерфейс пользователя на основе виджетов предпочтительнее использовать QOpenGLWidget и QQuickWidget.
Современные устройства часто поддерживают OpenGL ES 3.0 или 3.1 в дополнение к 2.0. Для получения подходящего контекста OpenGL установите требуемую версию через QSurfaceFormat::setVersion(). Однако имейте в виду, что заголовочные файлы доступны только в последних уровнях API, например, чтобы включить gl31.h, вам нужно нацеливаться на уровень API 21. Также помните, что использование функций OpenGL ES 3.x приведёт к тому, что приложение сломается на более старых устройствах, которые поддерживают только 2.0.
Особые соображения для мультимедиа
Qt Multimedia, как и остальная часть Qt, поддерживает версии Android 2.3.3 (уровень API 10) или более поздние. Однако есть исключение для видеовывода, который требует Android версии 3.0 (уровень API 11) или более поздних. Это затрагивает функции предварительного просмотра камеры и проигрывателя видео.
Кроме того, модуль Qt Multimedia Widgets не поддерживается на Android, что означает, что отображение видео доступно только с помощью VideoOutput и QML типа Video.
Файловая система активов
Qt для Android предоставляет специальную виртуальную файловую систему, основанную на механизме assets в Android. Файлы, помещённые в assets в папке android, созданной Qt Creator, будут упакованы как часть вашего пакета приложения. К ним можно получить доступ в Qt, добавив префикс assets:/ к путям. Например, чтобы получить доступ к изображению logo.png в папке assets/images, можно использовать QPixmap("assets:/images/logo.png").
Если использование механизма активов не требуется для вашего приложения, рекомендуемым способом распространения ресурсов с вашим приложением Qt является использование Системы ресурсов Qt, которая является кроссплатформенным механизмом распространения ресурсов с вашим приложением.
Поддерживаемые архитектуры
Qt для Android в настоящее время имеет двоичные файлы для ARMv7 и x86. Убедитесь, что вы выбрали правильную архитектуру для устройства или эмулятора, на который вы нацеливаетесь, иначе ваше приложение вылетит. Архитектура MIPS в настоящее время не поддерживается Qt.
Если вы хотите поддерживать несколько архитектур в своём приложении, рекомендуется создавать отдельные APK для каждой архитектуры, чтобы каждый APK содержал только двоичные файлы, необходимые для целевой архитектуры. Для получения дополнительной информации об этом см. документацию Android по поддержке нескольких APK.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/platform-notes-android.html