Pobieranie źródła

Drzewo źródłowe Androida znajduje się w repozytorium Git hostowanym przez Google. Repozytorium Git zawiera metadane dla źródła systemu Android, w tym zmiany w źródle i czas wprowadzenia zmian. Ta strona opisuje, jak pobrać drzewo źródłowe dla określonej linii kodu Androida.

Aby rozpocząć od obrazu fabrycznego określonego urządzenia zamiast pobierać źródło, 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, używając swojego prawdziwego imienia i nazwiska oraz adresu e-mail. Aby korzystać z narzędzia do sprawdzania kodu Gerrit, potrzebujesz adresu e-mail połączonego z zarejestrowanym kontem Google . Upewnij się, że jest to adres na żywo, 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 określić 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łąź master:

    repo init -u https://android.googlesource.com/platform/manifest -b master
    

    Aby pobrać gałąź inną niż master , określ ją za pomocą -b . Aby uzyskać listę gałęzi, zobacz Tagi kodu źródłowego i kompilacje .

    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 Ubuntu 20.04.2 LTS jest nowo zainstalowaną (w porównaniu z uaktualnioną) wersją 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 . Dzięki temu korzysta się z możliwości częściowego klonowania Git, aby pobierać obiekty Git tylko wtedy, gdy są potrzebne, zamiast pobierać wszystko. Ponieważ używanie częściowych klonów oznacza, że ​​wiele operacji musi komunikować się z serwerem, skorzystaj z poniższych wskazówek, jeśli jesteś programistą i korzystasz z sieci z małymi opóźnieniami:

    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, powodując niepowodzenie repo init , zapoznaj się z dokumentacją GitHub Symbolic Links, aby je utworzyć lub włączyć ich obsługę. W przypadku osób niebędących administratorami zapoznaj się z sekcją Zezwalanie osobom niebędącym administratorami 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ódłowego 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 z katalogu roboczego pod ich nazwami projektów.

Aby pominąć wyjście, przekaż flagę -q (cichy). Wszystkie opcje znajdują się w podręczniku Repo Command Reference .

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 współdzielenia adresu IP z innymi użytkownikami (na przykład podczas uzyskiwania dostępu do repozytoriów źródłowych spoza zapory NAT), przydziały 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 ramach jednego krótki okres).

W takim przypadku możesz użyć dostępu uwierzytelnionego, który następnie używa oddzielnego przydziału 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 za pomocą identyfikatora URI manifestu https://android.googlesource.com/a/platform/manifest . Zwróć uwagę, jak prefiks katalogu /a/ wyzwala obowiązkowe uwierzytelnianie. Istniejącego klienta można przekonwertować tak, aby używał uwierzytelniania obowiązkowego 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 wyraźne 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 Linuxa doświadczają problemów z łącznością, utykając w połowie pobierania (zwykle podczas odbierania obiektów ). Dostosowanie ustawień stosu TCP/IP i użycie nierównoległych poleceń może poprawić sytuację. Aby zmodyfikować ustawienia TCP, musisz mieć uprawnienia administratora:

sudo sysctl -w net.ipv4.tcp_window_scaling=0
repo sync -j1

Korzystanie z lokalnego lustra

W przypadku korzystania z kilku klientów, zwłaszcza w sytuacjach, gdy przepustowość jest ograniczona, lepiej jest utworzyć lokalną kopię lustrzaną całej zawartości serwera i synchronizować klientów z tego dublowania (co nie wymaga dostępu do sieci). Pobieranie pełnego obrazu lustrzanego jest mniejsze niż pobranie dwóch klientów i zawiera więcej informacji.

Te instrukcje zakładają, że serwer lustrzany jest tworzony w /usr/local/aosp/mirror . Najpierw utwórz i zsynchronizuj samo lustro. 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

Gdy dublowanie jest zsynchronizowane, możesz z niego tworzyć nowych klientów. Pamiętaj, że musisz określić ś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 dublowanie z serwerem, a następnie klienta z dublowaniem:

cd /usr/local/aosp/mirror
repo sync
cd /usr/local/aosp/master
repo sync

Możliwe jest przechowywanie kopii lustrzanej na serwerze LAN i dostęp do niej przez NFS, SSH lub Git. Możliwe jest również przechowywanie go na dysku wymiennym i przekazywanie go między użytkownikami lub maszynami.

Weryfikowanie 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 tylko z czystego kodu źródłowego i wymaga do uruchomienia dodatkowych, własnościowych bibliotek sprzętowych, takich jak sprzętowa akceleracja grafiki. Zobacz poniższe sekcje, aby uzyskać łącza do pobierania i pliki binarne urządzenia , aby uzyskać dodatkowe zasoby.

Pobierz zastrzeżone pliki binarne

Oficjalne pliki binarne dla obsługiwanych urządzeń z oznaczonymi gałęziami wersji AOSP można pobrać ze sterowników Google . Te pliki binarne zapewniają dostęp do dodatkowych możliwości sprzętowych z kodem innym niż open source. Aby zbudować główną gałąź AOSP, użyj podglądu plików binarnych. Tworząc główną gałąź dla urządzenia, użyj plików binarnych dla najnowszego wydania numerowanego 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ę z warunkami załączonej umowy licencyjnej. Pliki binarne i odpowiadające im pliki makefile są instalowane w vendor/ hierarchii drzewa źródłowego.

Sprzątać

Aby upewnić się, że nowo zainstalowane pliki binarne są poprawnie brane pod uwagę po wyodrębnieniu, usuń istniejące dane wyjściowe poprzedniej kompilacji, używając:

make clobber