czwartek, 11 czerwca 2009

Symbian C++ z linii polecen

Ta notatka jest dość stara - czytelników odsyłam do tego artykułu Programowanie Symbiana pod Windows 7

Od pewnego czasu rośnie mi ilość ludzi którzy wpadają do mojego bloga, żeby poczytać o programowaniu na Symbiana. Fakt że niewielu w Polsce ludzi zna się na programowaniu na Symbiana. Myślę, że coraz więcej ludzi będzie chciało poznać to jak programuje się na ich komórkę. Symbian w zależności od wersji która jest zainstalowana w komórce to ma różne możliwości. W tej sytuacji największe możliwości mają programiści C++, którzy dzisiaj mogą programować w Symbian C++, OpenC, OpenC++ i od niedawna w Qt for S60.
Większość ludzi myśli, że jak zainstalują oprogramowanie IDE np: Carbide.C++ to od razu będą mogli już pisać kod i testować aplikacje, zakładając, że wszystkie działania zostaną podjęte przez środowisko programistyczne. Tutaj mogą się spodziewać problemów z pracą w Carbide.C++ ponieważ nie znają tego jak działa cały proces tworzenia aplikacji do Symbiana.

Warto jest poświęcić sporo czasu na zrozumienie tego.
Najpierw istotna jest kolejność instalacji. Instalujemy wszystko na jednym dysku w miarę możliwości. Ja wybrałem dysk E. W tej sytuacji przyda się bardzo duży dysk twardy. W praktyce zainstalowanie wszystkich SDK czy IDE używanych do programowania na komórkę zajmie w sumie kilkadziesiąt GB danych i trzeba poświecić na to sporo czasu. Oczywiście że zakładam że instalujemy to na Windows XP. Windows Vista wymaga dodatkowej pracy przy konfiguracji.

Najpierw trzeba zarejestrować się na Forum Nokii
Pobieramy wersje instalacyjne i instalujemy po kolei:

Carbide.C++ 2.0
zainstalowało mi się to na E:\Program Files\Nokia\Carbide.c++ v2.0
ActivePerl 5.6.1.638 - zainstalowałem to na E:\Perl
Paczki z S60 SDK
SDK S60 3.2 (razem z kompilatorem gcce dla ARM), SDK S60 5.0, SDK S60 for N97
Z tych paczek zainstalowały mi się w E:\Symbian, skrypty kompilacyjne na C:\Program Files\Common Files\Symbian, a kompilator na E:\Program Files\CSL Arm Toolchain
Potem polecam ściągnięcie Qt 4.5 for Windows (zawiera QtCreator), który zainstalował mi się w E:\qt\2009.02\ , oraz pobrałem Qt for S60 "Garden"

Ponieważ teraz już wszystko zainstalowane to trzeba sprawdzić czy działają polecenia z linii poleceń.

Robimy plik r.bat a w nim piszemy cmd i zapisujemy go w
E:\Symbian\9.3\S60_3rd_FP2\S60Ex\HelloWorld
uruchamiamy go: wpisujemy perl -v
powinno być informacja że mamy wersję

This is perl, v5.6.1 built for MSWin32-x86-multi-thread
Binary build 638 provided by ActiveState Corp.

Jeżeli nie pojawi się informacja to trzeba dodać do zmiennych środowiskowych PATH ścieżkę E:\Perl\bin\

Następnie wpisujemy polecenie: devices
Pojawi się się lista SDKów jakie mamy zainstalowane, istotna jest wiedza który z nich jest domyślny, bo to zależy który emulator i które SDK bierze udział w procesie tworzenia aplikacji. Brak rozeznania może spowodować tym że emulator nie zechce działać dobrze.

Gdyby okazało się że to polecenie nie działa (co jest mało prawdopodobne w sytuacji gdy dobrze zainstalowaliśmy SDKi) to oznacza że trzeba ponownie zainstalować albo dodać ścieżkę do zmiennej środowiskowej PATH C:\Program Files\Common Files\Symbian\Tools

Kompilatory GCCE dla ARM pod Symbianem są zainstalowane w E:\Program Files\CSL Arm Toolchain\bin tak więc trzeba sprawdzić czy ta ścieżka jest w zmiennej środowiskowej PATH.

Pozostało sprawdzenie czy zainstalowaliśmy Qt 4.5.1 to wpiszemy qmake -h wtedy pojawi się pomoc do polecenia qmake. Jeżeli to polecenie nie dało wyników to trzeba poszukać pliku E:\qt\2009.02\bin\qtenv.bat i uruchomić go. W sytuacji gdy uruchomienie tego pliku nie dało efektu dla qmake -h to należałoby ręcznie wprowadzić zmienne środowiskowe

