Budowanie Androida

Postępuj zgodnie z tymi instrukcjami, aby rozpocząć tworzenie systemu Android.

Konfigurowanie środowiska

Zainicjuj środowisko za pomocą skryptu envsetup.sh :

source build/envsetup.sh

Lub

. build/envsetup.sh

Zobacz skrypt na platformie/build/envsetup.sh, aby uzyskać opisy powiązanych poleceń, w tym lunch do wybierania urządzeń docelowych i tapas do tworzenia uwolnionych aplikacji, takich jak referencyjna aplikacja telewizyjna .

Musisz ponownie wydać to polecenie po każdej repo sync , aby wykryć wszelkie zmiany w tym skrypcie. Pamiętaj, że zastąpienie source przez . (pojedyncza kropka) pozwala zaoszczędzić kilka znaków, a w dokumentacji częściej stosuje się formę krótką.

Skrypt envsetup.sh importuje kilka poleceń umożliwiających pracę z kodem źródłowym Androida, w tym polecenia użyte w tym ćwiczeniu.

Aby zobaczyć pełną listę dostępnych poleceń, uruchom:

hmm

Wybór celu

obiad

Wybierz cel, który chcesz zbudować podczas lunch . lunch product_name - build_variant wybiera product_name jako produkt do zbudowania, a build_variant jako wariant do zbudowania i przechowuje te wybory w środowisku do odczytania przy kolejnych wywołaniach m i innych podobnych poleceń.

Dokładną konfigurację można przekazać jako argument. Na przykład poniższe polecenie odnosi się do pełnej kompilacji emulatora z włączonym wszystkimi debugowaniami:

lunch aosp_arm-eng

Jeśli zostanie uruchomiony bez argumentów, lunch poprosi Cię o wybranie celu z menu, ale pamiętaj, że menu nie zawiera wszystkich możliwości. Zobacz Wybieranie kompilacji urządzenia dla konfiguracji kompilacji wszystkich urządzeń obsługiwanych w AOSP lub porozmawiaj z osobami w swoim zespole na temat prawidłowego lunchu dla urządzenia, nad którym pracujesz.

Wszystkie cele kompilacji mają postać BUILD-BUILDTYPE , gdzie BUILD jest kryptonimem odnoszącym się do konkretnej kombinacji funkcji. BUILDTYPE jest jednym z poniższych.

Typ kompilacji Używać
użytkownik Ograniczony dostęp; nadaje się do produkcji
debugowanie użytkownika Podobnie jak użytkownik, ale z dostępem do roota i możliwością debugowania; bardzo blisko wydajności produkcyjnej
inż Konfiguracja rozwojowa z szybszym czasem kompilacji; najbardziej odpowiedni do codziennego rozwoju

Kompilacja userdebug powinna zachowywać się tak samo jak kompilacja user , z możliwością włączenia dodatkowego debugowania, które zwykle narusza model bezpieczeństwa platformy. Dzięki temu kompilacja userdebug jest dobra do zrozumienia wydajności i mocy wykorzystywanej przez wydanie. Podczas programowania przy użyciu kompilacji userdebug postępuj zgodnie ze wskazówkami dotyczącymi userdebug .

W wersji eng priorytetem jest produktywność inżynierów pracujących na platformie. Wersja eng wyłącza różne optymalizacje stosowane w celu maksymalizacji wydajności środowiska wykonawczego. W przeciwnym razie kompilacja eng jest bardzo podobna do kompilacji user i userdebug , dzięki czemu programiści urządzeń mogą zobaczyć, jak kod zachowuje się w tych środowiskach.

Aby zobaczyć aktualne ustawienia lunchu, uruchom polecenie:

echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

Aby uzyskać więcej informacji na temat budowania i uruchamiania na rzeczywistym sprzęcie, zobacz Urządzenia flashujące .

tapas

Polecenie tapas konfiguruje kompilację uwolnionych aplikacji. Wybiera poszczególne aplikacje, które mają zostać zbudowane przez system kompilacji Androida. W przeciwieństwie do lunch , tapas nie wymaga tworzenia obrazów dla urządzenia.

Uruchom tapas help , aby uzyskać więcej informacji na temat polecenia.

Budowanie kodu

W tej sekcji znajduje się krótkie podsumowanie pozwalające upewnić się, że konfiguracja została ukończona.

Zbuduj wszystko za pomocą m . m może obsługiwać zadania równoległe z argumentem -jN . Jeśli nie podasz argumentu -j , system kompilacji automatycznie wybierze liczbę zadań równoległych, którą uzna za optymalną dla twojego systemu.

m

