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
lubaosp_husky
. Twoje daneproduct_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
lubhusky
, 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 nazwietrunk_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:
- Nie udało się zainstalować prawidłowej wersji JDK zgodnie z instrukcjami w sekcjach JDK w artykule Konfiguracja środowiska do tworzenia aplikacji na AOSP (2.3 – 8.0) .
- W ścieżce występuje inna wcześniej zainstalowana wersja JDK. Dodaj prawidłową wersję JDK na początku ścieżki lub usuń problemową wersję JDK.