Kompilowanie Androida

Aby skompilować Androida, postępuj zgodnie z instrukcjami na tej stronie.

Konfigurowanie środowiska kompilacji

W katalogu roboczym pobierz skrypt envsetup.sh, aby skonfigurować środowisko kompilacji:

source build/envsetup.sh

Ten skrypt importuje kilka poleceń, które umożliwiają pracę z kodem źródłowym Androida, w tym z komendami używanymi na tej stronie. Aby wyświetlić źródło skryptu, kliknij platform/build/envsetup.sh. Aby wyświetlić wbudowaną pomoc, wpisz hmm.

Wybieranie celu

Przed kompilacją Androida musisz określić docelowy system operacyjny. Docelowa platforma to platforma docelowa, na którą tworzysz rozwiązanie. Aby określić środowisko docelowe do kompilacji, użyj polecenia lunch, a następnie ciągu znaków reprezentującego środowisko docelowe. Przykład:

lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug

Powinieneś zobaczyć podsumowanie środowiska docelowego i kompilacji:

============================================
PLATFORM_VERSION_CODENAME=Baklava
PLATFORM_VERSION=Baklava
TARGET_PRODUCT=aosp_cf_x86_64_only_phone
TARGET_BUILD_VARIANT=userdebug
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=silvermont
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.10.11-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=BP1A.250305.020
OUT_DIR=out
============================================

Ciąg znaków reprezentujący docelowe miejsce docelowe ma następujący format:

lunch product_name-release_config-build_variant

Składa się on z tych elementów:

  • product_name to nazwa usługi, którą chcesz utworzyć, np. aosp_cf_x86_64_only_phone lub aosp_husky. Twoje dane product_name mogą być podawane w formacie właściwym dla Twojego urządzenia, ale format używany przez Google na swoich urządzeniach składa się z tych elementów:

    • aosp oznacza platformę Android Open Source.
    • (opcjonalnie) cf jest uwzględniane, gdy docelowe środowisko ma być uruchamiane w emulatorze Cuttlefish.
    • architektura i sprzęt (nazwa kodowa), np. x86_64_only_phone lub husky, czyli nazwa kodowa Pixela 8 Pro. Listę nazw kodowych urządzeń Google znajdziesz w artykule Nazwy kodowe urządzeń.
  • release_config jest ustawiony na konfigurację wersji, taką jak konfiguracja wersji deweloperskiej o nazwie aosp_current. Konfiguracja wersji określa pewne funkcje i kod, które są obsługiwane przez flagi funkcji i są włączone lub wyłączone w przypadku danej kompilacji. Więcej informacji o konfiguracjach wersji znajdziesz w artykule Ustawianie wartości flag funkcji.

  • Część ciągu build_variant może mieć jedną z 3 wartości podanych w tabeli:

    build_variant Opis
    user Ten wariant kompilacji zapewnia ograniczony dostęp do zabezpieczeń i jest odpowiedni do wdrożenia produkcyjnego.
    userdebug Ten wariant kompilacji pomaga deweloperom urządzeń zrozumieć wydajność i możliwości wersji w trakcie opracowywania. Podczas tworzenia aplikacji za pomocą wersji userdebug postępuj zgodnie z wytycznymi dotyczącymi userdebug.
    eng Ten wariant kompilacji ma krótszy czas kompilacji i jest najbardziej odpowiedni do codziennego tworzenia aplikacji, jeśli nie zależy Ci na wydajności i mocy.

Jeśli uruchomisz lunch bez argumentów, otrzymasz listę typowych celów. Możesz też tworzyć własne ciągi docelowe, łącząc elementy ciągu docelowego za pomocą informacji na tej stronie i nazwy kodowej, która reprezentuje konkretny sprzęt Google na stronie Nazwy kodowe urządzeń.

Wyświetlanie bieżącego celu

Aby wyświetlić bieżące ustawienia lunchu, uruchom:

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

Kompilowanie kodu

Aby utworzyć środowisko docelowe, uruchom to polecenie: W zależności od specyfikacji stacji roboczej pierwsza kompilacja może potrwać od godziny do kilku godzin. Kolejne kompilacje zajmują znacznie mniej czasu.

m

Dane wyjściowe kompilacji pojawią się w sekcji $OUT_DIR. Jeśli tworzysz różne wersje docelowej, każda z nich pojawi się w sekcji $OUT_DIR.

Polecenie m jest tworzone od góry drzewa, więc możesz uruchamiać m z podkatalogów. Jeśli masz ustawioną zmienną środowiskową TOP, polecenie m będzie z niej korzystać. Jeśli parametr TOP nie jest ustawiony, polecenie m wyszukuje drzewo z bieżącego katalogu, próbując znaleźć jego początek.

Polecenie m może obsługiwać zadania równoległe za pomocą argumentu -jN. Jeśli nie podasz argumentu -j, system kompilacji automatycznie wybierze liczbę równoległych zadań, która według niego będzie optymalna dla Twojego systemu.

Aby skompilować konkretne moduły zamiast pełnego obrazu urządzenia, podaj nazwy tych modułów na wierszu poleceń m. Dodatkowo polecenie m udostępnia niektóre pseudocele o nazwie goals. Na przykład polecenie m nothing nic nie kompiluje, ale analizuje i sprawdza strukturę kompilacji. Aby wyświetlić listę prawidłowych celów, wpisz m help.

Rozwiązywanie problemów z błędami kompilacji (wersja 8.0 lub starsza)

Jeśli kompilujesz AOSP 8 lub wcześniejszą wersję, m może się przerwać, gdy napotka problem z Twoją wersją Javy. Możesz na przykład zobaczyć taki komunikat:

************************************************************
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 możliwe przyczyny i rozwiązania: