소스 다운로드

Android 소스 트리는 Google에서 호스팅하는 Git 저장소에 있습니다. Git 저장소에는 소스 변경사항 및 변경 시점이 포함된 Android 소스 메타데이터가 포함됩니다. 이 페이지에서는 특정 Android 코드 라인의 소스 트리를 다운로드하는 방법을 설명합니다.

소스를 다운로드하는 대신 특정 기기의 공장 출고 시 이미지로 시작하려면 기기 빌드 선택을 참고하세요.

Repo 클라이언트 초기화

Repo 런처를 설치한 후 Android 소스 저장소에 액세스하도록 클라이언트를 설정합니다.

  1. 작업 파일을 보관할 빈 디렉터리를 만듭니다. 다음처럼 원하는 이름을 지정합니다.

    mkdir WORKING_DIRECTORY
    cd WORKING_DIRECTORY
    
  2. Git을 실명과 이메일 주소로 구성합니다. Gerrit 코드 검토 도구를 사용하려면 등록된 Google 계정과 연결된 이메일 주소가 필요합니다. 메시지를 수신할 수 있는 실제 주소인지 확인합니다. 여기서 제공하는 이름은 코드 제출에 대한 속성에 표시됩니다.

    git config --global user.name Your Name
    git config --global user.email you@example.com
    
  3. repo init를 실행하여 최근 버그가 수정된 최신 버전의 Repo를 다운로드합니다. Android 소스에 포함된 다양한 저장소가 작업 디렉터리 내에 배치되는 위치를 지정하는 매니페스트의 URL을 지정해야 합니다.

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

    다음으로 마스터 분기를 확인합니다.

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

    마스터 이외의 브랜치를 확인하려면 -b로 지정합니다. 분기 목록은 소스 코드 태그 및 빌드를 참고하세요.

    Python 2의 경우

    Python3의 경우

    '/usr/bin/env 'python' no such file or directory' 오류 메시지가 표시되면 다음 해결 방법 중 하나를 사용합니다.

    Ubuntu 20.04.2 LTS가 새로 설치(업그레이드 아님)된 Linux 버전이면 다음을 실행합니다.

    sudo ln -s /usr/bin/python3 /usr/bin/python

    Git 버전 2.19 이상을 사용하는 경우 repo init를 실행할 때 --partial-clone을 지정할 수 있습니다. 이를 통해 Git의 부분 클론 기능을 사용하여 모든 항목을 다운로드하지 않고 필요할 때 Git 객체만 다운로드할 수 있습니다. 부분 클론을 사용하면 많은 작업이 서버와 통신해야 하므로 지연 시간이 짧은 네트워크를 사용하는 개발자라면 다음을 사용하세요.

    repo init -u https://android.googlesource.com/platform/manifest -b master --partial-clone --clone-filter=blob:limit=10M
    

    Windows OS에만 적용: 심볼릭 링크를 만들 수 없다는 오류 메시지가 표시되어 repo init가 실패하면 GitHub 심볼릭 링크 문서를 참고하여 만들거나 심볼릭 링크 지원을 사용 설정합니다. 관리자가 아닌 경우 관리자가 아닌 사용자가 심볼릭 링크를 만들도록 허용 섹션을 참고하세요.

초기화가 완료되면 작업 디렉터리에 저장소가 초기화되었다는 메시지가 표시됩니다. 이제 클라이언트 디렉터리에 매니페스트와 같은 파일이 보관되는 .repo 디렉터리가 포함됩니다.

Android 소스 트리 다운로드

기본 매니페스트에 지정된 저장소에서 Android 소스 트리를 작업 디렉터리로 다운로드하려면 다음을 실행합니다.

repo sync

동기화 속도를 높이려면 -c(현재 분기) 및 -jthreadcount 플래그를 전달합니다.

repo sync -c -j8

Android 소스 파일은 작업 디렉터리의 프로젝트 이름 아래에 다운로드됩니다.

출력을 표시하지 않으려면 -q(quiet) 플래그를 전달합니다. 모든 옵션은 Repo 명령어 참조를 참고하세요.

인증 사용

기본적으로 Android 소스 코드는 익명으로 액세스할 수 있습니다. 서버를 과도하게 사용하지 않도록 보호하기 위해 각 IP 주소는 할당량과 연결됩니다.

다른 사용자와 IP 주소를 공유하는 경우(예: NAT 방화벽을 벗어나 소스 저장소에 액세스하는 경우) 정기적인 사용 패턴에 대해서도 할당량이 트리거됩니다(예: 많은 사용자가 같은 IP 주소의 새 클라이언트를 짧은 기간 동안 동기화하는 경우).