QTDIR=E:\Qt\2009.02\qt
Zmienne które należy dopisać na początku
PATH=E:\Qt\2009.02\bin;E:\Qt\2009.02\mingw\bin;
i zmienną
QMAKESPEC=win32-g++

Następna rzecz to wypakowanie paczki z Qt 4.5 for S60 "Garden" w E:\Qt\4.5.0-garden
Dodajemy do zmiennej środowiskowej PATH kolejną ścieżkę na początku E:\Qt\4.5.0-garden\bin

Aby się upewnić że emulatory z SDK są poprawnie zainstalowane trzeba przed konfiguracją Qt for S60 sprawdzić. W tym celu warto sprawdzić to tam gdzie jest zainstalowane Carbide.C++ i uruchomić ten plik: E:\Program Files\Nokia\Carbide.c++ v2.0\configuration\run_env_update.bat

W folderze E:\qt\4.5.0-garden robimy plik c.bat z tekstem cmd oraz plik b.bat z tekstem configure -platform win32-mwc -xplatform symbian-abld
i zapisujemy a następnie uruchamiamy c.bat i wpisujemy b.bat i następuje konfiguracja środowiska Qt pod kątem kompilacji tego na Symbiana

Następnym krokiem jest wypakowanie plików Qt for S60 do odpowiedniego SDK Do 3.x S60 SDK zawartość z E:\qt\4.5.0-garden\qts60binaries\3.x\qtlibs-4.5.0-garden.exe wypakowujemy do E:\Symbian\9.2\S60_3rd_FP1_2\ Natomiast zawartość E:\qt\4.5.0-garden\qts60binaries\5.0\qtlibs-4.5.0-garden.exe wypakujemy w E:\S60\devices\S60_5th_Edition_SDK_v1.0\

Właściwie teraz już zainstalowaliśmy to co jest potrzebne w pracy. Zanim przejdziemy do konfiguracji Carbide.C++ trzeba sprawdzić jak będzie wyglądała kompilacja z linii poleceń.

Prawie każdy projekt Symbiana C++ składa się z odpowiedniej struktury podkatalogów:
group - tam są pliki odpowiedzialne za strukturę projektu bld.inf i *.mmp
inc - są tan pliki nagłówkowe dla projektu w C++
src - są tam kody źródłowe w C++
data - są tam pliki zasobów odpowiedzialne głównie podczas tworzenie wersji wielojęzycznych i jak też opisują budowę UI
gfx - przechowuje pliki graficzne
sis - zawiera pik *.pkg z którego można stworzyć pliki sisx (z podpisem)
Opcjonalnie mogą być podfoldery:
doc - zawiera dokumentację projektu
help - zawiera informacje potrzebne do wygenerowania pliku pomocy który będzie instalowany razem z aplikacją

W tej sytuacji warto zobaczyć to na przykładzie E:\Symbian\9.3\S60_3rd_FP2\S60Ex\HelloWorldBasic

Wchodzimy w E:\Symbian\9.3\S60_3rd_FP2\S60Ex\HelloWorldBasic\group
a tam trzeba zrobić plik wsadowy c.bat z poleceniem cmd i zapisać go
robimy następny plik b.bat z poleceniem bldmake bldfiles
a w końcu plik k.bat z poleceniem abld build gcce urel. Uruchamiamy plik c.bat potem wpisujemy b.bat i uruchamiamy. Pojawi się plik ABLD.BAT, następnie wpisujemy k.bat. Zaczyna się właściwa kompilacja. W efekcie skompilowane pliką są w E:\Symbian\9.3\S60_3rd_FP2\Epoc32\release\gcce\urel\HelloWorldBasic.exe
pliki zasobów są w
E:\Symbian\9.3\S60_3rd_FP2\Epoc32\data\z\resource\apps\HelloWorldBasic.rsc
natomiast plik z informacją o grafice jest w E:\Symbian\9.2\S60_3rd_FP1\Epoc32\Data\z\resource\apps\helloworldbasic_aif.mif

Man nadzieję, że kompilacja poszła gładko pomimo, że wyświetlało w oknie dużo komunikatów o ostrzeżeniach.

Kolejna rzecz to zrobienie sobie paczki instalacyjnej. W folderze sis przeważnie jest plik *.pkg, który zawiera informacje o tym co ma być w tej paczce.

W folderze sis jest helloworldbasic_gcce.pkg trzeba zrobić plik c.bat z poleceniem cmd a następnie drugi plik b.bat z poleceniem makesis helloworldbasic_gcce.pkg. uruchamiamy plik c.bat a następnie wpisujemy b.bat wykonujemy go. Zrobił się plik helloworldbasic_gcce.SIS.

