piątek, 25 lutego 2011

Pierwsza mobilna aplikacja dla MeeGo

0 komentarze
Witam. Podobnie jak w przypadku poprzednich dwóch postów, dzisiaj również ostrzegam :-), że nie będzie nic odkrywczego względem oficjalnego Wiki dla programistów MeeGo. Pomimo tego, że sporo korzystam z materiałów tam zawartych, to moje wpisy nie są ich tłumaczeniami, ale raczej opisem własnych doświadczeń z testowania dostępnych tam poradników.

Tym razem będzie o tym jak napisać, skompilować i uruchomić swoją pierwszą aplikacje mobilną dla MeeGo. Wpis ten jest mocno inspirowany następującą stroną na Wiki MeeGo:
http://wiki.meego.com/SDK/Docs/1.1/Creating_Hello_World.

Zakładam na początek, że mamy już zainstalowane środowisko wdrożeniowe i uruchomieniowe oraz, że została przeprowadzona wymagana konfiguracja Qt Creatora.

W pierwszym momencie - zapewne jak się nie trudno domyśleć, należy uruchomić Qt Creatora. W następnym kroku przystępujemy do stworzenia nowego projektu wybierając odpowiednio w menu PlikNowy plik lub projektMobilna aplikacja Qt. Potwierdzamy klikając Wybierz… .

Określamy następnie nazwę projektu i wybieramy jego docelową lokalizację.

W kolejnym kroku wybieramy jako wersję Qt tą dostępną po instalacji MeeGo SDK.

Możemy również zmienić domyślne nazwy plików, ale skoro ma to być tylko aplikacja testowa polecam pozostawienie tych zaproponowanych przez kreatora.

Ostatecznie dostajemy ogólne podsumowanie nowo utworzonego projektu:

Prawdopodobnie Qt Creator otworzy się w trybie projektowania interfejsu, dlatego przełączamy się do trybu Edycji kodu źródłowego. Posługując się nawigatorem projektu otwieramy plik main.cpp i zamieniamy jego zawartość na następującą:
#include <qapplication>
#include <qlabel>
#include <qsysteminfo>
using namespace QtMobility;

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  QSystemInfo s;
  QLabel *label = new QLabel(QObject::tr("hello").
    append(s.currentCountryCode()));
  label->show();
  label->resize(100,30);
  return app.exec();
}

Teraz należy wyedytować plik z ustawieniami projektu *.pro dodając do niego następujące wpisy:
CONFIG += mobility
MOBILITY += systeminfo

Aby zapisać wszystkie wprowadzone zmiany najlepiej skorzystać z menu PlikZachowaj wszystko.

Przed uruchomieniem przygotowanej aplikacji należy najpierw przejść do zakładki Projekty i tam na zakładce Produkty docelowe wybrać MeeGo i Uruchom.

Tutaj należy określić jedynie Device configuration, gdzie powinniśmy wskazać na skonfigurowane wcześniej środowisko uruchomieniowe (jak to zrobić pisałem we wpisie "MeeGo SDK - Konfiguracja Qt Creator", w sekcji "Dostęp do środowiska uruchomieniowego MeeGo"). U mnie to jest akurat: MeeGo NetBook Emulator. Oczywiście należy pamiętać o tym, aby wystartować wybrane środowisko uruchomieniowe MeeGo. Możemy to zrobić wpisując w konsoli polecenie tego typu:
sudo mad remote -r meego-netbook-ia32-qemu-1.1.2-runtime poweron

Po tym wszystkim możemy uruchomić projekt klikając na zielony "trójkącik" symbolizujący start aplikacji. Prawdopodobnie w konsoli Qt Creatora zobaczymy komunikat podobny do tego:
Cleaning up remote leftovers first ...
Initial cleanup done.
Files to deploy: /home/rafal/qthello-build-meego/rrpmbuild/qthello-0.0.1-1.i586.rpm.
Deployment finished.
Starting remote application.
access control disabled, clients can connect from any host
Could not find Hal
Could not find Hal
Teoretycznie teraz powinniśmy zobaczyć w testowym środowisku MeeGo wystartowaną aplikację. Ja niestety na pierwszy rzut oka nie dostrzegłem żadnych zmian. Po kilku kliknięciach w interfejs zauważyłem, że aplikacja jest jednak uruchomiona, ale znajduje się "w tle". Aby zobaczyć ją na pełnym ekranie wystarczy kliknąć na pierwszą zakładkę - tą z domkiem, symbolizującą strefę MyZones (widać to na rysunku poniżej).

