Pobieranie źródła

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:

  1. Utwórz pusty katalog do przechowywania plików roboczych. Nadaj mu dowolną nazwę:

    mkdir WORKING_DIRECTORY
    cd WORKING_DIRECTORY
    
  2. 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
    
  3. 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 wykonywania repo 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