Kompilowanie Androida

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

Konfigurowanie środowiska kompilacji

W katalogu roboczym uruchom 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 polecenia użyte na tej stronie. Aby wyświetlić źródło skryptu, zapoznaj się z sekcją platform/build/envsetup.sh. Aby wyświetlić wbudowaną pomoc, wpisz hmm.

Wybierz cel

Zanim zaczniesz kompilować Androida, musisz określić cel kompilacji. Element docelowy odzwierciedla platformę docelową, na której tworzysz aplikację. Aby określić środowisko docelowe, które chcesz utworzyć, użyj polecenia lunch, a potem ciągu znaków reprezentującego to środowisko. Przykład:

lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug

Powinien pojawić się opis środowiska docelowego i środowiska 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 cel ma następujący format:

lunch product_name-release_config-build_variant

Ciąg tekstowy składa się z tych komponentów:

  • product_name to nazwa produktu, który chcesz utworzyć, np. aosp_cf_x86_64_only_phone lub aosp_husky. Twój konkretny product_name może mieć własny format, ale format używany przez Google w przypadku swoich urządzeń składa się z tych elementów:

    • aosp odnosi się do platformy Android Open Source Platform.
    • (opcjonalnie) Wymiar cf jest uwzględniany, gdy docelowy obraz systemu ma być uruchamiany 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 ustawiona na konfigurację wersji, na przykład konfigurację wersji deweloperskiej o nazwie aosp_current. Konfiguracja wersji identyfikuje określone funkcje i kod, które są powiązane z flagami uruchamiania funkcji i są włączone lub wyłączone w kompilacji. Więcej informacji o konfiguracjach wersji znajdziesz w artykule Ustawianie wartości uruchamiania flagi funkcji.

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

    build_variant Opis
    user Ta wersja kompilacji zapewnia ograniczony dostęp do zabezpieczeń i jest odpowiednia w przypadku
    produkcyjnym. userdebug Ta wersja kompilacji pomaga deweloperom urządzeń

    poznawać wydajność i moc wersji w trakcie opracowywania. Podczas tworzenia aplikacji w wersji userdebug postępuj zgodnie z wytycznymi dotyczącymi wersji userdebug. eng | Ten wariant kompilacji ma krótszy czas kompilacji i najlepiej nadaje się do codziennego programowania, jeśli nie zależy Ci na wydajności i mocy.

Jeśli uruchomisz polecenie lunch bez argumentów, wyświetli się lista typowych celów. Możesz też tworzyć własne ciągi docelowe, łącząc elementy ciągu docelowego na podstawie informacji na tej stronie i nazw kodowych, które reprezentują konkretny sprzęt Google, na stronie Nazwy kodowe urządzeń.

Wyświetlanie obecnego celu

Aby zobaczyć bieżące ustawienia lunchu, uruchom polecenie:

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

Tworzenie kodu

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

m

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

Polecenie m tworzy strukturę od góry, więc możesz uruchomić m z poziomu podkatalogów. Jeśli masz ustawioną zmienną środowiskową TOP, polecenie m jej używa. Jeśli TOP nie jest ustawiona, polecenie m przeszukuje drzewo od bieżącego katalogu, próbując znaleźć jego wierzchołek.

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

Zamiast pełnego obrazu urządzenia możesz utworzyć konkretne moduły, wymieniając nazwy modułów w wierszu poleceń m. Dodatkowo polecenie m udostępnia kilka pseudocelów, zwanych celami. Na przykład m nothing niczego nie tworzy, ale analizuje i weryfikuje strukturę kompilacji. Aby wyświetlić listę prawidłowych celów, wpisz m help.

Rozwiązywanie problemów z błędami kompilacji (Android 17 lub nowszy)

Ta sekcja zawiera instrukcje dotyczące obsługi błędów tylko do odczytu wynikających z próby modyfikacji bazy kodu AOSP tylko do odczytu podczas kompilacji.

Błędy podczas próby tworzenia wyników w systemie plików tylko do odczytu

Podczas kompilacji drzewo źródłowe AOSP jest tylko do odczytu. Jeśli kompilacja, której używasz, próbuje zmodyfikować drzewo źródłowe podczas konfiguracji produktu lub w innej części procesu kompilacji, może się nie powieść i zgłosić błędy związane z systemem plików tylko do odczytu. Te opcje umożliwiają tymczasowe przełączenie drzewa źródłowego w tryb odczytu i zapisu:

  • Aby zmienić cały drzewo źródłowe na tryb odczytu i zapisu podczas kompilacji, dodaj BUILD_BROKEN_SRC_DIR_IS_WRITABLE=true do środowiska kompilacji.

  • Aby zmienić część drzewa na tryb odczytu i zapisu podczas tworzenia, użyj BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST="path1, path2, ..."

    Ścieżki powinny być ścieżkami katalogów, w których zapisywanie powinno być dozwolone, w odniesieniu do góry obszaru roboczego.

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

Jeśli kompilujesz AOSP 8 lub starszą wersję, m może przerwać działanie, gdy napotka problem z Twoją wersją Javy. Możesz na przykład otrzymać 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 prawdopodobne przyczyny i rozwiązania:

  • Nie udało Ci się zainstalować prawidłowego pakietu JDK zgodnie z opisem w sekcjach dotyczących pakietu JDK w artykule Konfigurowanie środowiska do tworzenia aplikacji na AOSP (2.3–8.0) .
  • W ścieżce znajduje się inna, wcześniej zainstalowana wersja JDK. Dodaj prawidłowy pakiet JDK na początku ścieżki lub usuń problematyczny pakiet JDK.