Teraz już powinniśmy zobaczyć naszą pierwszą mobilną aplikację dla MeeGo :-D :

Czy miałem podczas wykonywania tych kroków jakieś błędy? Tak, był jeden, ale był on związany z tym, że próbowałem uruchomić aplikację w Qt Creatorze nie mając wcześniej wystartowanego środowiska testowego. Dostałem wówczas taki komunikat:
Cleaning up remote leftovers first ...
Error running initial cleanup: Nie można połączyć się z hostem.
Jeśli będą pojawiać się inne komunikaty i inne błędy, polecam najpierw upewnić się, że Qt Creator poprawnie łączy się z środowiskiem uruchomieniowym MeeGo. Można to sprawdzić przechodząc odpowiednio do NarzędziaOpcjeProjektyMeeGo Device Configuration i tam wybierając z listy wcześniej przygotowaną konfigurację możemy skorzystać z opcji Test. Jeśli tutaj wszystko pójdzie OK, nie powinno być problemów z wystartowaniem aplikacji.

Mamy już pierwszą aplikację. Co dalej? Czekam na sugestie czytelników o czym chcieli by poczytać :-).

poniedziałek, 21 lutego 2011

MeeGo SDK - Konfiguracja Qt Creator

0 komentarze
Instalując MeeGo SDK (pisałem o tym więcej w poprzednim wpisie) dostajemy pełne środowisko programistyczne, które zawiera nie tylko wymagane biblioteki i środowisko uruchomieniowe, ale również wygodne narzędzie do programowania: Qt Creator. Jest to w pełni funkcjonalne środowisko programistyczne dla Qt, które zawiera wiele wygodnych mechanizmów ułatwiających wykonywanie często żmudnych czynności: pełna obsługa kilku systemów śledzenia wersji, wspomaganie procesu kompilacji, narzędzia do testowania i debugowania, zintegrowaną dokumentację, kolorowanie składni i wiele innych. Narzędzie to zostało również przystosowane przez firmę Nokia do programowania pod platformę MeeGo. Wystarczy wskazać i skonfigurować dostęp do środowiska wdrożeniowego (MeeGo Target) oraz środowiska uruchomieniowego (MeeGo Runtime), aby łatwo zacząć programować aplikacje mobilne i tym się właśnie zajmę w dzisiejszym wpisie. Od razu na początku wspomnę, że wszystkie opisane w tym poradniku kroki są bardzo dobrze opisane na Wiki projektu, na którym się wzorowałem. W razie problemów polecam zajrzeć na strony:
Konfiguracja narzędzi kompilujących i bibliotek MeeGo

Aby skonfigurować w Qt Creator dostęp o narzędzi kompilujących i bibliotek MeeGo (tzw. MeeGo Toolchain) wykonujemy następujące czynności:
  1. Uruchamiamy Qt Creator. Może to być ten dostarczony z MeeGo, lub ten z którego do tej pory korzystaliśmy w systemie (najlepiej oczywiście jakby była to najnowsza dostępna wersja, aby mieć pewność, że będzie wspierała MeeGo). Ja wybrałem to drugie podejście, aby nie rozdrabniać sobie środowiska programistycznego. Zresztą na stronie Wiki również tak proponują.
  2. Wchodzimy do NarzędziaOpcjeQt4Wersje Qt.
  3. Po prawej stronie zakładki Wersje Qt klikamy przycisk z plusikiem, aby dodać nową wersję.
  4. W polu Nazwa wersji wpisujemy własną nazwę określającą wersję Qt. Może to być np. MeeGo NetBook IA32 1.1.2.
  5. Podajemy również ścieżkę do qmake zainstalowanego w katalogach MeeGo. W moim systemie 64-bitowym było to akurat /usr/lib/madde/linux-x86_64/targets/meego-netbook-ia32-1.1.2/bin/qmake. Z dokumentacji wynika, że dla architektur 32-bitowych powinno to być podobnie do /usr/lib/madde/linux-i686/targets/meego-netbook-ia32-1.1.2/bin/qmake, jednak nie mam co do tego pewności i polecam sprawdzić samodzielnie.
  6. Klikamy Przebuduj, Zastosuj i Ok.
  7. Aby zobaczyć więcej informacji o własnie skonfigurowanej wersji Qt wystarczy jeszcze raz wejść do tego samego okienka i kliknąć oraz przytrzymać wskaźnik myszy na etykiecie Ustawienia ręczneMeeGo NetBook IA32 1.1.2. Powininny się wyświetlić informacje podobne jak na rysunku poniżej.
