Programowanie smartfonów

iPhone mocno zamieszał na rynku smartfonów – nowatorski interfejs i intuicyjna obsługa były wyjątkowe od początku. Lecz prawdziwym strzałem w dziesiątkę okazał się App Store – internetowy sklep Apple’a, za pośrednictwem którego niezależni producenci rozpowszechniają oprogramowanie do tego urządzenia. Dzięki miniaplikacjom użytkownik może wyposażyć iPhone’a w zupełnie nowe funkcje. Popyt jest ogromny: portal zaksięgował ponad miliard pobrań w okresie krótszym niż rok.
iPhone-SDK (Apple)
iPhone-SDK (Apple)

Nic dziwnego, że konkurencja próbuje podążać tym tropem: przede wszystkim Google oferujący system operacyjny do smartfonów – Android, oraz Palm ze swoim webOS-em. Ale bez niezależnych twórców nie ma narzędzi. Dlatego producenci starają się ich zachęcić do korzystania ze swoich platform, minimalizując wymagania wstępne. Jak to się odbywa? Po prostu każdy system pojawia się wraz z odpowiednim pakietem developerskim.

CHIP wyjaśnia, jak takie pakiety działają, i pokazuje na podstawie prostej aplikacji, jak zbudowane są programy do komórek. Niektóre z narzędzi programistycznych zamieszczamy na naszej płycie.

SDK: Solidne rusztowanie

Aby developer mógł stworzyć aplikację do jakiegoś systemu, musi wiedzieć, jak ten system funkcjonuje, w jakim został napisany języku, oraz znać udostępnione przez niego interfejsy. To zadanie wykonuje tzw. Software Development Kit (SDK), oddający do dyspozycji programisty symulację otoczenia na urządzeniu docelowym, ze wszystkimi potrzebnymi komponentami. SDK zawiera odpowiednie narzędzia, biblioteki, dokumentację, jak również przykładowe aplikacje oraz często emulator.

Do programowania urządzeń przenośnych potrzebna jest także platforma, która z góry określa strukturę ramową docelowego otoczenia aplikacji. Składa się ona z predefiniowanych wzorców, które dostosowują tworzony kod do wymogów konkretnego systemu. Kod wprowadza się w kompatybilnym edytorze, który wraz ze środowiskiem określa się jako IDE (Integrated Development Environment). IDE wspiera SDK podczas tworzenia aplikacji na wielu poziomach: od zarządzania projektem poprzez autouzupełnianie kodu aż do podświetlania syntaktyki.

Pisząc aplikację, developer może jednocześnie szybko lokalizować błędy w kodzie za pomocą debuggera (od angielskiego “bug” – błąd w aplikacji), nadzorującego przebieg programu i podnoszącego alarm po natrafieniu na polecenia, których nie potrafi zinterpretować. Ten proces, znany jako Bugfix, skutecznie eliminuje błędy.

Jednak pisanie software’u może być bardzo skomplikowane, gdy nie są dostępne gotowe moduły: biblioteki. Zapewniają one programiście możliwość korzystania z predefiniowanych funkcji, wspólnych dla aplikacji w danym systemie. W Windows biblioteki przechowywane są w plikach z rozszerzeniem DLL (Dynamic Link Library) i lepiej znane jako DLL-e.  Aby kod był rozpoznany jako program, potrzebny jest dodatkowo kompilator, który analizuje tekst źródłowy, obrabia go i tłumaczy na język zrozumiały dla docelowego systemu operacyjnego. Utworzony software testuje się na emulatorze, aby uniknąć kłopotliwego przenoszenia kodu na smartfon po każdej kompilacji. Jednakże emulator przydaje się też do próbnych przebiegów na urządzeniu docelowym. Tak dzieje się na przykład, gdy symuluje on obsługę architektury ARM, często stosowanej w telefonach komórkowych.

iPhone: Język Objective-C

