Pobieranie źródła

Drzewo źródeł 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ę wprowadzenia zmian. Na tej stronie opisano, jak pobrać drzewo źródłowe dla określonej linii kodu Androida.

Aby rozpocząć od obrazu fabrycznego dla konkretnego urządzenia zamiast pobierać źródło, zobacz Wybieranie wersji urządzenia .

Inicjowanie klienta Repo

Po zainstalowaniu programu Repo Launcher skonfiguruj klienta tak, aby miał 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, podając swoje prawdziwe imię i nazwisko oraz adres e-mail. Aby skorzystać 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. Nazwa, którą tu podasz, pojawi się w przypisach do przesłanego kodu.

    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 Androida.

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

    Aby sprawdzić główną gałąź:

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

    Aby sprawdzić gałąź inną niż główna , określ ją za pomocą -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 ”, skorzystaj z jednego z następujących rozwiązań:

    Jeśli Twój Ubuntu 20.04.2 LTS to nowo zainstalowana (a nie uaktualniona) wersja Linuksa:

    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 Gita do pobierania obiektów Git tylko wtedy, gdy są potrzebne, zamiast pobierać wszystko. Ponieważ korzystanie z częściowych klonów oznacza, że ​​wiele operacji musi komunikować się z serwerem, jeśli jesteś programistą i korzystasz z sieci o niskim opóźnieniu, użyj poniższych opcji:

    repo init -u https://android.googlesource.com/platform/manifest -b main --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 osób niebędących administratorami można znaleźć w sekcji 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ódeł Androida

Aby pobrać drzewo źródłowe Androida 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 Androida zostaną pobrane w katalogu roboczym pod nazwami projektów.

Aby wyłączyć wyświetlanie danych wyjściowych, należy przekazać flagę -q (quiet). Zobacz Informacje o poleceniach Repo, aby zapoznać się ze wszystkimi opcjami.

Korzystanie z uwierzytelniania

Domyślnie dostęp do kodu źródłowego Androida jest anonimowy. Aby chronić serwery przed nadmiernym obciążeniem, 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) przydziały mogą zostać uruchomione nawet w przypadku regularnego użytkowania (na przykład, jeśli wielu użytkowników synchronizuje nowych klientów z tego samego adresu IP w ramach krótki okres).

W takim przypadku możesz skorzystać z dostępu uwierzytelnionego, 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 manifestu URI https://android.googlesource.com/a/platform/manifest . Zwróć uwagę, jak przedrostek katalogu /a/ wyzwala obowiązkowe uwierzytelnianie. Możesz przekonwertować istniejącego klienta, aby korzystał 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 za pośrednictwem serwera proxy (co jest powszechne w niektórych środowiskach korporacyjnych) może być konieczne jawne określenie serwera proxy, którego będzie 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ą, zatrzymują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ć ustawienia TCP, musisz mieć uprawnienia roota:

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).

Instrukcje te zakładają, że kopia lustrzana jest utworzona 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

Po zsynchronizowaniu kopii lustrzanej możesz tworzyć z niej nowych klientów. Pamiętaj, że musisz podać ścieżkę bezwzględną:

mkdir -p /usr/local/aosp/main
cd /usr/local/aosp/main
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/main
repo sync

Możliwe jest przechowywanie kopii lustrzanej na serwerze LAN i uzyskiwanie do niej dostępu poprzez NFS, SSH lub Git. Możliwe jest również przechowywanie go na dysku wymiennym i przekazywanie go użytkownikom lub maszynom.

Weryfikacja tagów Git

Załaduj następujący klucz publiczny do swojej 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

Zdobądź zastrzeżone pliki binarne

AOSP nie może być używany wyłącznie z czystego kodu źródłowego i wymaga do uruchomienia dodatkowych, zastrzeżonych bibliotek związanych ze sprzętem, takich jak sprzętowa akceleracja grafiki. W poniższych sekcjach znajdują się łącza do pobierania i pliki binarne urządzeń w celu uzyskania dodatkowych zasobów.

Pobierz zastrzeżone pliki binarne

Możesz pobrać oficjalne pliki binarne dla obsługiwanych urządzeń z oznaczonymi gałęziami wydań AOSP ze sterowników 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, użyj zamiast tego podglądu plików binarnych . Budując główną gałąź 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 ma postać samorozpakowującego się skryptu 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.

Posprzątać

Aby mieć pewność, że nowo zainstalowane pliki binarne zostaną prawidłowo uwzględnione po rozpakowaniu, usuń istniejące dane wyjściowe dowolnej poprzedniej kompilacji, używając:

make clobber