Jak wyjaśniono powyżej, zamiast pełnego obrazu urządzenia możesz zbudować określone moduły, wypisując ich nazwy w wierszu poleceń m . Ponadto m zapewnia pewne pseudo cele do specjalnych celów. Oto kilka przykładów:

  • droid - m droid to normalna wersja. Ten cel jest tutaj, ponieważ domyślny cel wymaga nazwy.
  • all - m all buduje wszystko, co robi m droid , plus wszystko, co nie ma znacznika droid . Serwer kompilacji uruchamia to, aby upewnić się, że wszystko, co znajduje się w drzewie i ma plik Android.mk , zostało zbudowane.
  • m - Uruchamia kompilacje ze szczytu drzewa. Jest to przydatne, ponieważ możesz uruchomić make z podkatalogów. Jeśli masz ustawioną zmienną środowiskową TOP , użyje jej. Jeśli tego nie zrobisz, przeszuka drzewo w bieżącym katalogu, próbując znaleźć szczyt drzewa. Możesz albo zbudować całe drzewo kodu źródłowego, uruchamiając m bez argumentów, albo zbudować określone cele, podając ich nazwy.
  • mma - Kompiluje wszystkie moduły w bieżącym katalogu i ich zależności.
  • mmma - Kompiluje wszystkie moduły w dostarczonych katalogach i ich zależności.
  • croot - cd na szczyt drzewa.
  • clean - m clean usuwa wszystkie pliki wyjściowe i pośrednie dla tej konfiguracji. To jest to samo co rm -rf out/ .

Uruchom m help , aby zobaczyć, co zapewniają m pseudocele.

Uruchamianie kompilacji

Możesz uruchomić kompilację na emulatorze lub sflashować ją na urządzeniu. Ponieważ podczas lunch wybrałeś już cel kompilacji, jest mało prawdopodobne, że będzie on działał na innym celu, niż został zbudowany.

Flashowanie za pomocą fastboota

Aby sflashować urządzenie, użyj fastboot , który powinien znaleźć się na Twojej ścieżce po udanej kompilacji. Instrukcje znajdziesz w artykule Flashowanie urządzenia .

Emulacja urządzenia z systemem Android

Emulator jest dodawany do ścieżki automatycznie w procesie kompilacji. Aby uruchomić emulator, wpisz:

emulator

Zrozumienie odcisków palców kompilacji

Aby śledzić i zgłaszać problemy związane z konkretną wersją Androida, ważne jest zrozumienie odcisku palca kompilacji. Odcisk palca kompilacji to unikalny, czytelny dla człowieka ciąg znaków zawierający informacje o producencie wydane dla każdej kompilacji. Dokładną składnię można znaleźć w opisie FINGERPRINT w sekcji Parametry kompilacji dokumentu definicji zgodności systemu Android (CDD).

Odcisk palca kompilacji reprezentuje konkretną implementację i wersję systemu Android. Ten unikalny klucz umożliwia twórcom aplikacji i innym osobom zgłaszanie problemów z określonymi wersjami oprogramowania sprzętowego. Zobacz Zgłaszanie błędów , aby zapoznać się z procesem zgłaszania problemów z Androidem.

Odcisk palca kompilacji zawiera wszystkie szczegóły implementacji Androida:

  • Interfejsy API: Android i natywne, a także miękkie zachowania API
  • Podstawowy interfejs API i niektóre zachowania interfejsu użytkownika systemu
  • Wymagania dotyczące kompatybilności i bezpieczeństwa określone w CDD
  • Specyfikacje produktu i ustawienia funkcji użytkowych stosowane przez aplikacje w celu kierowania na urządzenia spełniające oczekiwane wymagania
  • Implementacje komponentów sprzętowych i programowych

Zobacz CDD , aby uzyskać szczegółowe informacje, oraz Dodawanie nowego urządzenia , aby uzyskać instrukcje dotyczące tworzenia całkowicie nowego urządzenia z systemem Android.

Rozwiązywanie typowych błędów kompilacji

Zła wersja Java

Jeśli próbujesz zbudować wersję Androida niezgodną z Twoją wersją Java, make ją, wyświetlając komunikat taki jak:

************************************************************
You are attempting to build with the incorrect version
of java.

Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.

Please follow the machine setup instructions at
    https://source.android.com/source/initializing.html
************************************************************

Oto prawdopodobne przyczyny i rozwiązania:

  • Niezainstalowanie prawidłowego pakietu JDK zgodnie z wymaganiami pakietu JDK . Upewnij się, że wykonałeś kroki opisane w Konfigurowanie środowiska i Wybieranie celu .
  • Na Twojej ścieżce pojawia się inny, wcześniej zainstalowany pakiet JDK. Dodaj poprawny pakiet JDK na początek ścieżki lub usuń problematyczny pakiet JDK.

Brak pozwolenia na USB

Domyślnie w większości systemów Linux nieuprzywilejowani użytkownicy nie mają dostępu do portów USB. Jeśli zobaczysz błąd odmowy uprawnień, postępuj zgodnie z instrukcjami w sekcji Konfigurowanie dostępu USB .

Jeśli ADB był już uruchomiony i nie może połączyć się z urządzeniem po skonfigurowaniu tych reguł, możesz go zabić za pomocą adb kill-server . To polecenie powoduje ponowne uruchomienie ADB z nową konfiguracją.