Budowanie Androida

Postępuj zgodnie z tymi instrukcjami, aby rozpocząć tworzenie Androida.

Konfigurowanie środowiska

Zainicjuj środowisko za pomocą skryptu envsetup.sh :

source build/envsetup.sh

lub

. build/envsetup.sh

Zapoznaj się ze skryptem na platformie/build/envsetup.sh, aby uzyskać opisy powiązanych poleceń, w tym lunchu do wybierania urządzeń docelowych i tapas do tworzenia niepowiązanych aplikacji, takich jak referencyjna aplikacja telewizyjna .

Musisz ponownie wykonać to polecenie po każdej repo sync , aby pobrać wszelkie zmiany w tym skrypcie. Zwróć uwagę, że zamieniając source na . (pojedyncza kropka) oszczędza kilka znaków, a skrócona forma jest częściej używana w dokumentacji.

Skrypt envsetup.sh importuje kilka poleceń, które umożliwiają pracę z kodem źródłowym systemu Android, w tym polecenia użyte w tym ćwiczeniu.

Aby zobaczyć pełną listę dostępnych poleceń, uruchom:

hmm

Wybór celu

obiad

Wybierz cel do zbudowania podczas lunch . lunch product_name - build_variant wybiera product_name jako produkt do zbudowania i build_variant jako wariant do zbudowania i przechowuje te wybory w środowisku do odczytania przez kolejne wywołania m innych podobnych poleceń.

Dokładną konfigurację można przekazać jako argument. Na przykład następujące polecenie odnosi się do kompletnej kompilacji emulatora z włączonym debugowaniem:

lunch aosp_arm-eng

Jeśli zostanie uruchomiony bez argumentów, lunch poprosi o wybranie celu z menu, ale zauważ, że menu nie zawiera wszystkich możliwości. Zobacz Wybieranie kompilacji urządzenia dla konfiguracji kompilacji wszystkich urządzeń obsługiwanych w AOSP lub porozmawiaj z członkami zespołu o prawidłowym lunchu dla urządzenia, nad którym pracujesz.

Wszystkie cele kompilacji mają postać BUILD-BUILDTYPE , gdzie BUILD jest nazwą kodową odnoszącą się do konkretnej kombinacji funkcji. BUILDTYPE jest jednym z poniższych.

Typ kompilacji Posługiwać się
użytkownik Ograniczony dostęp; nadaje się do produkcji
debugowanie użytkownika Jak użytkownik, ale z dostępem do roota i możliwością debugowania; preferowany do debugowania
pol Konfiguracja programistyczna z dodatkowymi narzędziami do debugowania

Kompilacja userdebug powinna zachowywać się tak samo jak kompilacja użytkownika, z możliwością włączenia dodatkowego debugowania, które zwykle narusza model bezpieczeństwa platformy. To sprawia, że ​​kompilacja userdebug jest dobra do testowania użytkowników z większymi możliwościami diagnostycznymi. Podczas programowania z kompilacją userdebug postępuj zgodnie z wytycznymi userdebug .

Wersja eng priorytetowo traktuje wydajność inżynierską dla inżynierów pracujących na platformie. Kompilacja eng wyłącza różne optymalizacje używane w celu zapewnienia dobrego doświadczenia użytkownika. W przeciwnym razie kompilacja eng zachowuje się podobnie do kompilacji użytkownika i userdebug, dzięki czemu deweloperzy urządzeń mogą zobaczyć, jak zachowuje się kod w tych środowiskach.

Aby uzyskać więcej informacji na temat tworzenia i uruchamiania na rzeczywistym sprzęcie, zobacz Flashing Devices .

tapas

Polecenie tapas konfiguruje kompilację niepowiązanych aplikacji. Wybiera poszczególne aplikacje do zbudowania przez system kompilacji Androida. W przeciwieństwie do lunch , tapas nie wymaga tworzenia obrazów dla urządzenia.

Uruchom tapas help , aby uzyskać więcej informacji na temat polecenia.

Budowanie kodu

Ta sekcja jest krótkim podsumowaniem, aby upewnić się, że konfiguracja została zakończona.

Zbuduj wszystko z m . m może obsługiwać zadania równoległe z argumentem -jN . Jeśli nie podasz argumentu -j , system kompilacji automatycznie wybierze liczbę równoległych zadań, które uważa za optymalne dla twojego systemu.

m

