w5-android-wprowadzenie - Studia

Download Report

Transcript w5-android-wprowadzenie - Studia

WPAM
W5 – Android – bardzo krótkie
wprowadzenie
Piotr Gawrysiak
[email protected]
Politechnika Warszawska
Instytut Informatyki
Zakład Systemów Informacyjnych
2010
Najbliższe wykłady

24 listopada – Microsoft Windows Phone 7
(Bartłomiej Zass – Microsoft Polska)

1 grudnia – teoretycznie poniedziałek…







8 grudnia – Nokia Qt (Meego/Symbian)
(Riku Salminen – Forum Nokia)
15 grudnia – Advanced Android
(Mihai Preda – ex Google)
22 grudnia – SAMSUNG BADA (niepotwierdzony)
(Janusz Lisiecki – SAMSUNG R&D Polska)
Dlaczego Android?




A dokładniej – po co firmie Google Android?
Dwa powody:
1. Biznesowy
2. Oraz moralno-filozoficzny
Google's mission is to organize the
world's information and make it
universally accessible and useful.
Dlaczego Android?

Oczywiście jest także trzeci powód

Ponieważ Silicon Valley to naprawdę małe miejsce…
A poważniej…




Model biznesowy Google słabo się sprawdza w
przypadku zamkniętych systemów
… stąd zaangażowanie w lobbying net neutrality
… stąd także dążenie do zapewnienia otwartości
platform mobilnych
… główne źródło przychodów firmy – targeted
advertising
Open Handset Alliance

