Utwórz 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, w którym ma zostać utworzona aplikacja, użyj polecenia lunch, a następnie ciągu znaków reprezentującego to środowisko. Może to obejmować np. te funkcje:

lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

Powinieneś zobaczyć podsumowanie środowiska docelowego i kompilacji:

============================================
PLATFORM_VERSION_CODENAME=VanillaIceCream
PLATFORM_VERSION=VanillaIceCream
PRODUCT_INCLUDE_TAGS=com.android.mainline
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=generic
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=AOSP.MAIN
OUT_DIR=out
============================================

Ciąg znaków reprezentujący docelowe wartości ma następujący format:

lunch product_name-release_config-build_variant

Składniki tego ciągu to:

  • product_name to nazwa usługi, którą chcesz utworzyć, np. aosp_cf_x86_64_phone lub aosp_husky. Twoje dane product_name mogą być podane w formacie własnym Twojego urządzenia, ale format, którego używa 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_phone lub husky, która jest nazwą kodową 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 trunk_staging. Konfiguracja wersji identyfikuje określone 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 moc wersji w trakcie tworzenia. 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 w 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: