Z tego samouczka dowiesz się, jak po raz pierwszy tworzyć aplikacje na Androida.
Konfigurowanie środowiska programistycznego na Androida
Zanim pobierzesz i skompilujesz android-latest-releasegałąź manifestu źródła Androida, upewnij się, że Twój sprzęt spełnia niezbędne wymagania i że wymagane oprogramowanie jest prawidłowo zainstalowane. Musisz też znać te terminy:
- Git
- Git to bezpłatny system kontroli wersji typu open source. Android używa Git do operacji lokalnych, takich jak tworzenie gałęzi, zatwierdzanie zmian, porównywanie różnic i edycja. Aby dowiedzieć się więcej o Git, zapoznaj się z dokumentacją Git.
- Repo
- Repo to otoka Pythona wokół Gita, która upraszcza wykonywanie złożonych operacji w wielu repozytoriach Git. Repo nie zastępuje Gita we wszystkich operacjach kontroli wersji, tylko ułatwia wykonywanie złożonych operacji Gita. Repo używa plików manifestu do agregowania projektów Git w superprojekcie Androida.
- plik manifestu
- Plik manifestu to plik XML określający, gdzie w drzewie źródłowym AOSP znajdują się różne projekty Git w źródle Androida.
Wymagania dotyczące sprzętu do Google Meet
Twoja stacja robocza do programowania powinna spełniać te wymagania sprzętowe lub je przewyższać:
- 64-bitowy system x86. 
- Co najmniej 400 GB wolnego miejsca na dysku, aby pobrać i skompilować kod (250 GB na pobieranie i 150 GB na kompilację). 
- co najmniej 64 GB pamięci RAM; Do tworzenia Androida Google używa maszyn z 72 rdzeniami i 64 GB pamięci RAM. W tej konfiguracji sprzętowej pełna kompilacja Androida trwa około 40 minut, a kompilacja przyrostowa – tylko kilka minut. Natomiast pełna kompilacja na 6-rdzeniowym komputerze z 64 GB pamięci RAM trwa około 6 godzin. 
Spełnianie wymagań dotyczących systemu operacyjnego
Na stacji roboczej dewelopera musi być zainstalowana dowolna 64-bitowa dystrybucja systemu Linux z biblioteką GNU C Library (glibc) w wersji 2.17 lub nowszej.
Instalowanie wymaganych pakietów
Aby zainstalować wymagane pakiety w Ubuntu 18.04 lub nowszym, uruchom to polecenie:
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfigInstalowanie wymaganego oprogramowania
Zanim zaczniesz korzystać z AOSP, musisz zainstalować OpenJDK, Make, Pythona 3 i Repo. Najnowsza gałąź Androida zawiera wstępnie skompilowane wersje OpenJDK, Make i Pythona 3, więc nie są wymagane żadne dodatkowe kroki instalacji. W sekcji poniżej znajdziesz instrukcje instalacji narzędzia Repo.
Instalowanie repozytorium
Aby zainstalować Repo, wykonaj te czynności:
- Pobierz aktualne informacje o pakiecie: - sudo apt-get update
- Aby zainstalować program uruchamiający Repo, uruchom to polecenie: - sudo apt-get install repo- Program uruchamiający Repo udostępnia skrypt w Pythonie, który inicjuje pobieranie i pobiera pełną wersję narzędzia Repo. - Jeśli się to uda, przejdź do kroku 4. 
- (opcjonalnie) Ręcznie zainstaluj Repo, używając tej serii poleceń: - export REPO=$(mktemp /tmp/repo.XXXXXXXXX) curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo gpg --recv-keys 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65 curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} ~/bin/repo- Pierwsze 3 polecenia konfigurują plik tymczasowy, pobierają do niego Repo i sprawdzają, czy podany klucz pasuje do wymaganego klucza. Jeśli te polecenia zostaną wykonane prawidłowo, ostatnie polecenie zainstaluje program uruchamiający Repo. 
- Sprawdź wersję programu uruchamiającego Repo: - repo version- Dane wyjściowe powinny wskazywać wersję 2.4 lub nowszą, np.: - repo launcher version 2.45
Pobieranie źródła Androida
Kod źródłowy Androida znajduje się w kolekcji repozytoriów Git hostowanych przez Google. Każde repozytorium Git zawiera całą historię źródeł Androida, w tym zmiany w kodzie źródłowym i daty ich wprowadzenia. Aby pobrać źródło Androida:
- Przejdź do katalogu głównego: - cd ~
- Utwórz w nim lokalny podkatalog roboczy: - mkdir aosp
- Przejdź do katalogu: - cd aosp
- Zainicjuj najnowszą gałąź kodu źródłowego repozytorium AOSP ( - android-latest-release):- repo init --partial-clone -b android-latest-release -u https://android.googlesource.com/platform/manifest
- Wpisz lub zaakceptuj dane logowania Git (nazwę, adres e-mail). 
- Zsynchronizuj kod źródłowy: - repo sync -c -j8- Jeśli podczas pobierania wystąpią problemy, zapoznaj się z artykułem Rozwiązywanie problemów z synchronizacją. 
Tworzenie kodu
Aby utworzyć kod:
- W katalogu roboczym uruchom skrypt - envsetup.sh, aby skonfigurować środowisko kompilacji:- source build/envsetup.sh
- Określ docelowy typ urządzenia, aby utworzyć kompilację za pomocą polecenia - lunch. Cel to permutacja urządzenia, np. konkretny model lub typ. Określ ten cel:- 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 ============================================
- Utwórz element docelowy: - m
Pierwsza kompilacja może potrwać kilka godzin. Kolejne kompilacje zajmują znacznie mniej czasu. Dane wyjściowe kompilacji pojawią się w $OUT_DIR.
Uruchom Cuttlefish
Cuttlefish to emulator Androida używany do testowania kompilacji.
- Aby pobrać, utworzyć i zainstalować pakiety hosta Debian, uruchom te polecenia: - sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curl- git clone https://github.com/google/android-cuttlefish- cd android-cuttlefish- for dir in base frontend; do pushd $dir # Install build dependencies sudo mk-build-deps -i dpkg-buildpackage -uc -us popd done- sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f- sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f- sudo usermod -aG kvm,cvdnetwork,render $USER- sudo reboot- Ponowne uruchomienie powoduje zainstalowanie dodatkowych modułów jądra i zastosowanie - udevzasad.
- Uruchom Cuttlefish: - launch_cvd --daemon
- Połącz się z urządzeniem Cuttlefish, otwierając w przeglądarce adres - https://localhost:8443. Wyświetli się wirtualne urządzenie z Androidem.
Wprowadź zmianę
Zaktualizuj kod źródłowy zgodnie z tym zestawem zmian.
- W katalogu głównym wyewidencjonowanego projektu ( - aosp/) przejdź do projektu Git- frameworks/native:- cd frameworks/native
- Aby rozpocząć projekt tymczasowy, użyj tego polecenia: - repo start PROJECT_NAME.
- Użyj edytora, aby edytować - SurfaceFlinger.cppw tej lokalizacji:- aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
- Znajdź ten wiersz: - void SurfaceFlinger::updateColorMatrixLocked() {
- Dodaj ten wiersz na początku pliku - updateColorMatrixLocked():- mClientColorMatrix = mat4(vec4{1.0f, 0.0f, 0.0f, 0.0f}, vec4{0.0f, -1.0f, 0.0f, 0.0f}, vec4{0.0f, 0.0f, -1.0f, 0.0f}, vec4{0.0f, 1.0f, 1.0f, 1.0f});
- Utwórz kod: - m
- Zaktualizuj kompilację na urządzeniu: - adb root- adb remount -R- adb root- adb sync- adb reboot
- Sprawdź, czy na wybranym urządzeniu widzisz zmianę koloru podobną do tej, która jest pokazana na rysunku 1. - Rysunek 1. Wygląd ekranu po zmianie koloru 
Rozwiązywanie problemów z testem
W tej części laboratorium wykorzystamy przykładowy test, który znajduje się w drzewie źródłowym i nie przechodzi.
Aby uruchomić, zdebugować i naprawić test, wykonaj te czynności:
- Uruchom: - atest DevCodelabTest- Test zakończy się niepowodzeniem. 
- Sprawdź zrzut stosu nieudanego testu: - STACKTRACE: java.lang.AssertionError at org.junit.Assert.fail(Assert.java:87) at org.junit.Assert.assertTrue(Assert.java:42) at org.junit.Assert.assertTrue(Assert.java:53) at android.test.example.devcodelab.DevCodelabTest.testHelloWorld(DevCodelabTest.java:29)- Ostatni wiersz śladu stosu pokazuje test, który się nie powiódł ( - testHelloWorld). Ten test znajduje się w pliku o nazwie- DevCodelabTest.java.
- Aby określić lokalizację testu do poprawienia, dodaj - WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/do ostatniego wiersza śladu stosu aż do nazwy pliku testowego włącznie. W takim przypadku- android.test.example.devcodelab.DevCodelabTestzmienia się w- WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java.
- Edytuj - platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.javai zastąp- Assert.assertTrue(false)tekstem- Assert.assertTrue(true)
- Ponownie uruchom test, aby sprawdzić, czy problem został rozwiązany: - atest DevCodelabTest
Prześlij kod do sprawdzenia
Repo upraszcza korzystanie z Gita, łącząc polecenia takie jak git clone, aby działać w wielu repozytoriach Git (lub projektach) jednocześnie.
Do sprawdzania kodu projektów w Git używaj internetowego systemu sprawdzania kodu Gerrit.
- Załóżmy, że zmiany zostały wprowadzone w projekcie - frameworks/native. Aby przesłać zmiany, uruchom te polecenia:- cd frameworks/native- repo start PROJECT_NAME.- git add .- git commit
- Wpisz ten komunikat zatwierdzenia: - Android PROJECT_NAME. change Test: manual atest
- Prześlij zmianę: - repo upload- Jeśli się uda, zobaczysz komunikat podobny do tego: - Upload project frameworks/native/ to remote branch android16-release: branch PROJECT_NAME. ( 1 commit, Wed Aug 7 09:32:33 2019 -0700): ff46b36d android PROJECT_NAME. change to https://android-review.googlesource.com/ (y/N)? y remote: Processing changes: refs: 1, new: 1, done remote: remote: SUCCESS remote: remote: https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432 android PROJECT_NAME. change [NEW] remote: To https://android-review.googlesource.com/platform/frameworks/native * [new branch] PROJECT_NAME. -> refs/for/android16-release
Wyświetlanie zmian w Gerrit
Aby wyświetlić zmiany w Gerrit, kliknij link w terminalu. Link jest podobny do tego:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Cofnij zmianę
Zwykle po przeprowadzeniu testów, sprawdzeniu i zatwierdzeniu przesyłasz zmianę w Gerrit i scalasz ją z repozytorium. Zamiast tego na potrzeby tego samouczka cofnij zmiany:
- W Gerrit kliknij Abandon (Porzuć). 
- Porzuć powiązaną gałąź tymczasową w katalogu projektu - frameworks/native(lub jego podkatalogach):- repo abandon PROJECT_NAME.
- Cofnij zmiany wprowadzone w pliku testowym. Ponieważ nie przeprowadzono testu zmiany w przypadku plików - repo start,- git commiti- repo upload, możesz zresetować sam plik. Zakładając, że jesteś w katalogu- aosp/platform_testing directory, użyj tego polecenia, aby zresetować plik:- git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java- git checkout .
W ten sposób zakończysz ćwiczenie dotyczące tworzenia platformy Android.
Pomoc
Jeśli podczas wykonywania tego samouczka napotkasz błędy, zgłoś je, korzystając z linku do narzędzia do śledzenia problemów u dołu dowolnej strony. Wysyłaj pytania do grupy android-building.
Wpisz ps -A | grep crosvm, aby sprawdzić, czy crosvm jest już uruchomiony. Jeśli crossvm jest uruchomiony, wpisz stop_cvd || true lub kill crosvm proces z identyfikatorem PID procesu.