Kompilowanie Androida

Aby skompilować Androida, postępuj zgodnie z instrukcjami 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, kliknij 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 środowisko docelowe. Na przykład:

lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug

Powinien pojawić się opis ś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 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 na urządzeniach tej firmy ma te komponenty:

    • aosp – odnosi się do platformy Android Open Source Platform.
    • (opcjonalnie) Wymagany, gdy docelowy obraz systemu ma być uruchamiany w emulatorze Cuttlefish.cf
    • 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 określa niektóre 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 nadaje się do środowiska produkcyjnego.
    userdebug Ta wersja kompilacji pomaga deweloperom urządzeń poznać wydajność i moc wersji w trakcie opracowywania. Podczas tworzenia aplikacji w wersji userdebug postępuj zgodnie z wytycznymi dotyczącymi wersji userdebug.
    eng Ta wersja 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ą konkretne urządzenia Google. Znajdziesz je na stronie Nazwy kodowe urządzeń.

Wyświetlanie obecnej wartości docelowej

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 w podkatalogach. Jeśli masz ustawioną zmienną środowiskową TOP, polecenie m używa jej. Jeśli zmienna 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ć zadania równoległe 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.

Możesz skompilować konkretne moduły zamiast pełnego obrazu urządzenia, wymieniając nazwy modułów w wierszu poleceń m. Dodatkowo polecenie m udostępnia pewne pseudoelementy docelowe, zwane celami. Na przykład polecenie 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 (wersja 8.0 lub starsza)

Jeśli tworzysz 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 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.