Pisząc software do iPhone’a albo iPoda touch, programista stosuje dwie metody, wynikające z polityki Apple’a. Na początku firma nie udostępniła bowiem żadnego SDK dla swego systemu – można było więc tworzyć jedynie widżety uruchamiane za pomocą przeglądarki Safari. Dopiero po hakerskim epizodzie, który pokazał, jak ominąć zabezpieczania, korporacja z logo jabłka zezwoliła na tworzenie aplikacji natywnych. SDK jest dostępny za darmo, ale może być uruchomić tylko na Macach z architekturą x86. W efekcie developerzy pracują w środowisku programistycznym Xcode. Napisano je w Objective-C, języku C rozszerzonym o techniki obiektowe. Jako interfejs systemowy (API) wykorzystuje się Cocoa touch.

Oprócz SDK wielu programistów posługuje się alternatywnymi narzędziami, takimi jak np. darmowe Framework iPhone User Interface (iUI). Co prawda, ta platforma pozwala na tworzenie jedynie aplikacji używających jako interfejsu przeglądarki, ale za to potrzebne do pisania kodu edytory są niezależne od systemu Mac OS X.

Ograniczenia licencyjne Apple’a są bardzo silne i z tego powodu często krytykowane. Dla przykładu programiści nie mogą ingerować w procesy tła. Nawet w przypadku dystrybucji napotkamy na przeszkody: aby samodzielnie napisane narzędzie uruchamiało się nie tylko w emulatorze, ale również w iPhonie czy iPodzie touch, musi zawierać cyfrowy certyfikat. Żeby go otrzymać, należy się zarejestrować w organizacji Developer Program (roczna opłata od 99 dolarów). Co więcej, w przypadku sprzedaży narzędzia przez App Store, Apple zabiera producentowi 30 proc. przychodu.

Aby to ominąć, stosuje się jailbreak – złamanie systemu pozwalające na przechytrzenie mechanizmów zabezpieczających Apple’a (Crackowanie telefonów iPhone 3G i 2G) – wskutek czego w iPhonie uruchamiają się również aplikacje niepodpisane. Warto jednak pamiętać, że zhakowany system to większe ryzyko związane z obniżeniem bezpieczeństwa.

webOS: Język HTML

Ciągle nie wiadomo, czy SDK przeznaczony do nowego webOS-u Palma będzie darmowy – do tej pory programiści musieli za niego płacić. Wiadomo natomiast, że będzie można w nim pisać kod przy użyciu popularnych języków sieciowych: HTML, CSS i JavaScript. Dobry edytor HTML powinien do tego celu wystarczyć. Jednak gdyby ktoś chciał przetestować stworzone narzędzie, musi się obyć bez emulatora. Co więcej, jedynie SDK zwane Mojo pozwala na dystrybucję podpisanych pakietów, a będzie je można sprzedawać tylko przez jeden kanał, mobilny sklep Palma – App Catalog. Nie wiadomo także, kiedy pojawią się w pełni ukończone, kompleksowe narzędzia developerskie –  na stronie developer.palm.com ciągle mówi się o wersjach beta, a te udostępnione są podzielone na grupy przystosowane do tworzenia określonych typów programów, konkretnej platformy oraz języka.

Punktem wyjściowym każdej aplikacji przeznaczonej do Palma jest plik index.html, w którym definiuje się np. przyciski i grafikę. Globalny arkusz stylów umożliwia kompleksowe dopasowanie tworzonego programu do całego systemu telefonu. W tle działa biblioteka SQLite, którą obsługujemy przez interfejs API w języku JavaScript. Bezpośredni dostęp do jądra systemu, Core OS, nie jest dozwolony. Zgodnie z zaleceniami Palma aplikacje komunikują się przez platformę Mojo z User Interface (UI) System Manager. Ten ostatni służy jako interfejs do serwisów webOS, które kontrolują dostęp do usług systemowych, takich jak sieć czy urządzenia audio.

Android: Język Java

Android to system rozwijany przez organizację Open Handset Alliance tworzoną przez Google i 33 inne podmioty. Jednak siłą napędową tego aliansu nieodmiennie od lat pozostaje Google. Jako że platformę oparto na licencji Apache 2.0, jest ona dostępna za darmo i może być przenoszona na dowolne urządzenie przenośne. W związku z tym wielu niezależnych developerów pracuje obecnie nad stworzeniem własnego “Google mobile”. Bazę Androida stanowi jądro Linuksa, zawierające podstawowe moduły, takie jak obsługa sieci, klawiatury, urządzeń audio, a nawet kamery. Jako interfejs do komunikacji pomiędzy sprzętem a poszczególnymi aplikacjami służy Dalvik Virtual Machine, bazująca na środowisku uruchomieniowym Javy (patrz grafika poniżej).