Dostęp do środowiska uruchomieniowego MeeGo

Aby skonfigurować dostęp do wybranego środowiska uruchomieniowego MeeGo (tzw. MeeGo Runtime) z poziomu Qt Creatora wystarczy wykonać następujące czynności:
  1. Otwieramy NarzędziaOpcjeProjektyMeeGo Device Configuration
  2. i klikamy tutaj przycisk Add
  3. Warto ustalić od razu nazwę dla tej konfiguracji. Może to być np. MeeGo NetBook Emulator.
  4. Uzupełniamy pozostałe pola (przykład na rysunku poniżej):
    • Device type: MeeGo emulator
    • Authentication type: Password
    • Host name: localhost (wartość domyślna)
    • SSH port: 6666 (wartość domyślna)
    • Gdb serwer port: 13219 (wartość domyślna)
    • Connection timeout: 30s (wartość domyślna)
    • Username: root
    • Password: meego
  5. Klikamy Zastosuj
Aby przetestować właśnie skonfigurowane ustawienia należy najpierw uruchomić wybrane środowisko - można to zrobić wpisując w konsoli:
sudo mad remote -r meego-netbook-ia32-qemu-1.1.2-runtime poweron
a następnie klikając przycisk Test w okienku MeeGo Device Configuration. Jeśli wszystko jest OK powinniśmy zobaczyć okienko takie jak na zrzucie poniżej:
Co z tego wynika i po co to wszystko opiszę w kolejnym wpisie z przykładem pierwszej aplikacji dla MeeGo :-)

piątek, 18 lutego 2011

MeeGo - pierwsze starcie

0 komentarze
Głośno w ostatnim czasie zrobiło się o MeeGo i to nie za sprawą wysypu urządzeń z tą platformą mobilną, a wręcz przeciwnie - ostatnia decyzja kluczowego partnera projektu, Nokii o wyborze Windows Phone 7 jako głównego systemu dla kolejnych generacji smartfonów  postawiła duży znak zapytania co do przyszłości rozwoju MeeGo.  Na szczęści drugi duży partner w rozwoju MeeGo - Intel, zamierza ciągle intensywnie inwestować w tą platformę i zachęca do tego również inne firmy. A tych firm już teraz jest sporo. Do firm, które zadeklarował sie wspierać i używać MeeGo w swoich produktach mozna wyróżnić nie tylko takich gigantów branży elektronicznej jak AMD, Asus, Acer, Cisco, ale również wiele innych firm na czele z BMW.

Ja od dawna kibicuję MeeGo, aby jak najszybciej weszło i zdobyło rynek urządzeń mobilnych i multimedialnych. Głównym powodem jest to, że bardzo wygodnie pracuje mi się z biblioteką Qt, a myśl, że program, który napiszę w Linuksie będzie działał nie tylko na MS Window i Mac iOS, jak to miało miejsce dotychczas, ale również na wszystkich urządzeniach obsługujących MeeGo wydaje się naprawdę ekscytująca. Ostatnie decyzje Nokii również mnie nie wprawiły w najlepsze samopoczucie, ale już zdążyłem ochłonąć :) i wiem, że najlepszą rzeczą, którą mogę w takim momencie zrobić to promować tą platformę i zachęcać do niej innych. W związku z tym chciałbym rozpocząć serię artykułów pokazujących jak rozpocząć przygodę z tym systemem. Od razu również dodam, że do tej pory nie miałem żadnego doświadczenia z MeeGo i  moje wpisy raczej będą opisywać pierwsze kroki, które sam postawiłem, a nie zaawansowane zagadnienia z punktu widzenia eksperta w tej dziedzinie.

