Настройка 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

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

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

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

Спасибо за труды! На днях пытался настроить Qt creator чтобы собрать приложуху под старый планшет Android 4.0.1 И... на ноутбуке тупо не хватило емкости накопителя под все эти тулзы)). Но интересно, конечно. На работе по вашей статье попробую)

А не подскажете, что нужно сделать, чтобы таким образом написанное приложение запустить на самом андроид телефоне?

apk-шку сделать и отнести на телефон, как один из вариантов.

Спасибо за статью, не хватает только ссылки на github ...

На какое именно место на github?

А, все, осознал. Вот: https://github.com/LibRaw/DOFCalc