Wprowadzenie do systemu operacyjnego Android

System operacyjny Android to system typu open source. Wiele osób twierdzi, że jest to Linux, ale to nie do końca prawda. Chociaż Android ma jądra podobne do Linuxa, to jedyna podobna rzecz. Dziś przyjrzymy się głębiej systemowi Android, czyli procesom, ramom i innym podobnym strukturom. Zacznijmy od podstaw i spójrzmy na wewnętrzny system operacyjny Android.

Po wydaniu iPhone'a i Windows Lumia Series, czyli telefonów związanych z Microsoft Windows, Google chciał zrobić to samo. Ale chcieli czegoś, co mogłoby być open source. Głównym powodem tego było to, że każdy mógł go debugować, modyfikować dowolne zmiany, jak tylko chciał. Potem przyszedł pomysł na Linuksa. Linux jest w pełni otwartym systemem operacyjnym i jest powszechnie akceptowany przez społeczność na całym świecie. Jest to jeden z tych systemów operacyjnych, który jest używany nawet bardziej niż Windows lub Mac OSX. Poza tym Linux może uruchamiać prawie każdą inną rzecz, którą można uruchomić na Macu lub Windowsie. Dlatego Google zdecydował się opracować system operacyjny dla telefonu komórkowego z taką samą podstawową powłoką wewnętrzną jak Linux, tak aby był kompatybilny z prawie wszystkim, a zewnętrzna powłoka byłaby opracowywana tak, jak i kiedy jest wymagana.

System operacyjny Android jako projekt Open Source (AOSP)

Android ma możliwość swobodnego modyfikowania, wymyślania i wdrażania własnych sterowników urządzeń i funkcji. Mówiąc o tym, istnieje pięć różnych warstw systemu operacyjnego Android. Wygląda to następująco:

Jak widać na powyższym obrazie, pierwsza warstwa to Framework aplikacji, druga to proxy Binder IPC, trzecia to usługi systemowe systemu Android, czwarta to warstwa HAL lub pełna forma to warstwa abstrakcji sprzętu, a ostatnia będąc jądrem Linuksa. Teraz, jak powiedziałem wcześniej, widać, że jedyną częścią Linuksa, na którą składa się system operacyjny Android, jest jądro Linuksa. Teraz przyjrzyjmy się wszystkim po kolei.

Struktura aplikacji na Androida

Z tej struktury aplikacji korzystają twórcy aplikacji dla systemu Android. Ta część Androida ma przynajmniej coś wspólnego z warstwą sprzętową. Aplikacje na Androida są programowane w języku Java. Po zaprogramowaniu aplikacji narzędzia zestawu SDK systemu Android pomagają w kompilacji danych i plików zasobów, takich jak pliki XML, pliki jar, pliki manifestów oraz inne obrazy i inne rzeczy w jednym pakiecie archiwum z rozszerzeniem „.apk”. Tego pliku apk można użyć do zainstalowania aplikacji jednym kliknięciem na urządzeniach z Androidem. Ponieważ system operacyjny Android zachowuje się jak środowisko Linux, zachowanie aplikacji również tutaj jest takie samo. Każda aplikacja jest traktowana jako oddzielny użytkownik od drugiej i działa na własnej maszynie wirtualnej. To izoluje zaprogramowany kod aplikacji, a także zapobiega infekcjom innych, chyba że wyraźnie zaznaczono inaczej. Każda inna aplikacja ma swój ID UŻYTKOWNIKA, a każdy inny proces ma swoją Maszynę Wirtualną.

Struktura aplikacji na Androida działa na zasadzie najmniejszych uprawnień. Zasada najmniejszych uprawnień oznacza, że ​​za każdym razem, gdy trzeba uruchomić nową aplikację, ale nie ma dostępnej pamięci, system Android automatycznie zamknie starą aplikację, która nie musi działać w tle. Jest to jedna z najlepszych części bezpieczeństwa systemu operacyjnego Android. Ta zasada pozwala każdej aplikacji mieć tylko taki dostęp, który jest wymagany do wykonania swojej pracy. Dlatego aplikacja nie może uzyskać pozwolenia na to, co nie jest przeznaczone. To z kolei tworzy bardzo bezpieczne środowisko w samym systemie operacyjnym Android.

Binder IPC jest znany jako Binder Inter-Process Communication. Ten interfejs pozwala programiście stworzyć aplikację do komunikacji z innymi aplikacjami. Częściej to nie aplikacje się komunikują, to procesy. Binder IPC pomaga uruchamiać wiele procesów jednocześnie na równoczesnym poziomie. Ta implementacja spoiwa pochodzi z jądra systemu operacyjnego Android. Teraz pojawiły się pytania, dlaczego spoiwo musi pozostać w jądrze i dlaczego nie może działać z mechanizmów Linux IPC? Głównym tego powodem jest to, że spoiwo unika niepotrzebnego przydziału miejsca w przeciwieństwie do innych mechanizmów IPC w systemie Linux. Jeśli słyszałeś o „magii w pythonie”, to właśnie tak wyglądałby Binder IPC dla programisty aplikacji, ponieważ jest całkowicie przed nimi ukryty i wydaje się po prostu działać, w przeciwieństwie do frameworku wysokiego poziomu, w którym musisz sprawić, by działało to jawnie. W rzeczywistości umożliwia to platformie wysokiego poziomu komunikowanie się z usługami systemu operacyjnego Android.

Usługi systemowe systemu operacyjnego Android

Usługa to skompilowany fragment kodu, który działa przez długi czas w tle systemu operacyjnego Android bez żadnego interfejsu. Każda aplikacja, może to być użytkownik lub system, może uruchomić usługę, ale nadal będzie działała w tle, nawet jeśli aplikacja zostanie zamknięta. Istnieją jednak dwa rodzaje usług:

Rozpoczęte usługi

Uruchomione usługi zwykle uruchamiają się, gdy wymaga tego aplikacja. Jednak usługa typu Started zwykle wykonuje tylko jedną operację i niczego nie zwraca.

Usługi powiązane

Usługi powiązane oferują interfejs relacji klient-serwer. Usługa związana działa do momentu uruchomienia aplikacji na pierwszym planie, a następnie zostaje zatrzymana po zniszczeniu działania aplikacji.

Usługi systemowe Androida dostarczają aplikacjom użytkownika niezbędnych informacji, aby działały poprawnie. Komunikacja między usługami systemowymi a aplikacjami użytkowników odbywa się za pomocą Binder IPC z jądra. Teraz może zaskoczyć, ale nie wszystkie aplikacje na Androida są napisane w Javie. Niektóre z nich są napisane w C i C ++. Aplikacje, które muszą być w bliskim kontakcie ze sprzętem, są napisane w C i C ++. Głównym tego powodem jest fakt, że usługi systemowe muszą być w stałym kontakcie ze sprzętem. Dlatego ważne jest, aby skompilowany fragment kodu był niezwykle szybki. A jeśli chodzi o przyspieszenie sprzętowe i wysoką wydajność, C jest znacznie szybszy niż Java lub inny dostępny język.

Usługi sprzętowe, które są w ciągłym użyciu, na przykład: czujniki zbliżeniowe, akcelerometr lub ekran dotykowy, muszą być napisane w C. Inny sprzęt, taki jak kamera lub dźwięk, korzysta głównie z połączeń JNI. Dlatego jeśli kiedykolwiek zauważysz, ekrany dotykowe zawsze będą szybsze niż uruchomienie aparatu lub odtwarzanie utworu za pomocą odtwarzacza muzyki.

Podczas tworzenia usługi systemowej należy pamiętać, że usługi zwykle działają w procesie głównym i nie tworzy osobnego procesu. Krótko mówiąc, jeśli Twój kod będzie wykonywał intensywne prace z procesorem i GPU, na przykład gry w wysokiej rozdzielczości, powinieneś preferować tworzenie nowych wątków w tej samej usłudze; w przeciwnym razie zawsze będzie duże prawdopodobieństwo, że pojawi się okno dialogowe „Aplikacja nie odpowiada”.

Polecane kursy

  • Szkolenie z certyfikacji bezpieczeństwa IT
  • Ukończ kurs Ruby on Rails
  • Profesjonalne szkolenie CSS
  • Program na HTML5 i CSS3

Warstwa abstrakcji sprzętu

HAL lub Hardware Abstraction Layer jest specjalnie zaprojektowany dla dostawców. Twórcy aplikacji nie mają tu prawie nic do roboty. Ta warstwa pomaga wstawić funkcjonalność bez modyfikacji systemu. Każdy inny system ma inny HAL, ponieważ są one dostosowane do konkretnego urządzenia. HAL składa się z dwóch typowych struktur: modułu i urządzenia.

Struktura modułu w HAL jest przechowywana jako biblioteka współdzielona w formacie .so, który składa się z podstawowych metadanych, takich jak numer wersji, autor, który zaprojektował moduł i podobne rzeczy. Struktura urządzenia jest rzeczywistym sprzętem produktu. Podobnie jak w module, ale struktura urządzenia definiuje bardziej kompleksową wersję ogólnych informacji o sprzęcie, która zawiera wskaźniki i inne podobne elementy, które są szczególne dla każdego sprzętu.

W systemie Linux aplikacje komunikują się z podstawowym sprzętem za pośrednictwem wywołań systemowych. Ale w systemie operacyjnym Android aplikacje komunikują się ze sprzętem za pośrednictwem interfejsów API Java.

Jądro Linux