SDK składa się z platformy uruchomieniowej dla aplikacji, bibliotek, środowiska Android, jak również emulatora. Kod źródłowy jest pisany i kompilowany w Javie. Aby aplikacja uruchamiała się później w Androidzie, dostosowuje się ją za pomocą asemblera krzyżowego (cross-assembler) do konkretnego urządzenia. Każdy, kto ma podstawową wiedzę o Javie, może bez problemów pisać narzędzia do Androida – prosty przykład omawiamy w ramce.

Programowanie smartfonów jest proste we wszystkich SDK i na każdej platformie. Z drugiej strony trzeba mieć do tego podstawową wiedzę. Tę ostatnią zdobędziemy, gdy odważmy się wejść w świat mobilnych aplikacji – pomoże nam w tym ogromna społeczność programistów w Sieci, każdy z nich przecież musiał kiedyś napisać swój pierwszy widżet.

ProduktiPhone-SDK (Apple)webOS-SDK (Palm)Android-SDK (Google)
Licencja
darmowa, opłaty za dystrybucjęprzypuszczalnie darmowadarmowa
Język programowania
Objective-CHTML, CSS, JavaScriptJava
System docelowy
Mac OS z architekturą x86Windows, Linux, Mac OS XWindows, Linux, Mac OS X
Pobieranie i podręczniki
developer.apple.comdeveloper.palm.comdeveloper.android.com/sdk
SkładnikiXcode IDE, kreator interfejsów, interfejs programistyczny (API) Cocoa touch, debugger oraz kompilator (gdb/gcc), emulator

Narzędzia do podpisywania
pakietów, dokumentacja, debugger, platforma Mojo z bibliotekami JavaScript, emulator
Platforma do tworzenia aplikacji, środowisko uruchomieniowe
Android, dokumentacja,
biblioteki, emulator

Koszty dystrybucji
od 99 USD rocznie za podpisane pakiety prawdopodobnie brakbrak
Kanał dystrybucjiApp Store (iTunes)App CatalogAndroid Market
Konkurencja tuż tuż

Rywale Apple’a, Palma i Google’a przespali czas, w którym mogli uczynić ich platformy bardziej atrakcyjnymi dla programistów. To powinno się zmienić wraz
z nowymi wersjami ich systemów.

Windows Mobile

Dotychczas programowanie w tym systemie było bardzo skomplikowane. Jednak Microsoft zapowiada, że w wersji 6.5 pisanie widżetów będzie możliwe nawet w HTML, CSS i JavaScripcie. Będą one uruchamiane za pośrednictwem Internet Explorera.
info:msdn.microsoft.com

Symbian OS

Choć działa na tak wielu smartfonach, aplikacji niezależnych twórców do niego praktycznie brak. Powód? Dotychczas Symbian był systemem zamkniętym. Jednak producent komórek Nokia zaczął już oferować niektóre komponenty na licencji Open Source.
info:developer.symbian.com

J2ME

Java Platform, Micro Edition nie jest niezależnym systemem do telefonów komórkowych, lecz okrojonym pakietem Javy zoptymalizowanym pod kątem urządzeń mobilnych. Aby użytkownik mógł w pełni wykorzystać możliwości sprzętowe, w najbliższej przyszłości powstanie edycja standardowa, która będzie już samodzielnym systemem, a nie – jak obecnie – częścią większej całości.
info:pl.wikipedia.org/wiki/J2ME

Za pomocą emulatora Androida można szybko testować napisane do tego systemu aplikacje. Kod wprowadza się w zintegrowanym środowisku programistycznym (IDE) Eclipse.

Za pomocą emulatora Androida można szybko testować napisane do tego systemu aplikacje. Kod wprowadza się w zintegrowanym środowisku programistycznym (IDE) Eclipse.

Eclipse: Tak programiści tworzą narzędzia do Androida