Na początek przygotowałem mały poradnik jak zainstalować podstawowe środowisko uruchomieniowe i jak skonfigurować zestaw narzędzi, które będą niezbędne do implementacji własnych programów. Poradnik ten został przygotowany w oparciu o oficjalną dokumentację znajdująca się na Wiki projektu: http://wiki.meego.com/SDK/Docs/1.1/
Getting_started_with_the_MeeGo_SDK_for_Linux. Jest ona naprawdę dobrze przygotowana i mój opis będzie raczej jej skrótem, a nie rozwinięciem. Wszystkie instrukcje zostaną pokazane na przykladzie systemu Ubuntu w wersji 10.10.

Ustawienie repozytorium

Wielkim ułatwieniem dla osób interesujących się testowaniem i rozwojem MeeGo w Ubuntu jest przygotowane dla tej dystrybucji repozytorium, które zawiera wszystkie niezbędne narzędzia do dalszej pracy. Konfigurujemy je w sposób opisany poniżej.

Tworzymy nowy plik
sudo nano /etc/apt/sources.list.d/meego-sdk.list
do którego zapisujemy:
deb http://repo.meego.com/MeeGo/sdk/host/repos/ubuntu/10.10/   /

Pobieramy klucze do repozytorium:
gpg --keyserver pool.sks-keyservers.net --recv 0BC7BEC479FC1F8A
gpg --export --armor 0BC7BEC479FC1F8A | sudo apt-key add -

Aktualizujemy listę pakietów:
sudo apt-get update

Sprawdzamy poprawność repozytorium:
apt-cache policy madde

Instalacja MeeGo SDK

Aby zainstalować pakiet narzędzi MeeGoo (tzw. SDK) wystarczy wskazać do instalacji meta-pakiet meego-sdk. Dzięki temu wszystkie wymagane pakiety zostaną zainstalowane.
sudo apt-get install meego-sdk

Instalacja środowiska wdrożeniowego (Target)

Należy również zainstalować wybrane środowisko wdrożeniowe MeeGo (tzw. MeeGoo Target). W jego skład wchodzi zestaw aplikacji do kompilacji, linkowania i debugowania (tzw. MeeGoo Toolchain) oraz biblioteki systemowe.

Aby sprawdzić jakie środowiska wdrożeniowe mamy do dyspozycji wydajemy polecenie:
sudo mad-admin list

Ja wybrałem do instalacji dwa z nich:
sudo mad-admin create -f meego-netbook-ia32-1.1.2
sudo mad-admin create -f meego-handset-ia32-1.1.2

Aby przetestować działanie wybranego środowiska, warto utworzyć dla niego przykładową aplikację. Można to szybko zrobić stosując narzędzia dostępne w MeeGo SDK:
mad -t meego-netbook-ia32-1.1.2 pscreate -t qt-simple qthello

Przechodzimy do katalogu z projektem i uruchamiamy kompilację:
cd qthello
mad -t meego-netbook-ia32-1.1.2 qmake
mad -t meego-netbook-ia32-1.1.2 make

Sprawdzamy czy plik wykonywalny istnieje:
file build/qthello

Aplikację również możemy uruchomić wydając polecenie: build/qthello. Powinno nam się pojawić okienko programu z widocznym przyciskiem „Hello world”. Okienko należy wyłączyć zamykając program w konsoli ponieważ nie zawiera ono paska tytułowego z przyciskami sterującymi (zamknij, minimalizuj, itp.).

Instalacja i testowanie środowiska uruchomieniowego (Runtime)

