Z tego samouczka dowiesz się, jak po raz pierwszy tworzyć aplikacje na Androida.
Konfigurowanie środowiska programistycznego na Androida
Zanim pobierzesz i skompilujesz android-latest-release
gałąź 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 fontconfig
Instalowanie 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
udev
zasad.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 Gitframeworks/native
:cd frameworks/native
Aby rozpocząć projekt tymczasowy, użyj tego polecenia:
repo start <some-name> .
Użyj edytora, aby edytować
SurfaceFlinger.cpp
w 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 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.DevCodelabTest
zmienia 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.java
i 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/native
repo start codelab .
git add .
git commit
Wpisz ten komunikat zatwierdzenia:
Android codelab 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 codelab ( 1 commit, Wed Aug 7 09:32:33 2019 -0700): ff46b36d android codelab 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 codelab change [NEW] remote: To https://android-review.googlesource.com/platform/frameworks/native * [new branch] codelab -> 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 codelab .
Cofnij zmiany wprowadzone w pliku testowym. Ponieważ nie przeprowadzono testu zmiany w przypadku plików
repo start
,git commit
irepo 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.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.