SDK Androida to idealny plac zabaw dla początkujących programistów. W e-sklepach użytkownicy mogą już załadować setki użytecznych narzędzi do swoich komórek. Na podstawie prostego przykładu pokazujemy, jak taki software powstaje. Po testach na emulatorze można go wgrać na komórkę i uruchomić, jak normalny program.

Przygotowanie: Instalacja SDK

Zanim rozpoczniesz przygodę ze swoim pierwszym narzędziem, musisz się do tego trochę przygotować: najpierw zainstaluj darmowe SDK dla Javy – JDK6 (Java Development Kit) –  a następnie ustaw dostęp do folderu »bin«, który ono utworzy. W Viście ustawienia wprowadzisz, wybierając »Panel sterowania | Zaawansowane ustawienia systemu | Zmienne środowiskowe…«. Na liście »Zmienne systemowe« odszukaj zmienną »Path«, zaznacz ją i kliknij przycisk »Edytuj…«. Przemieść się na koniec pola »Wartość zmiennej«, dodaj tam średnik, a po nim ścieżkę do katalogu »bin« – najczęściej »C:Program FilesJavajdk1.6.0bin«. W taki sam sposób ustaw dostęp do katalogu »tools« środowiska Android-SDK – musisz go oczywiście najpierw rozpakować z naszej płyty.

Właściwie mógłbyś już zacząć, ale pisanie kodu bez porządnego edytora może okazać się drogą przez mękę. Najczęściej programiści używają do tego celu darmowego środowiska Eclipse. Narzędzie jest przejrzyście zbudowane, dzięki czemu możliwe jest zarówno szybkie odszukiwanie błędów jak i kompilacja tekstu źródłowego. Aby Eclipse rozumiał kod Androida, musisz dodać plug-in Google’a ADT (Android Developtment Tools). W tym celu otwórz program i wybierz z menu »Help | Install New Software… | Add…«, w polu »Location« wpisz adres »dl-ssl.google.com/android/eclipse/« i zainstaluj plug-in. W ten sposób Eclipse został skonfigurowany. Aby powiązać z Androida z emulatorem programu, musisz dodatkowo wybrać z menu »Windows | Preferences | Android « i w polu »SDK Location« wskazać ścieżkę do Android-SDK.

Test: Własny projekt

Po zakończeniu przygotowań możesz przystąpić do pisania kodu. Platforma Javy uruchomi się automatycznie, gdy wybierzesz w Eclipse »File | New | Other | Android«. W nowym oknie musisz jedynie podać nazwę projektu, aplikacji oraz pakietu. Eclipse automatycznie utworzy szablon aplikacji w folderze »Src« w zdefiniowanej podczas startu przestrzeni roboczej. Dokonując zmian w tym katalogu, możesz definiować nowe funkcje i projektować interfejsy. Kod w przykładzie poniżej to mały program testowy – składa się tylko z kilku linii i potrafi wyświetlić krótki komunikat na ekranie urządzenia mobilnego. Jeśli pomylisz się, wprowadzając kod do edytora, Eclipse zareaguje i natychmiast podpowie, co jest nie tak, podświetlając błędne linie.

Po skończeniu pisania zapisz kod, wybierając »File | Save«, a potem uruchom go za pomocą menu »Run | Run Configuration… | Android Application«. Wskaż plik projektu, w polu »Lunch Action« wybierz »Lunch« i na liście odszukaj nazwę zapisanego pakietu. Kliknij przycisk »Run«. Emulator Androida uruchomi się automatycznie. Jeśli się nie uda, wybierz z menu Eclipse »Window | Android AVD Manager«, utwórz nowy Android Virtual Device i ponownie uruchom projekt. Nazwę aplikacji zobaczysz w menu emulowanego telefonu, gdy ją klikniesz, wyświetli się tekst “Pozdrowienia z CHIP-a”.

Platforma aplikacji jest elementem centralnym. Software komunikuje się z systemem Androida, używając maszyny wirtualnej (Dalvik VM).

Platforma aplikacji jest elementem centralnym. Software komunikuje się z systemem Androida, używając maszyny wirtualnej (Dalvik VM).

Struktura aplikacji Androida

Podstawowy schemat każdego programu do Androida składa się z tych samych elementów. Aplikacja sięga do niezbędnych komponentów i wywołuje odpowiednie biblioteki w zależności od potrzeb projektu.