Заметки по платформе Android
Эта страница содержит информацию, специфичную для создания и запуска приложений Qt на Android. Qt поддерживает версии Android 5.0 (уровень API 21) и выше.
Разработка под 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.
Особенности мультимедиа
Модуль Qt Multimedia Widgets не поддерживается на Android, что означает, что отображение видео доступно только с использованием QML Type Video.
Файловая система 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-5.15/android-platform-notes.html