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 updateAby zainstalować program uruchamiający Repo, uruchom to polecenie:
sudo apt-get install repoProgram 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/repoPierwsze 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 versionDane 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 aospPrzejdź do katalogu:
cd aospZainicjuj 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/manifestWpisz lub zaakceptuj dane logowania Git (nazwę, adres e-mail).
Zsynchronizuj kod źródłowy:
repo sync -c -j8Jeś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.shOkreś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-userdebugPowinien 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 curlgit clone https://github.com/google/android-cuttlefishcd android-cuttlefishfor dir in base frontend; do pushd $dir # Install build dependencies sudo mk-build-deps -i dpkg-buildpackage -uc -us popd donesudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -fsudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -fsudo usermod -aG kvm,cvdnetwork,render $USERsudo rebootPonowne uruchomienie powoduje zainstalowanie dodatkowych modułów jądra i zastosowanie
udevzasad.Uruchom Cuttlefish:
launch_cvd --daemonPołą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 Gitframeworks/native:cd frameworks/nativeAby 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.cppZnajdź 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:
mZaktualizuj kompilację na urządzeniu:
adb rootadb remount -Radb rootadb syncadb rebootSprawdź, 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 DevCodelabTestTest 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 nazwieDevCodelabTest.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 przypadkuandroid.test.example.devcodelab.DevCodelabTestzmienia się wWORKING_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ąpAssert.assertTrue(false)tekstemAssert.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/nativerepo start PROJECT_NAME.git add .git commitWpisz ten komunikat zatwierdzenia:
Android PROJECT_NAME. change Test: manual atestPrześlij zmianę:
repo uploadJeś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 commitirepo upload, możesz zresetować sam plik. Zakładając, że jesteś w kataloguaosp/platform_testing directory, użyj tego polecenia, aby zresetować plik:git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.javagit 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.