Kompilacja jądra Linux dla systemu operacyjnego Android jest podobna do kompilacji dla podstawowego systemu operacyjnego Linux. Jedyną różnicą jest to, że wersja Androida jest nieco bardziej zaawansowana niż wersja Linux. Głównym powodem jest to, że jądro Androida zawiera dodatkowe funkcje, takie jak wakelocks, dwukrotne dotknięcie, aby odblokować i inne podobne funkcje wbudowane w mobilne urządzenie operacyjne. Funkcje takie jak wakelock są ważne, ponieważ jądro będzie działać na urządzeniu przenośnym i musi być nieco bardziej agresywne w zarządzaniu pamięcią i baterią; w przeciwieństwie do podstawowego Linuxa, w którym zarządzanie energią nie stanowi problemu. Te dodatkowe wymagania są wprowadzane raczej w jądrze niż w systemie, ponieważ te rzeczy nie powinny wpływać na wbudowane sterowniki.

Ilekroć słyszysz osobę mówiącą „jej Linux”, zwykle oznacza to jądro, ponieważ jest ono najbardziej podstawową, wciąż najważniejszą częścią każdego systemu operacyjnego. Głównym powodem, dla którego Android jest oparty na jądrze Linuksa, jest jego open source. Każdy może modyfikować jądro Linux bez żadnych ograniczeń sprzętowych, a nawet problemów licencyjnych.

Różnica między systemem Linux a systemem Android

Więc teraz w końcu dotarliśmy do najbardziej zagmatwanego etapu tego bloga: Linux vs Android. Ludzie zwykle uważają Androida za dystrybucję Linuksa, ale powiedziałbym, że mają tylko 50% racji. Ilekroć system operacyjny Android uruchamia się, w zasadzie ładuje jądro, jak każda inna dystrybucja Linuksa, ale reszta oprogramowania jest całkowicie inna niż Linux. Aplikacje Linux nie będą działały na Androidzie i odwrotnie, chyba że zostaną skompilowane w środowisku chroot. Biblioteki obecne w typowej dystrybucji Linuksa i systemie Android są całkowicie odmienne od siebie. Zasadniczo nie można uzyskać dostępu do terminala głównego w systemie Android, tak jak w przypadku systemu Linux. Jest to główny powód, dla którego ludzie zwykle instalują Busybox, SuperSU i jego pliki binarne po zrootowaniu, aby mieli bardziej szczegółowy dostęp do jądra i powłoki z wiersza poleceń. W systemie Android nie ma domyślnej powłoki, ale można ją zdobyć, instalując emulator terminala ze sklepu Google Play. Emulator terminala wygląda następująco:

Środowisko uruchomieniowe systemu Android działa na maszynie wirtualnej Dalvik. Ta Dalvik VM jest w rzeczywistości tłumaczem języka programowania Java. Cały środowisko uruchomieniowe Androida jest napisane w Javie w Androidzie, a ponieważ wszystkie aplikacje Androida są napisane w Javie, aplikacja staje się znacznie łatwiejsza i płynniejsza w środowisku wirtualnym. Ponieważ wszystkie aplikacje, a nawet środowisko wykonawcze są napisane w Javie, każdy programista może znacznie łatwiej dostosować każdy inny element systemu operacyjnego Android. Android był zwykle zaprojektowany jako system operacyjny dla jednego użytkownika (w przeciwieństwie do Lollipopa i Marshmallow, w których może być wielu użytkowników). Aby uprościć to, pozwól mi umieścić go w tej formie. Aplikacje na Androida to na końcu procesy Linuksa i tak zwykle działają. A ponieważ powiedziałem powyżej, że każda aplikacja ma swój własny proces, jądrze łatwiej jest utworzyć osobny identyfikator UID dla każdego procesu i obsługiwać pliki aplikacji i pamięć bez dodatkowego wysiłku.

W rzeczywistości chodzi o coś więcej niż podstawy systemu operacyjnego Android, o których wspomniałem powyżej. Android ma podstawowy proces zwany „Zygote” i wyróżnia się tym, co robi. Proces ten faktycznie rozpoczyna się od poleceń inicjalizacyjnych podczas uruchamiania systemu Android. Nie będę tutaj wchodził w szczegóły, ale myślę, że podstawy systemu operacyjnego Android są w rzeczywistości wystarczające, aby rozpocząć korzystanie z Androida. Aby uzyskać więcej informacji, możesz faktycznie odwiedzić stronę source.android.com i developers.android.com, która jest oficjalną stroną google dla każdej aktualizacji Androida.

Polecane artykuły

Oto kilka artykułów, które pomogą Ci uzyskać więcej szczegółowych informacji na temat systemu operacyjnego Android, więc po prostu przejdź przez link.

  1. HTML5 vs Flash - jak się różnią
  2. Top 8 przydatnych aplikacji pakietu Office na Androida
  3. Top 5 darmowych emulatorów Androida na PC
  4. Pytania do wywiadu na Androida - 10 najważniejszych przydatnych pytań
  5. Kariera w rozwoju Androida
  6. Najważniejsze 33 różnice między iPhonem a Androidem