Wprowadzenie do systemu Android Michail Mokkas
Android System operacyjny, wykorzystywany głównie przez urządzenia mobilne. Obecnie najpopularniejszy system mobilny. Aktualnie dysponuje ponad trzema milionami aplikacji na Google Play (oficjalny sklep). Oparty na jądrze Linux-a. W większości OpenSource, natomiast posiada komponenty, które są oprogramowaniem zamkniętym (m.in. boot loader, radio, aplikacje) Większość aplikacji pisana w języku Java, Kotlin lub z wykorzystaniem NDK w C/C++. Istnieją narzędzia umożliwiające pisanie w innych językach (np. C# - Xamarin). Źródło obraka: https://storage.googleapis.com/gweb-uniblog-publish-prod/images/02_android_devices.width-1000.png
Historia Androida 2003 – Andy Rubin, Rich Miner, Nick Sears i Chris White zakładają firmę Android Inc.- OS na aparaty fotograficzne 2005 – Google zakupuje Android Inc., założyciele także przechodzą do pracy w Google 2007 – założenie Open Handset Alliance (34 firmy) 2008 – pierwsza wersja systemu Android oraz pierwszy smartfon w nią wyposażony (HTC Dream), w Polsce sprzedawany jako Era G1 Źródło obrazka: https://www.androidheadlines.com/wp-content/uploads/2013/05/tmobile-htc-g1-dream.png
OHA Zrzeszenie ponad 80 firm mające jako cel rozwój otwartych standardów dla urządzeń mobilnych
Popularność (05.2018) źródło: https://www.gartner.com/newsroom/id/3876865
Wersje (10.2018) http://developer.android.com/about/dashboards/index.html
Architektura platformy http://elinux.org/File:Android-system-architecture.jpg
Jądro Linuxa Android został zaprojektowany z myślą o kompatybilności z wieloma urządzeniami. Jądro Linuxa to umożliwia. Wersja jądra 4.4 (od Oreo - Android 8) Dla każdej aplikacji uruchamiany jest oddzielny proces Linuxowy z nowym UserID oraz GroupID Naniesiono kilka poprawek w celu usprawnienia działania Androida (zarządzanie pamięcią oraz energią, logger)
Dlaczego Linux Znakomite zarządzanie pamięcią oraz procesami Model zabezpieczeń oparty na zezwoleniach (permissions) Wsparcie dla współdzielonych bibliotek Sprawdzony model sterowników Jest „open source”
Hardware Abstraction Layer (HAL) Zapewnia możliwość tworzenia interfejsów pomiędzy platformą Android a poszczególnymi komponentami sprzętowymi danego urządzenia. HAL składa się z wielu bibliotek modułów implementujących interfejsy dla komponentów. W przypadku gdy np. framework API wywołuje dostęp do danego modułu sprzętowego jak aparat lub adapter Bluetooth, system ładuje bibliotekę modułu dla danego komponentu.
Biblioteki Zestaw bibliotek C/C++ używane przez komponenty systemu Android posiada bibliotekę libc (zamiast GNU libc) z powodu problemów z licencją. Nie jest tak kompletna jak oryginał, ale posiada specjalnie zmodyfikowany kod, który jest uważany jako bardziej optymalne pod środowisko mobilne. To jedna ze zmian, które powodują, że Android nie może być uważany jako kompatybilny z POSIX. Grafika 2D oraz 3D Surface Manager – obsługa okienek UI SQLite – silnik bazodanowy WebKit – silnik przeglądarki internetowej
Runtime Każda aplikacja ma przydzielony osobny process. Wykorzystywany jest format plików kodu bajtowego (DEX) – zaprojektowany specjalnie pod Android, zmniejsza pamięć wymaganą do działania programu. Maszyna wirtualna Dalvik zastępuje Java VM Od Android 5.0 Dalvik jest zastąpiony przez środowisko uruchomieniowe Android Runtime (ART) Komunikuje się z niższymi warstwami poprzez Java Native Interface (JNI), która umożliwia wykorzystanie bibliotek pisanych w C/C++. Urządzenie może mieć uruchomionych kilka maszyn wirtualnych jednocześnie bez znaczącego pogorszenia sprawności. Jeden z pierwszych procesów, który jest uruchamiany przy bootowaniu to Zygote. Jest ona odpowiedzialna za uruchamianie dodatkowych usług frameworku aplikacji. Zygote się kopiuje (poprzez fork), ładując każdy proces maszyny wirtualnej.
Framework aplikacji Zestaw serwisów systemowych opakowany w intuicyjny Java API. Zawarte paczki frameworku to m.in. android.*, java.* i javax.* Posiada także następujące usługi uruchamiane po rozruchu systemu: System widoków (Views) – za pomocą, którego można budować GUI aplikacji. Activity Manager – zarządza cyklem życiowym aplikacji. Package Manager – zarządza informacjami i zadaniami związanymi z paczkami w celu zainstalowania ich na systemie. Content Providers – umożliwiają dostęp do danych z innych aplikacji. Notification Manager – umożliwia ukazywanie się zawiadomień na „status bar”. Location Manager – udostępnia interfejs do pozyskiwania/ustalania współrzędnych (GPS, sieć telefonii komórkowej, WiFi) i innych informacji lokalizacyjnych.
Aplikacje Android posiada zestaw aplikacji domyślnych (np. Klient e-mail, Kalendarz, Klient wiadomości SMS/MMS, Przeglądarka stron internetowych, Kontakty). Aplikacje te znajdują się w katalogu /system/app . Istnieje możliwość doinstalowania nowych lub alternatywnych aplikacji (np. poprzez sklepik Google Play), zwykle rezydują w katalogu /data/app . W ramach udostępniania funkcjonalności, istnieje możliwość odwoływania do istniejących już aplikacji o wykonanie pewnych akcji (np. zrobienie zdjęcia i przekazanie rezultatu oryginalnej aplikacji). Android wykorzystuje specjalny klucz platformy, który wykorzystywany jest do podpisywania zainstalowanych już aplikacji. Aplikacje te posiadają przywileje systemowe (użytkownik: system). Reszta aplikacji jest podpisywana kluczami autorów w celu autoryzowania jej przyszłych aktualizacji.
Główne bloki budowy aplikacji Activity Intent Service Content Provider Broadcast Reveicer
Activity Zazwyczaj reprezentuje okienko/ekran w aplikacji. Często posiada inne elementy GUI (np. guziki, pola tekstowe). Posiada własny cykl życiowy, który jest powiązany z jej widocznością dla użytkownika.
Cykl Życiowy Activity 4 stany : Aktywny – jeżeli jest na pierwszym planie Spauzowany – jeżeli jest dalej widoczny, ale stracił „focus” Zatrzymany – jeżeli nie jest widoczny Zlikwidowany – jeżeli proces został zlikwidowany W ostatnich 3 stanach system może podjąć decyzje, co do dalszego postępowania
Intent „Intent” reprezentuje akcje lub zdarzenia Można porównać do linków Może także przekazywać wiadomości pomiędzy komponentami
Service „Service” to komponent, który nie ma graficznej reprezentacji i działa w tle (np. odtwarzacz muzyki)
Cykl Życiowy Service O wiele prostszy niż „activity” Started – brak interakcji Bound – interfejs klient-serwer, który umożliwia interakcję (żądanie, rezultat)
Content provider Umożliwia współdzielenie ustrukturyzowanych danych pomiędzy aplikacjami Zawiera API do odpytywania, dodawania oraz usuwania Zawiera mechanizm do definiowania zabezpieczeń danych Przykładem są „kontakty”
Broadcast receiver Platformowy system notyfikacji Broadcast receiver to komponent, który nasłuchuje na notyfikacje (wydarzenia) oraz umożliwia podjęcie akcji (np. monitor zgasł) Może służyć jako rodzaj komunikacji między aplikacjami
Model zabezpieczeń Model zabezpieczeń oparty na zezwoleniach (permission) android.permission.INTERNET Zabezpieczenie polegające na zaciemnianiu kodu Wykorzystanie ProGuard (utrudnia reverse engineering)
Narzędzia do tworzenia oprogramowania Android SDK (Software Development Kit) –zestaw narzędzi umożliwiających tworzenie aplikacji Emulator Android – wirtualne urządzenie mobilne DDMS (Dalvik Debug Monitor Service) – asystuje przy debugowaniu oraz pozwala na zarządzanie procesami adb – umożliwia komunikację z podpiętym fizycznym urządzeniem Android Android Studio lub Eclipse z ADT (wtyczka) JDK (Java Development Kit)
Gdzie szukać dodatkowej pomocy http://developer.android.com/ - oficjalne http://www.xda-developers.com/ - głównie sprzętowe http://stackoverflow.com/questions/tagged/android - programowanie
Zalety Ułatwia proces implementacyjny aplikacji (poprzez SDK) Zaawansowany system z intuicyjnym GUI Ułatwia wspomaganie dużej ilości urządzeń Bardzo popularny (rosnąca popularność) Wspierany przez wiele urządzeń Łatwy dostęp do milionów aplikacji Wysoce przystosowalny i umożliwiający dopasowanie/zmianę zachowania oraz wyglądu Opensource – wiemy co w nim siedzi
Wady Duża ilość różniących się od siebie urządzeń powoduje, że trzeba więcej czasu spędzić nad przetestowaniem tworzonego oprogramowania oraz nad obsługą różnych wielkości ekranów Zbudowany z mikstury języków programistycznych (warstw Java oraz C++ na specjalnie dostosowanym jąrdze Linux napisanym głównie w C) Opensource – łatwiej znaleźć wrażliwy punkt i go wykorzystać Limitacje (brak roota)