Заметки по платформе Android
Эта страница содержит информацию, специфичную для создания и запуска приложений Qt на Android. Qt поддерживает версии Android 6.0 (уровень API 23) и более поздние.
Разработка для Android в Qt Creator
Самый простой способ разработки приложений Qt для Android — использовать Qt Creator. При использовании набора инструментов Android с проектом 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 предоставляет специальную виртуальную файловую систему, основанную на механизме Assets Android. Файлы, помещенные в каталог (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.1/android-platform-notes.html