Spec-Zone.ru › Qt

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

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

Разработка для Android в Qt Creator

Самый простой способ разработки приложений Qt для Android — использование Qt Creator. При использовании Android Kit с проектом Qt Creator, он компилирует ваш код, а также некоторые специфичные для Android файлы, необходимые для включения Qt на Android и создания пакета вашего приложения. Qt Creator добавляет эти файлы в подкаталог вашего проекта под названием android. Дополнительную информацию можно найти в Шаблонах пакетов Android.

Пакет приложения

На Android приложения распространяются на устройства в формате APK. Для распространения приложений в Google Play используется другой формат — AAB. Дополнительную информацию см. в Публикация в Google Play.

Используйте Qt Creator для создания пакетов APK и AAB или создавайте их вручную. Дополнительную информацию см. в Развертывание приложения на Android.

Особенности плагинов и импорта

Если приложение использует плагины, зависящие от других модулей, эти модули должны быть перечислены в зависимостях приложения. Дополнительную информацию см. в Обнаружении зависимостей.

Особенности текста

Из-за ошибки в некоторых драйверах OpenGL механизм, используемый Qt для кэширования глифов текста, не работает должным образом на всех устройствах Android, что приводит к искажению текста. Для решения этой проблемы существует обходной путь, но он может увеличить потребление памяти и повлиять на производительность отображения текста. Сейчас обходной путь используется по умолчанию на всех устройствах.

Вы можете отключить обходной путь, установив переменную среды QT_ANDROID_DISABLE_GLYPH_CACHE_WORKAROUND в 1 или true. Однако, это следует делать только после проверки корректного отображения текста на всех целевых устройствах.

Особенности OpenGL

Современные устройства часто поддерживают OpenGL ES 3.0 или 3.1 в дополнение к 2.0. Чтобы получить соответствующий контекст OpenGL, установите запрашиваемую версию с помощью QSurfaceFormat::setVersion().

Примечание: Заголовочные файлы, такие как gl31.h, доступны только в последних уровнях API, поэтому вам необходимо указать уровень API 21. Также помните, что использование функций OpenGL ES 3.x приведет к сбою приложения на более старых устройствах, которые поддерживают только 2.0.

Система файловой системы Assets

Qt для Android предоставляет специальную виртуальную файловую систему, основанную на механизме Android Assets. Файлы, помещённые в каталог (ANDROID_PACKAGE_SOURCE_DIR/assets/), упаковываются как часть пакета приложения. К ним можно получить доступ в Qt, добавив префикс к путям assets:/. Дополнительную информацию см. в Переносе приложений Qt на Android.

Поддерживаемые архитектуры Android

В настоящее время Qt для Android имеет двоичные файлы для armv7a, arm64-v8a, x86 и x86-64.

Если вы хотите поддерживать несколько разных ABI в своем приложении в Google Play, рекомендуется создать пакет приложения (AAB), содержащий двоичные файлы для каждой из ABI. На основе вашего AAB, Google Play генерирует оптимизированные пакеты приложений (APK) для каждого устройства, запрашивающего загрузку.

Дополнительную информацию см. в Создание приложения Android.

Известные проблемы

Из-за ошибки на некоторых устройствах при отключении предсказательного ввода текста с помощью ImhNoPredictiveText, это свойство игнорируется, и предсказательный ввод текста по-прежнему включён. Для решения этой проблемы установите переменную среды QT_ANDROID_ENABLE_WORKAROUND_TO_DISABLE_PREDICTIVE_TEXT в 1. Однако, одним из побочных эффектов является то, что эта переменная среды может вызвать проблему с другими клавиатурами, такими как Gboard. Если вы используете язык, например, японский, с Gboard, отображается только клавиатура QWERTY. Эта переменная среды запрашивается каждый раз при отображении клавиатуры, поэтому можно переключать обходной путь по мере необходимости.

Ограничения

Некоторые модули Qt могут иметь функции, которые не поддерживаются на Android, или имеют ограничения. Дополнительную информацию см. в QTBUG-72086.

Часто задаваемые вопросы

  • Нужно ли использовать QtActivity или Android Activity для создания пользовательской Activity?

    QtActivity расширяет Activity и реализует логику, необходимую для загрузки библиотек Qt или обработки событий и нативных вызовов между Android и Qt. В общем случае, расширение QtActivity необходимо, если вы используете какие-либо нативные вызовы. В противном случае, расширение Activity должно работать.

  • Нужно ли использовать QtService или Android Service?

    Здесь применяется то же рассуждение, что и для QtActivity. За исключением случаев, когда используются функции, требующие загрузки библиотек Qt, например, нативные вызовы.

  • Можно ли использовать Android Fragments с Qt? Каков эквивалент Fragment в Qt?

    Android Fragments не могут использоваться с Qt. Однако Qt предлагает собственные модульные компоненты и представления с QML. Вы можете объединить несколько компонентов в одном представлении QML. Дополнительную информацию см. в Qt QML.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/android-platform-notes.html

Spec-Zone.ru

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