Настройка Qt Creator для разработки под андроид: быстрый старт под Windows

Записки для себя, но вдруг кому будет полезно: есть многочисленные интернетные гайды, но они все - неизвестного времени, а многое - поменялось....

Загорелось мне тут сделать программу одну для телефона, чисто для себя. Ну, понятно, Qt+QML, потому что Qt я знаю, QML видел издалека, ничего сложного не запланировано. Как и всегда, главный вопрос "как начать" (т.е. настроить все, чтобы оно работало, компилировало, загружало в телефон/эмулятор), я на него потратил минимум полдня и пришел в результате к такому рецепту на 15 минут (ну может на час - на моем домашнем интернете все качалось стремительно, но не у всех оно будет так):

I. Установка Android Studio

Этот этап, совершенно точно, необязателен, но тогда вам придется качать все эти SDK/NDK/JRE вручную,  а Android Studio умеет делать все это сама.

  • Качаем Android Studio, запускаем инсталлятор, инсталлируем в C:\Android\Studio (вместо Program Files, удобнее все держать в одной куче).
  • Запускаем, выбираем "Import an Android code sample", выбираем любой пример (наверное, из Getting Started), я брал Media Effects
  • Menu - Tools - SDK Manager:
    • Меняем путь к SDK c %HOME%/AppData/Local... на C:\Android\SDK (поверьте, так будет лучше!)
    • Оно спросит скачать ли базовые штуки (Android Platform 28), соглашаемся, ждем пока скачает.
    • Закрываем SDK Manager, Menu - Build - Build Project
      • Оно начнет его билдить и в процессе будет спрашивать "не хватает детали, докачать"
      • На все такие вопросы (в виде гиперлинка 'Download то-то') отвечаем "да" путем нажатия на гиперлинк
      • При быстром интернете, минут через 5-10 у вас будет первое собраное приложение.
  • Когда первое приложение собралось (все детали докачаны): Menu - Run - Run application
    • Откроется  список устройств (подключенных и эмуляторов), он будет пуст скорее всего (и студия захочет всякого поскачивать)
    • Create New Device - Выбираем из списка какой-нибудь телефон - Next
    • На следующей странице - System Image - выбираем какую-нибудь версию андроида из предложенных - Download, когда скачалось - выбираем его же, еще пара кнопок - эмулятор
      Архитектура эмулятора - x86, не ARM. ARM-овский эмулятор чудовищно медленно работает.
    • Закрываем создатель устройств, выбираем созданное из списка, запускаемся на нем.
    • В первый раз оно загружается долго, ждем, ждем, ждем, на эмуляторе запустилось наше приложение, треть дела сделана.
  • Теперь нужно скачать NDK, он нужен Qt Creator.
    Menu - Tools - SDK Manager, закладка SDK Tools, ставим галочку на NDK:

    Жмем Apply и оно его качает.
  • На этой ноте (при повторном исполнении, все, со всеми скачиваниями, занимает минут 20) закрываем Android Studio (ну можно еще подключить живой телефон, разрешить на нем Debug Mode и собранное в процессе скачивания всего приложение - запустить там).
  • Идем в %HOME%/AppData/Local и стираем папку Android (туда студия качала начальные SDK, но мы поменяли папку с SDK на C:\Android\SDK и в AppData остались ошметки, они более не нужны).

II. Установка Qt

