Qt Android (QML) – Przygotowanie środowiska

Przygotowanie Qt pod pisanie aplikacji na Androida przy użyciu QML.

Hej, witam Was w pierwszej części z serii poradników dotyczących pisania aplikacji na Androida przy użyciu Qt i języka skryptowego QML (a także pewnie mieszanego z C++).

Qt i Android? QML? – wstęp do wstępu


Jeżeli szukasz tylko informacji odnośnie przygotowania środowiska to zapraszam do kolejnego paragrafu, w przeciwnym razie zachęcam do poświęcenia chwili na przeczytanie tego wstępu 😉

Zapewne słyszeliście, że do pisania aplikacje na Androida przy użyciu NDK trzeba mieć dobry powód – będę z Wami szczery: ktokolwiek to powiedział, miał rację – prawda jest taka, że takie pisanie aplikacji (przy użyciu NDK) ma swoje wady, ale czasami zalety takiego rozwiązania je przeważają (np potrzebujemy aplikacji na szybko i multi-platformowej) i warto jest wtedy sięgnąć narzędzie po które znamy i względnie lubimy.

Disclaimer Jeżeli nigdy wcześniej nie miałeś styczności z Qt i chcesz z niego korzystać tylko do pisania aplikacji na Androida, a wybierasz Qt „bo lubisz C++”, to jednak zachęcam Cię do skorzystania z Javy, w przypadku pisania pełnoprawnych aplikacji na Androida, Java jest do tego znacznie lepszym językiem.

 

C++ i Android? NDK!

Pewnie większość z Was słusznie kojarzy Androidowe aplikacje z Javą. Z kolei Qt jest narzędziem używającym C++, jak to się dzieje że mimo inności tych języków możliwe jest pisanie aplikacji przy użyciu C++ na Androida?

Służy do tego wspomniane już kilka razy NDK (Native Development Kit) jest to zestaw narzędzi, które (bardzo uogólniając) służą do translacji kodu pisanego w C/C++ na „Jave”. Jednak należy uważać na to co się stara zbudować pod Androida ponieważ nie wszystkie funkcjonalności z C/C++ są przenoszalne lub też ich przenoszalność jest uzależniona od dodatkowych działań[1] np. w postaci zbudowania własnego, customowego toolchain’a.

Zaciekawionych szerzej tematem zapraszam na stronę [NDK].

 

QML

[QML] jest z z kolei frameworkiem, który składniowo przypomina JSON oraz JS. Oprócz tego udostępnia API dzięki któremu możemy dostać się do QML z C++ i vice versa. Dzięki jego zastosowaniu możemy w łatwiejszy sposób tworzyć ładnie wyglądające aplikacje (tzn wyglądające „androidowo”, a nie „desktopowo”).

Będziemy ten framework na bieżąco poznawać, zainteresowanych tematem już teraz zapraszam [tutaj].

 

Przygotowanie środowiska


Pobranie wymaganych narzędzi

Do korzystania z dobrodziejstw Qt dla Androida musimy pobrać parę rzeczy:

  1. [JDK]
  2. [Android SDK]
  3. [Android NDK]
  4. [Apache Ant] lub [Gradle]

W każdym przypadku pobieramy najbardziej aktualną wersję odpowiednią dla naszego systemu. Polecam pobrać wersje command-line o ile to możliwe, bo inne nie są nam potrzebne (np. nie potrzebujemy Android Studio, wystarczy nam samo SDK).

UWAGA Qt ma problemy jeżeli w ścieżkach do plików pojawiają się spacje!

Wszystkie rzeczy warto zainstalować (wypakować) w jednym miejscu, np ja mam przeznaczony do tego folder Android, który zawiera następujące foldery:

  • android-sdk/
  • android-ndk/
  • apache-ant/
  • (JDK mam w domyślnej lokalizacji instalacji)

Następnym krokiem jest pobranie wszystkich potrzebnych pakietów przez SDK, a więc wchodzimy do folderu instalacji instalacji SDK i uruchamiamy program SDK Manager. Domyślnie powinien wybrać wszystkie właściwe paczki po czym klikamy „Install” (akceptujemy licencje – oczywiście po ich przeczytaniu ;] ) i czekamy aż wszystkie paczki zostaną pobrane i zainstalowane.

