Drzewo źródłowe Androida znajduje się w repozytorium Git hostowanym przez Google. Repozytorium Git zawiera metadane źródła systemu Android, w tym zmiany w źródle i datę ich wprowadzenia. Na tej stronie opisano sposób pobierania drzewa źródłowego dla określonej linii kodu systemu Android.
Aby rozpocząć od obrazu fabrycznego określonego urządzenia zamiast pobierania źródła, zobacz Wybieranie kompilacji urządzenia .
Inicjowanie klienta Repo
Po zainstalowaniu Repo Launcher skonfiguruj swojego klienta, aby uzyskać dostęp do repozytorium źródłowego Androida:
Utwórz pusty katalog do przechowywania plików roboczych. Nadaj mu dowolną nazwę:
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
Skonfiguruj Git za pomocą swojego prawdziwego imienia i nazwiska oraz adresu e-mail. Aby korzystać z narzędzia do sprawdzania kodu Gerrit, potrzebujesz adresu e-mail powiązanego z zarejestrowanym kontem Google . Upewnij się, że jest to aktywny adres, pod którym możesz odbierać wiadomości. Podana tutaj nazwa pojawia się w atrybucjach przesłanych przez Ciebie kodów.
git config --global user.name Your Name
git config --global user.email you@example.com
Uruchom
repo init
, aby uzyskać najnowszą wersję Repo z najnowszymi poprawkami błędów. Musisz podać adres URL manifestu, który określa, gdzie w katalogu roboczym znajdują się różne repozytoria zawarte w źródle systemu Android.repo init -u https://android.googlesource.com/platform/manifest
Aby sprawdzić gałąź główną:
repo init -u https://android.googlesource.com/platform/manifest -b master
Aby pobrać gałąź inną niż master , określ ją za pomocą opcji
-b
. Aby zapoznać się z listą gałęzi, zobacz Tagi i kompilacje kodu źródłowego .Dla Pythona 2
Dla Pythona 3
Jeśli pojawi się komunikat o błędzie „
/usr/bin/env 'python' no such file or directory
”, użyj jednego z następujących rozwiązań:Jeśli twój system Ubuntu 20.04.2 LTS to nowo zainstalowana (a nie zaktualizowana) wersja systemu Linux:
sudo ln -s /usr/bin/python3 /usr/bin/python
Jeśli używasz Git w wersji 2.19 lub nowszej, możesz określić
--partial-clone
podczas wykonywaniarepo init
. Wykorzystuje to możliwość częściowego klonowania Git do pobierania obiektów Git tylko wtedy, gdy jest to potrzebne, zamiast pobierania wszystkiego. Ponieważ używanie częściowych klonów oznacza, że wiele operacji musi komunikować się z serwerem, jeśli jesteś programistą i korzystasz z sieci o małym opóźnieniu, użyj następujących opcji:repo init -u https://android.googlesource.com/platform/manifest -b master --partial-clone --clone-filter=blob:limit=10M
Tylko dla systemu operacyjnego Windows: jeśli pojawi się komunikat o błędzie informujący, że nie można utworzyć dowiązań symbolicznych, co powoduje niepowodzenie
repo init
, zapoznaj się z dokumentacją dowiązań symbolicznych GitHub, aby je utworzyć lub włączyć ich obsługę. Informacje dla użytkowników innych niż administratorzy można znaleźć w sekcji Zezwalanie użytkownikom innym niż administratorzy na tworzenie dowiązań symbolicznych .
Pomyślna inicjalizacja kończy się komunikatem informującym, że Repo zostało zainicjowane w twoim katalogu roboczym. Twój katalog klienta zawiera teraz katalog .repo
, w którym przechowywane są pliki, takie jak manifest.
Pobieranie drzewa źródeł Androida
Aby pobrać drzewo źródłowe systemu Android do katalogu roboczego z repozytoriów określonych w domyślnym manifeście, uruchom:
repo sync
Aby przyspieszyć synchronizację, przekaż flagi -c
(bieżąca gałąź) i -j threadcount
:
repo sync -c -j8
Pliki źródłowe systemu Android są pobierane w katalogu roboczym pod nazwami projektów.
Aby stłumić wyjście, przekaż flagę -q
(cicho). Zobacz Repo Command Reference dla wszystkich opcji.
Korzystanie z uwierzytelniania
Domyślnie dostęp do kodu źródłowego Androida jest anonimowy. Aby chronić serwery przed nadmiernym użyciem, każdy adres IP jest powiązany z limitem.
Podczas udostępniania adresu IP innym użytkownikom (na przykład podczas uzyskiwania dostępu do repozytoriów źródłowych spoza zapory NAT) limity mogą zostać uruchomione nawet w przypadku regularnych wzorców użytkowania (na przykład, jeśli wielu użytkowników synchronizuje nowych klientów z tego samego adresu IP w obrębie krótki okres).
W takim przypadku możesz użyć uwierzytelnionego dostępu, który następnie wykorzystuje oddzielny limit dla każdego użytkownika, niezależnie od adresu IP.
Najpierw utwórz hasło za pomocą generatora haseł i postępuj zgodnie z instrukcjami na stronie generatora haseł.
Następnie wymuś uwierzytelniony dostęp przy użyciu identyfikatora URI manifestu https://android.googlesource.com/a/platform/manifest
. Zwróć uwagę, jak prefiks katalogu /a/
wyzwala obowiązkowe uwierzytelnianie. Możesz przekonwertować istniejącego klienta do korzystania z obowiązkowego uwierzytelniania za pomocą następującego polecenia:
repo init -u https://android.googlesource.com/a/platform/manifest
Rozwiązywanie problemów z siecią
Podczas pobierania zza serwera proxy (co jest powszechne w niektórych środowiskach korporacyjnych) może być konieczne jawne określenie serwera proxy, którego ma używać Repo:
export HTTP_PROXY=http://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port>
export HTTPS_PROXY=http://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port>
Rzadziej klienci Linuksa doświadczają problemów z łącznością, zacinając się w trakcie pobierania (zwykle podczas odbierania obiektów ). Dostosowanie ustawień stosu TCP/IP i użycie poleceń nierównoległych może poprawić sytuację. Aby zmodyfikować ustawienie TCP, musisz mieć uprawnienia administratora:
sudo sysctl -w net.ipv4.tcp_window_scaling=0
repo sync -j1
Korzystanie z lokalnego serwera lustrzanego
W przypadku korzystania z kilku klientów można utworzyć lokalny serwer lustrzany całej zawartości serwera i synchronizować klientów z tego serwera lustrzanego (co nie wymaga dostępu do sieci).
Te instrukcje zakładają, że serwer lustrzany jest tworzony w /usr/local/aosp/mirror
. Najpierw utwórz i zsynchronizuj sam serwer lustrzany. Zwróć uwagę na flagę --mirror
, którą możesz określić tylko podczas tworzenia nowego klienta:
mkdir -p /usr/local/aosp/mirror
cd /usr/local/aosp/mirror
repo init -u https://android.googlesource.com/mirror/manifest --mirror
repo sync
Po zsynchronizowaniu kopii lustrzanej można z niej tworzyć nowych klientów. Pamiętaj, że musisz podać ścieżkę bezwzględną:
mkdir -p /usr/local/aosp/master
cd /usr/local/aosp/master
repo init -u /usr/local/aosp/mirror/platform/manifest.git
repo sync
Na koniec, aby zsynchronizować klienta z serwerem, zsynchronizuj serwer lustrzany z serwerem, a następnie klienta z serwerem lustrzanym:
cd /usr/local/aosp/mirror
repo sync
cd /usr/local/aosp/master
repo sync
Możliwe jest przechowywanie kopii lustrzanej na serwerze LAN i uzyskiwanie do niej dostępu przez NFS, SSH lub Git. Możliwe jest również przechowywanie go na dysku wymiennym i przekazywanie tego dysku między użytkownikami lub maszynami.
Weryfikacja tagów Git
Załaduj następujący klucz publiczny do bazy danych kluczy GnuPG. Klucz służy do podpisywania tagów z adnotacjami, które reprezentują wydania.
gpg --import
Skopiuj i wklej poniższy klucz, a następnie wpisz EOF
( Ctrl-D ), aby zakończyć wprowadzanie i przetworzyć klucze.
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.2.2 (GNU/Linux) mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSV lFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw7 8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD u4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z wNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq /HMdOY7LJlHaqtXmZxXjjtw5Uc2QG8UY8aziU3IE9nTjSwCXeJnuyvoizl9/I1S5 jU5SA/9WwIps4SC84ielIXiGWEqq6i6/sk4I9q1YemZF2XVVKnmI1F4iCMtNKsR4 MGSa1gA8s4iQbsKNWPgp7M3a51JCVCu6l/8zTpA+uUGapw4tWCp4o0dpIvDPBEa9 b/aF/ygcR8mh5hgUfpF9IpXdknOsbKCvM9lSSfRciETykZc4wrRCVGhlIEFuZHJv aWQgT3BlbiBTb3VyY2UgUHJvamVjdCA8aW5pdGlhbC1jb250cmlidXRpb25AYW5k cm9pZC5jb20+iGAEExECACAFAknnWD4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX gAAKCRDorT+BmrEOeNr+AJ42Xy6tEW7r3KzrJxnRX8mij9z8tgCdFfQYiHpYngkI 2t09Ed+9Bm4gmEO5Ag0ESedYRBAIAKVW1JcMBWvV/0Bo9WiByJ9WJ5swMN36/vAl QN4mWRhfzDOk/Rosdb0csAO/l8Kz0gKQPOfObtyYjvI8JMC3rmi+LIvSUT9806Up hisyEmmHv6U8gUb/xHLIanXGxwhYzjgeuAXVCsv+EvoPIHbY4L/KvP5x+oCJIDbk C2b1TvVk9PryzmE4BPIQL/NtgR1oLWm/uWR9zRUFtBnE411aMAN3qnAHBBMZzKMX LWBGWE0znfRrnczI5p49i2YZJAjyX1P2WzmScK49CV82dzLo71MnrF6fj+Udtb5+ OgTg7Cow+8PRaTkJEW5Y2JIZpnRUq0CYxAmHYX79EMKHDSThf/8AAwUIAJPWsB/M pK+KMs/s3r6nJrnYLTfdZhtmQXimpoDMJg1zxmL8UfNUKiQZ6esoAWtDgpqt7Y7s KZ8laHRARonte394hidZzM5nb6hQvpPjt2OlPRsyqVxw4c/KsjADtAuKW9/d8phb N8bTyOJo856qg4oOEzKG9eeF7oaZTYBy33BTL0408sEBxiMior6b8LrZrAhkqDjA vUXRwm/fFKgpsOysxC6xi553CxBUCH2omNV6Ka1LNMwzSp9ILz8jEGqmUtkBszwo G1S8fXgE0Lq3cdDM/GJ4QXP/p6LiwNF99faDMTV3+2SAOGvytOX6KjKVzKOSsfJQ hN0DlsIw8hqJc0WISQQYEQIACQUCSedYRAIbDAAKCRDorT+BmrEOeCUOAJ9qmR0l EXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM= =Wi5D -----END PGP PUBLIC KEY BLOCK-----
Po zaimportowaniu kluczy możesz zweryfikować dowolny tag za pomocą:
git tag -v TAG_NAME
Uzyskaj zastrzeżone pliki binarne
AOSP nie może być używany wyłącznie z czystego kodu źródłowego i wymaga dodatkowych, zastrzeżonych bibliotek związanych ze sprzętem, takich jak sprzętowa akceleracja grafiki. Zobacz poniższe sekcje, aby uzyskać łącza do pobierania i pliki binarne urządzeń , aby uzyskać dodatkowe zasoby.
Pobierz zastrzeżone pliki binarne
Możesz pobrać oficjalne pliki binarne dla obsługiwanych urządzeń z uruchomionymi gałęziami wersji AOSP ze sterownikami Google . Te pliki binarne zapewniają dostęp do dodatkowych możliwości sprzętowych z kodem źródłowym innym niż open source. Aby zbudować główną gałąź AOSP, zamiast tego użyj Podglądu plików binarnych . Tworząc gałąź główną dla urządzenia, użyj plików binarnych dla najnowszej numerowanej wersji lub z najnowszą datą.
Wyodrębnij zastrzeżone pliki binarne
Każdy zestaw plików binarnych jest dostarczany jako samorozpakowujący się skrypt w skompresowanym archiwum. Rozpakuj każde archiwum, uruchom dołączony samorozpakowujący się skrypt z katalogu głównego drzewa źródłowego, a następnie potwierdź, że zgadzasz się na warunki załączonej umowy licencyjnej. Pliki binarne i odpowiadające im pliki makefile są instalowane w hierarchii vendor/
drzewa źródłowego.
Posprzątać
Aby upewnić się, że nowo zainstalowane pliki binarne zostaną prawidłowo uwzględnione po rozpakowaniu, usuń istniejące dane wyjściowe z poprzedniej kompilacji, używając:
make clobber