Android nie jest wyłącznie produktem Google
(przynajmniej w teorii…)
…ale…
Czym Android nie jest
Nie jest skończony
Nie jest to „Guglofon”
Nie jest to „Linux Phone”
I nie ma nic wspólnego z
Android - geneza
Podobnie jak większość interesujących produktów
Google (poza Google Search) Android został stworzony
przez firmę zewnętrzną
2005 – Andy Rubin (twórca Danger Inc., doświadczenie
z Magic Cap i WebTV) wraz z kolegami zakłada Android
Inc.
2005 – Google kupuje Android Inc., Rubin zostaje
szefem działu rozwiązań mobilnych w Google
2007 – powstaje Open Handset Alliance, „preview” SDK
2008 – pierwsza publiczna wersja systemu Android,
opublikowana na licencji Open Source (Apache Licence
2.0)
Android - infrastruktura
• http://www.android.com – strona oficjalna
• http://code.google.com/android - projekty Google dla Androida
• Platforma open source dla urządzeń mobilnych (niekoniecznie telefony
komórkowe) wykorzystująca system operacyjny Linux – jądro w wersji 2.6
(Froyo – 2.6.32)
• „A software stack… including middleware and applications”
• Wsparcie dla typowego sprzętu spotykanego w urządzeniach mobilnych
•
touchscreen (multitouch)
radio GSM, Bluetooth, Wifi
•
akcelerometr, kompas, GPS
•
kamera wideo, aparat fotograficzny
• Platforma otwarta, przy założeniu iż aplikacje tworzone są w języku Java
• Założenia projektowe
•
•
•
•
Jak najłatwiejsze tworzenie aplikacji
Współdzielenie danych i zasobów w środowisku wielozadaniowym
Bezpieczeństwo
Możliwie jak największa rozszerzalność
Komponenty
Android - infrastruktura
Linux Kernel
• Pierwsze wersje oparte na 2.6.24, najnowsza (Gingerbread)
najprawdpodobniej na 2.6.33
• Zapewnia dostęp do sprzętu („sterowniki”) oraz podstawowe usługi
systemu operacyjnego (zarządzanie procesami, pamięcią).
• Pierwsza warstwa abstrakcji sprzętu dla pozostałych elementów
infrastruktury systemu.
• Niektóre „standardowe” elementy, których można by się spodziewać w
systemie Linux zostały usunięte (w szczególności biblioteka Glibc,
większość aplikacji userland)
• Niektóre elementy zostały dodane, w szczególności – zarządzanie energią
(aplikacje mają częściowy wpływ na zachowanie urządzenia – WakeLocks)
oraz komunikacja pomiędzy procesami (Binder)
Libraries / Runtime
• Każda aplikacja „androidowa” jest wykonywana przez osobną
instancję (osobny proces) maszyny wirtualnej Dalvik, (co zapewnia
m.in. „sandboxing”)
• Dalvik – maszyna wirtualna (de facto przerobiona maszyna Apache
Harmony) przystosowana do pracy w środowisku o ograniczonych
zasobach sprzętowych (powolny procesor, ograniczona ilość
pamięci operacyjnej, brak pliku wymiany)
• Dalvik nie potrafi wykonywać bezpośrednio skompilowanych klas
Java, potrzebna jest konwersja kodu osobnym narzędziem (dx) a
następnie zapakowanie do archiwum APK
• Core Libraries = Java Core Libraries
Libraries / Runtime
•
System zawiera zbiór wspomagających bibliotek (kod natywny, napisane w C / C++,
wiele to biblioteki pochodzące z innych projektów open source) np.
–
–
–
–
•
Baza danych (SQLite)
Przeglądarka WWW (WebKit)
Renderer czcionek (Freetype)
Biblioteki grafiki 3D (OpenGL)
oraz stworzonych przez Google np.
– Surface Manager (compositor obsługujący wyświetlanie aplikacji)
– Media Framework (odtwarzanie audio i wideo)
– HAL libraries (vibration, camera, GPS, …)
Libraries / Runtime
• Surface manager
Framebuffer (/dev/fb0)
Surfaces (double buffering)
• Audio manager
Audio flinger
Diagramy by Esmertec
Application Framework
• Aplikacje wykorzystują przede wszystkim usługi dostępne w Application
Framework np.
• Notification Manager – wyświetlanie „informacji statusowych” dla
użytkownika
• Resource Manager – składnica komponentów aplikacji (tekst, grafika itp.)
• View System – zbiór gotowych widgetów (elementy GUI)
• …
• Ale są też kontrolowane przez jego elementy – Activity Manager
Android bootup
Kolejność uruchamiania komponentów
• Linux kernel
• Init
• Procesy systemowe (usb, adb, radio
itp.)
• Pierwsza maszyna wirtualna Dalvik
(Zygote)
• System Server (w oddzielnej
maszynie Dalvik)
• Komponenty takie jak Activity
Manager uruchamiane są przez
System Server
• Surface Manager i Audio Manager –
od tego momentu coś może być
wyświetlone i działa dźwięk
Diagramy by Esmertec
Komponenty „aplikacji”
• Nie istnieją tu „monolityczne” aplikacje znane z klasycznych
systemów operacyjnych. Aplikacje (tj. oprogramowanie z
którym ma do czynienia użytkownik) składane jest z
komponentów:
• Activity – w uproszczeniu pojedynczy ekran aplikacji, to z
czym w danym momencie ma do czynienia użytkownik
… ale może być to także „okienko” nałożone na inne Activity
… Activities grupowane są w stosy (task) – kolejność w stosie ma
znaczenie (system zapamiętuje kolejność wyświetlanych activities)
• Każda „activity” może być zastąpiona inną, która realizuje
taką samą funkcjonalność
Komponenty „aplikacji”
• Inne komponenty nie posiadają interfejsu użytkownika:
• Service – komponent działający w tle który nie wyświetla
interfejsu użytkownika (typowy przykład – odtwarzacz
muzyki, radio internetowe)
• Content Provider – udostępnia innym aplikacjom dane
pochodzące z naszej aplikacji
• Intent Receiver – interfejs przyjmujący żądania wykonania
pewnej czynności
• Aplikacja (tj. to użytkownik postrzega jako zbiór
powiązanych ze sobą elementów interfejsu użytkownika)
nie musi być wykonywana w jednym procesie, nie musi
nawet zawierać się w jednym pakiecie APK
Cykl życia activity
Usuwane są w pierwszej
kolejności aplikacje mniej
istotne dla użytkownika,
np. service działający w tle
jest ważniejszy niż activity
znajdująca się na dole stosu
(ponieważ użytkownik
szybko do niej zapewne nie
powróci)
onPause(), onStop(),
onDestroy() – po ich
zakończeniu activity może
(nie musi) zostać usunięta z
pamięci
onPause() powinna być jak
najkrótsza – blokuje kolejną
activity
Intents
• Intent Receivers reagują na rozgłaszane wiadomości „intents”.
• Rozgłoszenie wiadomości może służyć celom informacyjnym, ale
może być też „prośbą” o wykonanie pewnej akcji.
• Można traktować je jako komendy np. „PLAY”, „EDIT”, „PICK” itd.
• Aplikacje mogą tworzyć własne rodzaje „intents”, każda aplikacja
definiuje (element konfiguracji) jakie „intents” jest w stanie
„obsłużyć”
• System dobiera te, które najlepiej wypełniają zadanie
• To pozwala na dowolne wymienianie elementów infrastruktury
Tworzenie aplikacji / SDK
• Przede wszystkim mamy do dyspozycji darmowe SDK
• Emulator (oparty na Qemu – bardzo powolny)
• Zestaw narzędzi (android debugging bridge, usb driver itd.)
• Plugin do Eclipse zawierający m.in. zestaw narzędzi automatujących tworzenie
kodu źródłowego
• Tworzenie kodu w języku Java, jeśli niezbędna jest większa szybkość (lub
niezbędny jest porting już istniejącej aplikacji) możemy skorzystać z pakietu
NDK (Native Development Kit) pozwalającego na tworzenie bibliotek w C /
C++
• A co jeśli nie chcemy korzystać z Javy / C / C++ ?
Możliwe jest wykorzystanie jednego z istniejących interpreterów, w
tym w szczególności z SL4A (Scripting Layer for Android, dawniej
Android Scripting Environment) http://code.google.com/p/android-scripting/
Obecnie wspierane Python, Perl, JRuby, Lua, BeanShell, JavaScript,
Tcl i BourneShell.
Możliwość tworzenia skryptów bezpośrednio na urządzeniu
Tworzenie aplikacji / SDK
• A co jeśli nie lubimy pisać kodu źródłowego?
• Visual Basic for Android co prawda jeszcze nie istnieje, ale Google
eksperymentuje z projektem App Inventor
(http://appinventor.googlelabs.com)
• System programowania „wizualnego” oparty na koncepcjach
opracowanych w MIT Lifelong Kindergarten (Scratch)
Urządzenia
• Dlaczego dopiero w tym miejscu wspominamy o sprzęcie?
• Bardzo duża różnorodność urządzeń, jednak pewne cechy pozostają
wspólne:
•
•
•
•
Ekran dotykowy multitouch capacitive
Rozdzielczość 320x480 lub 480x800 (ew. 845)
Procesor ARM, przynajmniej 256 MB RAM, przynajmniej 512 MB Flash
WiFi, Bluetooth, GPS, GSM
• Podział według funkcji:
•
•
•
•
Telefony (Samsung Galaxy S, Nexus One, HTC Legend itp.)
Tablety / MID (Samsung Tab, CherryPad, Eken M005)
Czytniki książek (Barnes & Noble Nook, Nook Color)
Urządzenia „wbudowane”
• Podział na „oficjalne” i nieoficjalne
• Oficjalne posiadają wbudowane aplikacje „premium” Google (np. Gmail,
Google Maps) oraz dostęp do Google Android Market
• Nieoficjalne posiadają jedynie aplikacje open source i dodane przez
producenta oraz ew. dostęp do własnego „sklepu”
Bardzo duże możliwości modyfikacji systemu powodują wielkie
różnice w wyglądzie interfejsu użytkownika
Custom UI
HTC Sense
Stock Froyo
Motorola
Nook Color
Fragmentation
Wersje nieoficjalne
• Ponieważ kod źródłowy platformy (oraz
większość sterowników) jest otwarty, toteż
w dość prosty (i legalny) sposób można
tworzyć alternatywne wersje systemu
• Oczywiście niezbędny jest tu dostęp na
poziomie „root” (odpowiednik „jailbreak) w
iPhone
• Typowy przykład – Cyanogen Mod,
rozszerza możliwości standardowego
systemu o m.in.
•
•
•
•
•
•
•
•
Busybox
Compressed cache
Boot menu
Ulepszony lock screen (m.in. kontrola
odtwarzacza audio z poziomu lock screen)
Nieco lepsza wydajność
„Theming” interfejsu użytkownika
Radio FM
…
Cdn.