Jak wyjaśniono powyżej, możesz zbudować określone moduły zamiast pełnego obrazu urządzenia, podając ich nazwy w wierszu poleceń m . Ponadto m zapewnia kilka pseudocelów do celów specjalnych. Oto kilka przykładów:

  • droid - m droid to normalna kompilacja. Ten cel jest tutaj, ponieważ domyślny cel wymaga nazwy.
  • all - m all buduje wszystko, co robi m droid , plus wszystko, co nie ma tagu droid . Serwer kompilacji uruchamia to, aby upewnić się, że wszystko, co znajduje się w drzewie i ma plik Android.mk , kompiluje się.
  • m - Uruchamia kompilacje z wierzchołka drzewa. Jest to przydatne, ponieważ możesz uruchomić make z podkatalogów. Jeśli masz ustawioną zmienną środowiskową TOP , używa jej. Jeśli tego nie zrobisz, wyszukuje drzewo z bieżącego katalogu, próbując znaleźć wierzchołek drzewa. Możesz albo zbudować całe drzewo kodu źródłowego, uruchamiając m bez argumentów, albo zbudować konkretne cele, określając ich nazwy.
  • mma — Buduje wszystkie moduły w bieżącym katalogu i ich zależności.
  • mmma — buduje wszystkie moduły w dostarczonych katalogach i ich zależności.
  • croot - cd do wierzchołka drzewa.
  • clean - m clean usuwa wszystkie pliki wyjściowe i pośrednie dla tej konfiguracji. To to samo co rm -rf out/ .

Uruchom m m help , aby zobaczyć, co oferują inne pseudocele.

Uruchamianie kompilacji

Możesz uruchomić swoją kompilację na emulatorze lub sflashować ją na urządzeniu. Ponieważ cel kompilacji został już wybrany podczas lunch , jest mało prawdopodobne, aby działał w innym celu niż został stworzony.

Flashowanie z fastboot

Aby sflashować urządzenie, użyj fastboot , który powinien znaleźć się na twojej ścieżce po udanej kompilacji. Aby uzyskać instrukcje, zobacz Flashowanie urządzenia .

Emulacja urządzenia z Androidem

Emulator jest dodawany do ścieżki automatycznie przez proces kompilacji. Aby uruchomić emulator, wpisz:

emulator

Zrozumienie odcisków palców kompilacji

Aby śledzić i zgłaszać problemy związane z konkretną kompilacją Androida, ważne jest zrozumienie odcisku palca kompilacji. Odcisk cyfrowy kompilacji to unikalny, czytelny dla człowieka ciąg znaków zawierający informacje o producencie wydawane dla każdej kompilacji. Zobacz opis FINGERPRINT w sekcji Parametry kompilacji dokumentu definicji zgodności systemu Android (CDD), aby uzyskać dokładną składnię.

Odcisk cyfrowy kompilacji reprezentuje konkretną implementację i wersję Androida. Ten unikalny klucz umożliwia programistom aplikacji i innym osobom zgłaszanie problemów z określonymi wersjami oprogramowania układowego. Zobacz Zgłaszanie błędów , aby zapoznać się z procesem zgłaszania problemów w systemie Android.

Odcisk cyfrowy kompilacji zawiera wszystkie szczegóły implementacji Androida:

  • API: Android i natywne, a także miękkie zachowania API
  • Podstawowe API i niektóre zachowania interfejsu użytkownika systemu
  • Wymagania dotyczące kompatybilności i bezpieczeństwa określone w CDD
  • Specyfikacje produktów i ustawienia funkcji i zastosowań wykorzystywane przez aplikacje do kierowania na urządzenia spełniające oczekiwane wymagania
  • Wdrożenia komponentów sprzętowych i programowych

Zobacz CDD , aby uzyskać szczegółowe informacje, oraz Dodawanie nowego urządzenia , aby uzyskać instrukcje dotyczące tworzenia całkowicie nowego urządzenia z systemem Android.

Rozwiązywanie typowych błędów kompilacji

Niewłaściwa wersja Javy

Jeśli próbujesz zbudować wersję Androida, która jest niezgodna z twoją wersją Java make przerwij, wyświetlając komunikat taki jak:

************************************************************
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:

  • Niepowodzenie instalacji poprawnego JDK zgodnie z wymaganiami JDK . Upewnij się, że wykonałeś czynności opisane w Konfigurowanie środowiska i Wybieranie celu .
  • Na Twojej ścieżce pojawił się inny zainstalowany wcześniej JDK. Dodaj poprawny JDK na początku swojej ścieżki lub usuń problematyczny JDK.

Brak pozwolenia na USB

Domyślnie w większości systemów Linux nieuprzywilejowani użytkownicy nie mają dostępu do portów USB. Jeśli zobaczysz błąd odmowy uprawnień, postępuj zgodnie z instrukcjami w sekcji Konfigurowanie dostępu USB .

Jeśli ADB już działał i nie może połączyć się z urządzeniem po skonfigurowaniu tych reguł, możesz go zabić za pomocą adb kill-server . To polecenie powoduje ponowne uruchomienie ADB z nową konfiguracją.