Z tym plikiem trzeba jeszcze podpisać. Następnie trzeba sobie postarać się o certyfikat developerski albo samemu sobie go wygenerować

Jak się ma pliki certyfikatu self-sign lub certyfikatu developerskiego *.cer i *.key w tym folderze to można sobie zrobić plik p.bat z następującym poleceniem

signsis -s helloworldbasic_gcce.SIS helloworldbasic_gcce_pod.SISX 305978-306701.cer 305978-306701.key 12345

Po uruchomieniu pliku p.bat powinno pojawić się plik helloworldbasic_gcce_pod.SISX i ten plik można by sobie spokojnie zainstalować w komórce.

Na koniec "wyczyścimy" to co zrobiliśmy. W folderze E:\Symbian\9.3\S60_3rd_FP2\S60Ex\HelloWorldBasic\group zrobimy plik u.bat z poleceniem abld reallyclean gcce urel . a następnie wykonamy go.

Ten powyższy przykład dotyczył tego jak sprawdzić czy wszystkie podstawowe narzędzia do kompilacji działają. Z punktu widzenia programisty istotne jest sprawdzenie czy kod który napisał zadziała w emulatorze. W folderze E:\Symbian\9.3\S60_3rd_FP2\S60Ex\HelloWorldBasic\group zrobimy plik w.bat z poleceniem abld build winscw udeb
, a następnie wykonamy go. Skompilowaliśmy przykład dla kompilatora. Kolejną rzeczą jest uruchomienie emulatora. W tym folderze robimy plik e.bat z poleceniem epoc i wykonujemy go.
Zostanie uruchomiony emulator. W tym emulatorze wciskamy klawisz menu, a potem przewijamy do Instalations i wtedy to wybieramy ikonkę HelloWorldBasic

Jak już jestęsmy z tego zadowoleni to po zamknięciu emulatora możemy wyczyścić to poleceniem abld reallyclean winscw udeb i w ten sposób mamy porządek w emulatorze.


Warto też sprawdzić jak kompiluje się z linii poleceń projekty Qt for S60:
Wejdziemy w E:\qt\4.5.0-garden\examples\script\context2d i zrobimy w nim plik c.bat z poleceniem cmd i uruchamiamy go. Wpisujemy qmake. To polecenie wygeneruje nam wszystkie potrzebne pliki do kompilacji. Następnie wpisujemy make release-gcce i skompilujemy swój kod. Następnie trzeba zrobić paczkę do zainstalowania w komórce. Wpisujemy createpackage -i context2d_gcce_urel.pkg

Po zainstalowaniu odpowiedniej wersji biblioteki Qt for S60 na komórkę E:\qt\4.5.0-garden\qts60binaries można zainstalować skompilowaną paczkę context2d_gcce_urel.sisx
Na koniec warto sobie wyrobić nawyk sprzątania po kompilacjach i wpisujemy make distclean i wykonujemy to.

To wszystko powinno wystarczyć żeby upewnić się czy cały proces tworzenia aplikacji jest dobrze skonfigurowany i wtedy można przejść do konfiguracji Carbide.C++

5 komentarzy:

sebap123 pisze...

Naprawdę wspaniały, bardzo pomocny i zarazem interesujący poradnik (tak jak reszta blogu - zachęcam do przeczytania). Wszytsko wytłumaczone krok po kroku, a do tego w bardzo przystępnym języku. Naprawdę polecam.

Sebastian

EroM@N pisze...

hm... świetny tutek, jednak podczas makesis test.pkg dostaje błąd Error : file I/O fault

Michał Małaj pisze...

EroM@N: taki błąd może oznaczać że w pliku test.pkg nie ma tych plików do stworzenia paczki sis, druga ewentualność to taka, że coś ze składnią w pliku *.pkg mogą być problemy

EroM@N pisze...

Faktycznie były błędy (ścieżka) w pliku *.pkg. Jednak teraz robię po prostu prawym (w carbide) i Build PKG.

Po wygenerowaniu certyfikatu, udało mi się wreszcie stworzyć *.SIS który instaluje się w moim telefonie (nokia e61). Nie mniej jednak podczas instalacji wykakuje informacje, że plik niezgodny z telefonem. Dodatkowo nigdzie nie widzę ikonki do uruchomienia mojego HelloWorld na telefonie :/ Tak więc aplikacja spakowana do *.sis, wreszcie poprawnie zainstalowana na telefonie, jednak nie mogę jej uruchomić bo nigdzie jej nie ma (sic!).

Poradził byś coś na ten "defekt" ?

Michał Małaj pisze...

EroM@N: Sprawdź czy faktycznie zainstalowałeś to w komórce.
Menu->Narzędzia->Menedżer aplikacji