Spec-Zone.ru › Qt 5.9

Заметки по платформе и компилятору - Android

Эта страница содержит информацию, специфичную для построения приложений Qt и их запуска на платформе Android. Qt поддерживает версии Android 4.1 (уровень API 16) и более поздние.

Разработка приложений для 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 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/qt-5.9/platform-notes-android.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API