● Aplikacje pisane w javie
● Framework aplikacji np.: menadżer działania systemu, okienek, notyfikacji itd.
● Biblioteki np.: OpenGL, SQLite, Surface manager, media framerwork itd. na tym samym poziomie struktury znajduje się również maszyna wirtualna systemu operacyjnego Android, która nazywa się DALVIK zajmuje sie wyswietlaniem aplikacji, komunikuje z nizszym lewelem (odpowiednik wirtualnej maszyny javy), w dalviku znajdują sie proste programy np bash , ls
● Linux Kernel
● Sprzęt
Podstawowe etapy kompilacji programów w C/C++
1. Prekompilacja Tworzenie ostatecznego kodu źródłowego programu przez włączenie plików wskazanych dyrektywą #include. Wykonywnanie makroinstrukcji #define i usuwa komentarze.
2. Kompilacja do poziomu assemblera Przeszukuje kod stworzony przez prekompilację i wyszukuje tokeny czyli słowa kluczowe, operatory i przekształce ja na wewnętrzną reprezentację która jest przekształcana na kod assemblera.
3. Optymalizacja kodu assemblera zmiana kodu w celu zwiększenia jego wydajności.
Modyfikacja polega na zmianie obliczania adresów względnych, elminowaniu nieużywanych fragmentów kodu, optymalizacja przydziału rejestrów oraz zmiana lokalnych odwołań by używany był wskaźnik do stosu.
4. Assemblacja przetworzenie kodu na kod w języku maszynowym. Instrukcję w tym kodzie nie odnoszą się jeszcze do konkretnych adresów pamięci.
5. Konsolidacja ma na celu stworzenie bliku binarnego z kodem wykonywalnym.
Przeszukuje i dołącza do programu wskazane biblioteki. Przypisuje kod maszynowy do ustalonych adresów. (Przydział zmiennym globalnym adresów tak by można było się odwołać do ich wartości). Utworzony plik wykonywalny jest w formacie Executable and Linking Format.
Crosskompilacja jest procesem kompilacji kodu na określony system komputerowy w innym systemie, zwanego gospodarzem(hostem). Jest to bardzo przydatna technika, na przykład, gdy system docelowy jest zbyt mały, aby pomieścić kompilator i wszystkie odpowiednie pliki. Typowe przykłady to wiele systemów wbudowanych, ale także typowe konsole do gier.
SKD android, emulator,ADB(android debug bridge) NDK zawiera liby do crosskompilacji
Przygotowanie środowiska do budowania programów dla Androida:
● ustawienie odpowiednich zmiennych środowiskowych w tym celu aby SYSROOT
wskazywal kompilatorowi GCC gdzie ma szukać katalogów z bibliotekami oraz plikami nagłówkowymi dla kompilowanych i linkowanych programów
● należy dodać do zmiennej PATH ścieżkę do katalogu z kompilatorem z pakietu NDK.
Proces uruchamiania systemu Linux:
● BIOS odczytuje sektor rozruchowy MBR (zawiera on program rozruchowy np.: GRUB)
● Po wybraniu Systemu, który ma zostać uruchomiony następnym krokiem jest załadowanie jądra systemu oraz pliku ramdysk (zawiera podstawowy system plików /
(root) wraz z niezbędnymi dla danego sprzętu modułami i programami. po rozpoczęciu wykonywania skryptów init.d system plików stworzony z pliku initrd jest podmieniany na właściwą partycję root)
● Zostaje uruchomiany pierwszy proces Init jest patronem wszystkich procesów (tzw
"Ojciec procesów"), jego identyfikator zawsze wynosi 1. Jeśli wystąpi błąd procesu Init, to podąży za nim cały system, resetując system.
Init wykonuje skrypty, które podzielone są na poziomy. Wykonanie wszystkich skryptów z poziomu 3(Pełny tryb wieloużytkownikowy) lub 5 (tryb 3 + logowanie do systemu X
Window), oznacza uruchomienie systemu.
● Dalszym krokiem jest uruchomienie przez Init wirtualnych terminali (mingetty), po którym możliwe jest zalogowanie się do systemu.
Initrd - przygotowanie własnego obrazu
● Najlepiej tworzyć nowy initrd na bazie już działającego pliku. Należy więc skopiować do swojego katalogu domowego plik randysk.
● Wykonać polecenie dekompresji ramdysk’u w zalezności od zastosowanego algorytmu
● Po wykonaniu powyższego polecenia otrzymamy wiekszy plik ze spakowanym przez program cpio systemem plików, dlatego musimy wykonac polecenie rozpakowania go przez program cpio
● Własne ustawienie konfiguracji pliku intrd.
● Spakowanie cpio
● Skompresowanie