Ostatnim krokiem pobierania paczek jest pobranie zestawu narzędzi dla Androida do Qt (o ile tego nie zrobiliśmy wcześniej, np przy instalacji Qt), w tym celu uruchamiamy Qt Maintenance Tool (znajduje się w folderze głównym instalacji Qt), wybieramy „Add or remove components”, po czym z drzewka wersji Qt którą posiadamy (dla mnie: Qt 5.7) zaznaczamy:

  • Android ARMv7
  • Android x86 (o ile mamy telefon na procesorze x86)

Po czym klikamy „Next” i czekamy aż instalator pobierze odpowiednie kompilatory.

 

Konfiguracja Qt

Tutaj sprawa jest trywialnie prosta:

  1. Uruchamiamy Qt
  2. Wchodzimy w Tools -> Options… -> Android
  3. Uzupełniamy ścieżki odpowiednio dla JDK, Android NDK/SDK oraz Ant/Gradle
  4. Zatwierdzamy zmiany przyciskiem Apply

 

Urządzenie do debuggingu

Generalnie do testowania aplikacji możemy korzystać z 2 opcji:

  • możemy korzystać z fizycznego urządzenia,
  • możemy korzystać z maszyny wirtualnej (wirtualizować urządzenie).

Obie opcje mają swoje wady i zalety, fizyczne urządzenie oczywiście działa szybciej (po skonfigurowaniu telefonu wgrywanie i uruchamianie aplikacji odbywa się automatycznie i odbywa się przez Qt).

Urządzenia wirtualne lubią działać bardzo powoli i generalnie lubią nie działać poprawnie, jednak ich zaletą jest to że możemy emulować dowolny model urządzenia, podczas gdy w przypadku urządzenia fizycznego musimy je faktycznie posiadać.

Ja będę korzystał z fizycznego urządzenia (Sony Xperia E).

 

Przygotowanie fizycznego urządzenia

Na początku musimy oczywiście posiadać urządzenie z Androidem, ja korzystam z telefonu z którego nie korzystam, ale może nam posłużyć także to z którego korzystamy.

Pierwszym krokiem jest uruchomienie trybu deweloperskiego w telefonie robimy to wchodząc w: „Ustawienia” -> „Informacje o telefonie” i klikamy 5 razy w „Numer kompilacji”.

Następnie cofamy się do poprzedniego menu i wchodzimy w „Opcje deweloperskie” i zaznaczamy „Debugowanie USB”, zalecam też zaznaczyć „Zostaw włączony”, aby nam nie gasł co chwila.

Jeżeli korzystamy z Windowsa to należy zainstalować OEM USB Driver – [instrukcja].

 

Uruchomienie przykładowej aplikacji


Teraz jesteśmy gotowi do uruchomienia przykładowej aplikacji, w tym celu uruchom Qt, stwórz nowy projekt: (Android Templates) Applications -> Qt Quick Application, zostaw domyślne ustawienia, a w menu „Kit Selection” upewnij się że masz zaznaczone pozycje Android <arch_name> (x86, ARMv7)

qt-android-project

Polecam rzucić okiem na widoki Edit oraz Design, w którym będziemy odpowiednio edytować kod oraz edytować wygląd aplikacji. W widoku Edit zwróc uwagę na główny kod QML aplikacji (‚Resources/”/”/main.qml’), samemu drzewku przyjrzymy się dokładniej w kolejnej części poradnika.

Kliknij przycisk Run (upewnij się wcześniej, że wybrana jest architektura odpowiadająca architekturze twojemu telefonu, w większości przypadków to ARM chyba że masz procesor Intela). Po tym powinno pojawić się okno z dostępnymi urządzeniami (emulowanymi i urządzeniem fizycznym), warto zaznaczyć „Always use this device (…)” po czym kliknąć OK, teraz zacznie się proces budowania, jeżeli wszystko pójdzie dobrze to po chwili na telefonie ujrzymy domyślną aplikację Qt Quick.

Code ON!