이 경우 IP 주소와 상관없이 사용자별로 분리된 할당량을 사용하는 인증 액세스를 사용할 수 있습니다.

먼저 비밀번호 생성기를 사용하여 비밀번호를 만들고 비밀번호 생성기 페이지의 안내를 따릅니다.

그런 다음 매니페스트 URI https://android.googlesource.com/a/platform/manifest를 사용하여 강제로 액세스를 인증합니다. /a/ 디렉터리 접두사가 필수 인증을 실행하는 방식에 주목하세요. 다음 명령어를 사용하여 기존 클라이언트를 필수 인증을 사용하도록 변환할 수 있습니다.

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

네트워크 문제 해결

프록시 뒤에서 다운로드할 때(일부 회사 환경에서 자주 사용됨) 저장소에서 사용할 프록시를 명시적으로 지정해야 할 수도 있습니다.

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>

드물게 Linux 클라이언트의 경우 연결 문제가 발생하여 다운로드가 중간에 중단되는 경우가 있습니다(특히 객체 수신 중에). TCP/IP 스택의 설정을 조정하고 비 병렬 명령어를 사용하면 상황을 개선할 수 있습니다. TCP 설정을 수정하려면 루트 액세스 권한이 있어야 합니다.

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

로컬 미러링 사용

여러 클라이언트를 사용하는 경우 전체 서버 콘텐츠의 로컬 미러를 작성하고 작성한 미러에서 클라이언트를 동기화할 수 있습니다(네트워크 액세스가 필요하지 않음).

이 안내에서는 미러가 /usr/local/aosp/mirror에서 생성되었다고 가정합니다. 먼저 미러를 만들고 동기화합니다. 새 클라이언트를 만들 때만 지정할 수 있는 --mirror 플래그를 확인하세요.

mkdir -p /usr/local/aosp/mirror
cd /usr/local/aosp/mirror
repo init -u https://android.googlesource.com/mirror/manifest --mirror
repo sync

미러가 동기화되면 새 클라이언트를 생성할 수 있습니다. 절대 경로를 지정해야 합니다.

mkdir -p /usr/local/aosp/master
cd /usr/local/aosp/master
repo init -u /usr/local/aosp/mirror/platform/manifest.git
repo sync

마지막으로 서버와 클라이언트를 동기화하려면 서버와 미러를 동기화한 다음 클라이언트를 미러와 동기화합니다.

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

LAN 서버에 미러를 저장하고 NFS, SSH 또는 Git을 통해 액세스할 수 있습니다. 또한 이동식 드라이브에 저장하고 사용자나 컴퓨터 간에 드라이브를 전달할 수도 있습니다.

Git 태그 확인

다음 공개 키를 GnuPG 키 데이터베이스에 로드합니다. 키는 출시를 나타내는 주석이 달린 태그에 서명하는 데 사용됩니다.

gpg --import

아래 키를 복사하여 붙여넣은 다음 EOF(Ctrl-D)를 입력하여 입력을 끝내고 키를 처리합니다.

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

키를 가져온 후 다음을 사용하여 태그를 확인할 수 있습니다.

git tag -v TAG_NAME

독점 바이너리 확보

AOSP는 순수 소스 코드만 가지고는 사용할 수 없으며 하드웨어 그래픽 가속의 경우와 같이 하드웨어 관련 독점 라이브러리가 추가로 있어야 실행할 수 있습니다. 추가 리소스는 다운로드 링크 및 기기 바이너리 섹션을 참조하세요.

독점 바이너리 다운로드

Google 드라이버에서 태그가 지정된 AOSP 출시 분기를 실행하는 지원 기기의 정식 바이너리를 다운로드할 수 있습니다. 이러한 바이너리는 공개되지 않은 소스 코드로 추가 하드웨어 기능에 대한 액세스를 제공합니다. AOSP 마스터 분기를 빌드하려면 대신 바이너리 미리보기를 사용하세요. 기기의 마스터 분기를 빌드할 때 가장 최근에 번호가 매겨진 출시의 바이너리나 최근 날짜의 바이너리를 사용합니다.

독점 바이너리 추출

각 바이너리 모음은 압축된 아카이브에서 자동 압축 해제 스크립트로 제공됩니다. 각 아카이브의 압축을 풀고 소스 트리의 루트에서 포함된 자동 압축 해제 스크립트를 실행한 후 동봉된 라이선스 계약 조건에 동의하는지 확인합니다. 바이너리 및 일치하는 makefile은 소스 트리의 vendor/ 계층 구조에 설치됩니다.

정리

압축을 해제한 후 새로 설치된 바이너리가 제대로 추출되었는지 확인하려면 다음을 사용하여 이전 빌드의 기존 출력을 삭제하세요.

make clobber