Qt я всегда ставил/собирал из исходников, но тут - не тот случай, потому что Qt нам нужно много и собирать упаришься. Берем инсталлятор (я взял  оффлайновый из, в данном случае, http://download.qt.io/official_releases/qt/5.12/5.12.2/), но онлайновый тоже подошел бы, качаем эти 3.7 гигабайта, запускаем, пропускаем страницу с Qt login, выбираем целевой каталог (умолчание - OK) и переходим к экрану выбора компонентов. Нужно отметить вот такие галочки:

Поясняю выбор:

  • MSVC 2017: на случай, если мы захотим поотлаживаться в MSVC (ниже объясню почему захотим).
    Предполагается, конечно, что MSVC 2017 у вас установлен (если нет - по идее, Community Edition вполне ОК, хотя я и не пробовал)
  • MinGW в списке сборок Qt и в списке Developer/Designer tools: на случай, если мы захотим отлаживать C++ в Qt Creator (из Qt Creator можно компилировать и MSVC, но нельзя отлаживаться)
  • Android x86: для запуска бинарников в эмуляторе. Потому что эмуляторы Android/x86 быстрые, а Android/ARM - медленные
  • Android ARMv7: для запуска бинарников на телефоне.
  • Для C++/Windows - лично мне достаточно 64 бит чтобы поиграться (а установленное таким образом Qt - с боевым Qt от сборки FRV/итп - никак не пересекается).

(поясню на всякий случай: Java-бинарники андроида, которые делает Android Studio - они, конечно, аппаратно-независимы. А вот C++ (то есть Qt) - собирается отдельно под каждую платформу).

Жмем Next, ставимся, в конце оно запустит Qt Creator.

Можно выбрать какой-то проект из C:\Qt\Qt5.12.2\Examples, выбрать для него виндовую платформу (MSVC или MinGW, по вкусу, убедиться что под винду у вас собирается и запускается все (если нет, то я ХЗ, обычно оно работает :).

Важно:

  • Текущий Android NDK - это clang toolchain
  • Текущий Qt (5.12.2 на момент написания этого текста) - в NDK ждет clang toolchain
  • Более старые Qt (я пробовал 5.6) - ожидают в NDK  gcc toolchain и все ломается.
  • Понятно что если вы все умеете (в Qt Creator, qmake и так далее) - вы даже и это почините, но лучше просто брать все свежее (т.е. одного примерно возраста)

III. Настройка Qt Creator для андроида

Это место, на котором я при старте потерял больше всего времени. JDK всякие качал и ставил, NDK распаковывал вручную и прочая, пока не пришел к такому вот рецепту.

Qt Creator - Tools - Options - Devices:

  • JDK location: вам достаточно того, что с собой принесла Android Studio.
    Более того, попытки поставить сравнительно свежий JDK и скормить его Qt Creator - не работают (JDK8 работает, более новые - хрен).
  • SDK location - понятно
  • NDK location - Android Studio скачала его для вас
  • Можно ткнуть в SDK Manager и скачать (или удалить) какую-то версию, на удивление это место работает.
  • Можно ткнуть в AVD Manager и сделать еще какой-нибудь эмулятор, но у Android Studio это место работает понятнее.
  • Собственно, все, все должно работать. Проверяем
    • Открываем какой-нибудь проект из C:\Qt\Qt5.12.2\Examples\Qt-5.12.2\quick\
    • Нам предложат все 4 варианта рантайм/архитектура, которые мы установили с Qt, соглашаемся, Configure Project
    • Идем в закладку Projects, выбираем Android for x86, ждем пока иконки Debug/Build/Run обретут цвет.
    • Нажимаем Run
    • Выбираем эмулятор из тех, что сконфигурировали андроид-студией на шаге I
    • Ждем примерно 30-50 секунд, пока проект скомпилируется (сборка/деплой apk из под Qt Creator не сильно стремительные)
    • И, да, оно запустится в эмуляторе. Реально всякий раз удивляюсь.
  • Важно: чтобы Qt Creator воспринимал эмулятор нормально, нужно на этом эмуляторе что-то разок запустить из Android Studio. Без этого "API Level: -1" и оно считается несовместимым.

IV Вместо заключения

Разрабатывать C++ + QML мне понравилось.

Я уверен, что есть всякие ограничения и недостатки, как и у любой мультиплатформенной конструкции, но опыт с Qt говорит мне, что самые тяжелые проблемы таки как-то решены :) /впрочем, в QML мне сильно не хватает #ifdef /, просто я еще на них не натыкался, у меня и так все выходит /как-то/.

Есть огромный, просто гигантский (особенно на стадии обучения) плюс в том, что оно (Qt+QML) умеет работать Native на Windows:  edit - build - run для небольшого проекта занимает буквально секунду (1-3 если быть точным) на моем железе, тогда как  Android studio делает это секунд за 15 (попробовал) для Java-приложения, а изготовление Qt+QML  apk-файла занимает как бы не секунд 40 (и apk-шка большая, едет даже на эмулятор не мгновенно).

Поэтому minor edit - run - гораздо (собственно на 1-2 порядка) быстрее для native приложения, чем даже для Java+эмулятор, не говоря о Qt+QML+эмулятор (или native девайс). Понятно что мультитач в native-приложении толком не потестировать (пишу не пробовав, в принципе то у меня есть MS Surface с тач-экраном и надо будет проверить).

Кроме этого, еще замечания:

  • Редактировать QML гораздо удобнее в Qt Creator: он знает синтаксис и есть контекстная помощь по компонентам.
  • Редактировать C++ в Qt Creator мне люто не понравилось: все мигает и переливается всякими сообщениями/предупреждениями, а комплетер работает (как мне показалось) только для полностью синтаксически корректных описаний (т.е. если у меня описание класса развалено, то комплетер для членов класса работать не будет). Визуальная студия ну гораздо лучше (для меня)  как C++-редактор (ну и привычки у меня к ней больше, конечно).
  • Отладка C++ в Qt Creator  (для меня) гораздо хуже, чем в MSVC:
    • Гораздо дольше запуск, все загружаемые DLL как-то анализируются на лету и это занимает при запуске десятки секунд (запуск не под отладчиком - ок, все быстро)
    • Ну и сам отладчик (скажем, инспекция переменных) - по мне так сильно хуже.
    • Отладчик студии запускается быстро (хотя в MSVC 2013  - еще быстрее, чем в 2017) и меня полностью устраивает.
  • Отладка QML, соответственно, наоборот: я вообще не понял, есть ли она в MSVC (не разбирался), а в Qt Creator - в тех объемах что мне было надо - работает.

В результате я пишу QML-интерфейс и скелет C++-кода в Qt Creator, а когда гуй работает, закрываю креатор и иду писать мясо в визуальной студии. Так и живу.

P.S. Мой первый андроидный апп опубликую в github на днях :)

Comments

О как здорово - спасибо. Я как то года два назад ковырялся но так и не смог заставить все это нормально работать - попробую еще теперь с этими инструкциями.

Опыт - интересный, считаю я последние несколько дней с пользой провел.

Причем, вот рано утром просыпаюсь и бегу к компьютеру, наносить пользу

Add new comment