Możesz pomóc w opracowaniu najszerzej instalowanego systemu operacyjnego w historii Ziemi. Tak, jesteś tutaj, aby rozpocząć karierę inżyniera platformy Android.
Chociaż ścieżka jest trudna, zespół Androida stara się upraszczać Twoją podróż w każdym wydaniu. Zespół codziennie wprowadza ulepszenia dzięki bezpośredniej pracy w projekcie Android Open Source Project (AOSP).
Więc usiądź wygodnie, uruchom terminal i stwórzmy historię.
Cele
Misja tego laboratorium kodowania jest dwojaka:
- Aby dać Ci mały przedsmak tego, jak wygląda praca programisty dla inżynierów Androida pracujących na platformie (systemie operacyjnym).
- Zachęć Cię do przesyłania opinii na temat narzędzi, dokumentacji i przepływu pracy programistów Androida.
Warunki wstępne
Lista wymagań dla tego ćwiczenia z kodowania pochodzi z wymagań dotyczących programowania platformy ogólnej ( AOSP ). Aby wziąć udział w tych ćwiczeniach z kodowania, skonfiguruj następujące elementy:
- Fizyczna stacja robocza Linux spełniająca wszystkie wymagania publiczne .
- Repo i konfiguracja Git wymagane do edycji bazy kodu Androida.
Środowisko
Zazwyczaj użytkownicy tworzą i rozwijają oprogramowanie bezpośrednio na stacji roboczej. Ponieważ możesz pracować na różnych terminalach, a wiele używanych poleceń jest specyficznych dla terminala, będziesz musiał uruchamiać je ponownie w każdej sesji terminala. W szczególności obejmują one polecenia source build/envsetup.sh
i lunch
.
Skonfiguruj stację roboczą
- Zainstaluj niezbędne pakiety na swojej stacji roboczej.
- Będąc nadal w terminalu, zainstaluj Repo i uzyskaj dane uwierzytelniające do wszystkich repozytoriów Git.
Zainicjuj i zsynchronizuj kod
Przejdź do swojego katalogu domowego:
cd ~
Utwórz w nim lokalny działający podkatalog:
mkdir aosp
Przejdź do katalogu:
cd aosp
Zainicjuj główną gałąź kodu źródłowego repozytorium AOSP (domyślnie):
repo init -u https://android.googlesource.com/platform/manifest
Wprowadź lub zaakceptuj swoje dane uwierzytelniające Git (imię i nazwisko, adres e-mail).
Zsynchronizuj kod źródłowy:
repo sync -j8
Początkowe synchronizacje mogą zająć godzinę lub dłużej.
Każde pobranie repo jest reprezentowane przez plik manifestu . Dopuszczalne jest posiadanie więcej niż 1 transakcji repo na raz, o ile istnieją one w różnych katalogach. Należy jednak pamiętać, że każde pobranie i kompilacja zużywają około 300 GB (i rośnie), więc albo ogranicz się do 2 pobrań repo, albo rozszerz swój system o dodatkowy dysk.
Zbuduj kod
Aby zbudować system Android, musisz wybrać typ urządzenia docelowego , które chcesz zbudować za pomocą polecenia lunch
. Celem jest permutacja urządzenia, na przykład określony model lub obudowa.
Urządzenie docelowe aosp_cf_x86_64_phone-userdebug
umożliwia zbudowanie wirtualnego urządzenia z systemem Android Cuttlefish do testowania bez urządzenia fizycznego.
Aby zamiast tego zbudować i zaktualizować urządzenie fizyczne, wybierz inny cel i postępuj zgodnie z instrukcjami dotyczącymi urządzeń flashujących .
Skonfiguruj środowisko do tworzenia urządzeń z systemem Android, uruchamiając następujące polecenie w katalogu głównym pobierania kodu źródłowego:
source build/envsetup.sh
Przekaż cel kompilacji do polecenia lunch w następujący sposób:
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
Utwórz kod z dowolnego miejsca w kasie, korzystając z:
m
Spodziewaj się, że pierwsza kompilacja zajmie wiele godzin. Kolejne kompilacje zajmują znacznie mniej czasu.
Uruchom Mątwy
Mątwa to emulator Androida używany do testowania kompilacji.
Jeśli nigdy nie instalowałeś mątwy, musisz zainstalować niezbędne zależności mątwy. W oknie terminala uruchom następujące polecenia, aby pobrać, skompilować i zainstalować pakiety Debiana hosta:
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 instalację dodatkowych modułów jądra i zastosowanie reguł
udev
.Uruchom mątwę:
launch_cvd --daemon</code>
Połącz się z urządzeniem mątwy, przechodząc do
https://localhost:8443
w przeglądarce internetowej. Zostaniesz powitany strumieniem wideo z właśnie zbudowanego urządzenia z systemem Android.
Dokonaj zmiany
Zaktualizuj kod źródłowy zgodnie z tą przykładową listą zmian .
Z katalogu głównego kasy (katalog
aosp/
) przejdź doframeworks/native
projektu Git:cd frameworks/native
Rozpocznij projekt tymczasowy za pomocą tego polecenia:
repo start <some-name> .
Edytuj
SurfaceFlinger.cpp
, aby uwzględnić aktualizacje z listy zmian w następującej lokalizacji:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
Znajdź tę linię:
postComposition();
Zamień te dwie linie na następującą:
postComposition(); 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}); updateColorMatrixLocked();
Zbuduj kod:
m
Zaktualizuj kompilację na urządzeniu:
adb root
adb remount
adb sync
adb reboot
Sprawdź, czy na wybranym urządzeniu widzisz zmianę koloru podobną do pokazanej na rysunku 1.
Rysunek 1. Wygląd ekranu po udanej zmianie koloru
Przetestuj swój kod
W tej części ćwiczeń z programowania wykorzystano przykładowy test znajdujący się w drzewie źródłowym, który zakończył się niepowodzeniem. Wykorzystuje to Atest do lokalnego uruchamiania testu i testowania kodu.
Aby skorzystać z testu, postępuj zgodnie z poniższą instrukcją:
Uruchomić:
atest DevCodelabTest
Test zakończy się niepowodzeniem. Aby to naprawić, znajdź kod źródłowy nieudanego testu:
atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
Więc spójrz tutaj
platform_testing/tests/example/devcodelab
Aby uzyskać plik do edycji, weź nazwę testu w
android.test.example.devcodelab.DevCodelabTest
i zamień.
z/
, aby uzyskać ten wynik:src/android/test/example/devcodelab/DevCodelabTest.java
Następnie edytuj
platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
zamienić
Assert.assertTrue(false)
z
Assert.assertTrue(true)
Uruchom test ponownie, aby sprawdzić, czy rozwiązałeś problem:
atest DevCodelabTest
Prześlij swój kod do sprawdzenia
Repo upraszcza korzystanie z Git poprzez łączenie poleceń, takich jak git clone
w celu jednoczesnej pracy w wielu repozytoriach Git (lub projektach).
Zobacz Narzędzia kontroli źródła , aby zapoznać się z przeglądem Git i Repo wraz z łączami do pełnej dokumentacji dotyczącej pracy z kodem źródłowym Androida. Zobacz repozytorium AOSP , aby uzyskać pełną listę projektów Git i poszczególnych projektów (ścieżek) dla gałęzi powiązanych z każdym projektem.
Do przeglądu kodu projektów w Git będziesz używać internetowego systemu przeglądu kodu Gerrit .
Zakładając, że dokonałeś zmian w
frameworks/native
, uruchom te polecenia, aby je przesłać:cd frameworks/native
repo start codelab .
git add .
git commit
W wiadomości o zatwierdzeniu wpisz:
Android codelab change Test: manual atest
Prześlij swoją zmianę:
repo upload
Jeśli się powiedzie, zobaczysz komunikat podobny do tego:
Upload project frameworks/native/ to remote branch main:
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/main
Zobacz swoją zmianę w Gerrit
Przejdź do linku wydrukowanego w terminalu, podobnego do tego:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
To kończy początkowe ćwiczenia z programowania dotyczące programowania platformy Android. Dalsze kroki można znaleźć w artykule Przesyłanie poprawek , a szczegółowe informacje na temat tworzenia systemu Android można znaleźć w dalszej części tej witryny.
Cofnij zmianę
Zwykle po testowaniu, po sprawdzeniu i zatwierdzeniu, przesyłasz swoją zmianę w Gerrit i łączysz ją z repozytorium.
Zamiast tego, na potrzeby tego ćwiczenia z programowania, przywróć listę zmian, klikając Porzuć w Gerrit.
Następnie porzuć powiązaną gałąź tymczasową w katalogu projektu frameworks/native
(lub jego podkatalogach):
repo abandon codelab .
Pamiętaj także o przywróceniu zmian dokonanych w pliku testowym. Ponieważ nie wykonałeś repo start
, git commit
i repo upload
zmiany, możesz zresetować sam plik. Zakładając, że jesteś w aosp/platform_testing directory
, użyj poniższego polecenia, aby zresetować plik:
git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .
W tym momencie gotowe! Dobra robota!
Sprowadź pomoc
Jeśli podczas zajęć z programowania napotkasz błędy, zgłoś je, korzystając z łącza do śledzenia problemów na dole dowolnej strony. Wyślij pytania do grupy zajmującej się budowaniem Androida .