Środowisko wdrożeniowe to za mało, aby wygodnie pisać i testować programy napisane dla MeeGo. Potrzebne nam jest również środowisko uruchomieniowe (ang. MeeGo Runtime), na którym będziemy mogli przetestować na żywo jak się sprawuje nasza aplikacja. Najlepiej jakbyśmy dysponowali jakimś urządzeniem, na którym jest zainstalowany MeeGo. Jeśli jednak takim nie dysponujemy możemy skorzystać z testowego środowiska przygotowanego przez twórców MeeGo w postaci maszyn wirtualnych QEMU. Oczywiście do ich działania wymagana jest sprzętowa akceleracja wirtualizacji wbudowana w procesor. W sumie nie jest to wymóg samego MeeGo, a jedynie QEMU.

Instalacja środowiska uruchomieniowego jest dobrze opisana na Wiki MeeGo, gdzie również polecam zajrzeć: http://wiki.meego.com/SDK/Docs/1.1/Configuring_QEMU_runtimes.

Aby sprawdzić jakie środowiska mamy do dyspozycji wydajemy polecenie:
mad-admin list runtimes

Ja zainstalowałem na początek dwa z nich (uwaga: każde zajmuje ok. 650MB!):
sudo mad-admin create -f -e meego-netbook-ia32-qemu-1.1.2-runtime
sudo mad-admin create -f -e meego-handset-ia32-qemu-1.1.2-runtime

Po instalacji możemy już przetestować na własnym komputerze czy to naprawdę działa:
sudo mad remote -r meego-netbook-ia32-qemu-1.1.2-runtime poweron
sudo mad remote -r meego-handset-ia32-qemu-1.1.2-runtime poweron

Po zakończonych testach wyłączamy wirtualną maszynę poleceniem:
sudo mad remote -r meego-netbook-ia32-qemu-1.1.2-runtime poweroff
sudo mad remote -r meego-handset-ia32-qemu-1.1.2-runtime poweroff

Napotkane problemy

  • Niestety przy podczas pierwszej próby włączenia dowolnego środowiska dostawałem komunikat:
    Starting QEMU runtime meego-handset-ia32-w32-qemu-1.1.20101031.2201-sda-runtime
    This may take some time ...
    i nic się więcej nie działa. Nic nie startuje. Nic nie zjada zasobów procesora. Wyszło na to, że mój procesor (AMD Phenom™ II X4 925) ma jakieś problemy ze wspomaganiem wirtualizacji sprzętowej. Jest też odpowiedni wpis na Wiki Meego, który dotyczy tego problemu i tam polecam najpierw zajrzeć: http://wiki.meego.com/SDK/Docs/1.1/MeeGo_SDK_Graphics_Acceleration. U mnie problem rozwiązał się po instalacji następujących pakietów:
    sudo apt-get install qemu-kvm kvm
    wydaniu polecenia:
    sudo modprobe kvm_amd
    i restarcie komputera. Później już wszystko ruszyło z miejsca :)
  • Na innym komputerze, co do którego miałem pewność, że procesor, który się w nim znajduje (Intel i3 530) powinien sobie poradzić był taki sam problem ze uruchomieniem środowiska Runtime. Rozwiązanie było podobne jak poprzednio. Tutaj wystarczyło jedynie wpisać:
    sudo modprobe kvm_intel
  • Niestety na komputerze z AMD nie udało mi się uruchomić, żadnego środowiska uruchomieniowego dla telefonów. Domyślam się, że może to być związane z tym, że mam na nim kartę i sterowniki NVidi. Na komputerze z Intelem wszystko było OK.
Podsumowanie i zrzuty ekranu

Na koniec jeszcze dwa przykładowe zrzuty ekranu jak to wygląda na żywo.
Środowisko dla netbooków

Środowisko dla telefonów

Więcej zrzutów można obejrzeć na poniższym pokazie slajdów:

Pomimo tego, że środowisko dla netbooków, wygląda tak jak wielu czytelników zapewne widziało na różnych screenach w Internecie to nie można powiedzieć już tego samego o wersji na telefony. Jest ona bardzo okrojona, zawiera jedynie kilka dodatkowych aplikacji i w ogóle nie prezentuje się najlepiej. Ale przecież, nie jest to środowisko do codziennego używania, a jedynie do testów i rozwoju własnych aplikacji.

Na razie to tyle :) Kolejnym razem opiszę jak do tego wszystkiego podłączyć Qt Creatora.