HOME > android > tips

Ubuntu에서 Android10 소스 다운로드 및 빌드

By JS | 04 Jan 2018

안드로이드 소스는 많은 git project들로 이루어져있습니다. Full Build를 하려면 우리는 각각의 git project를 다운받아서 폴더별로 정리를 한 뒤에 Build를 해야 하는데요. 매우 귀찮은 작업이기 때문에, Google에서는 REPO라는 툴을 만들어 이를 이용하여 쉽게 source를 관리하고 있습니다.

다운받는 과정은 AOSP Download Guide 에 자세히 나와있습니다. 순서대로 해보겠습니다.

최근 Android10 이 공개되었습니다.(Android Q의 네이밍 규칙이 숫자로 변경되어 공식적인 명칭은 Android10) 최신 소스를 다운받고 빌드해보겠습니다.

REPO 설치

Repo는 script로 구현된 Tool입니다. 다운만 받아주면 되요. 먼저 ~/bin 폴더를 생성하고 PATH에 등록해주세요

$ mkdir ~/bin
$ PATH=~/bin:$PATH

Curl 명령어로 repo tool을 ~/bin폴더에 다운받습니다. 그리고 repo에 실행권한을 주었습니다.

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

AOSP 다운로드

Repo를 이용하여 소스를 받기 전에 폴더를 먼저 생성합니다. 적당한 곳에 생성하시고 생성한 폴더 안으로 이동해주세요.

$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY

그리고 Repo는 git을 이용하기 때문에 git을 설치하셔야 합니다. git을 설치하셨으면 기본적인 설정인 user name과 user email을 등록하셔야 합니다. 자신의 이름과 email을 입력해주세요.

$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"

이제 준비는 모두 되었고, Repo로 AOSP의 어떤 version을 받을지 설정을 해야 합니다. 아래 명령어에서 옵션 -b android-10.0.0_r2android-10.0.0_r2 브랜치 소스를 받겠다는 의미입니다. 이를 입력하지 않으면 최신 소스를 받는다고합니다.

(이 글을 쓰는 19년 9월, 안드로이드 최신 버전은 Android10 입니다.)

다른 브랜치 정보들은 Source Code Tags and Builds에서 확인할 수 있습니다.

$ repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r2

다운받을 브랜치를 설정하였으면 아래 명령어로 소스를 다운받을 수 있습니다. 소스 용량도 크고, 다운 속도도 느려서 다 받는데 오래 걸립니다.

$ repo sync

파일 확인

repo init ~을 하면 화면에 아래처럼 init되었다고 나옵니다.

Get https://gerrit.googlesource.com/git-repo/clone.bundle
Get https://gerrit.googlesource.com/git-repo
Get https://android.googlesource.com/platform/manifest
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (22) The requested URL returned error: 404 Not Found
Server does not provide clone.bundle; ignoring.
remote: Counting objects: 598, done        
remote: Total 6773 (delta 2631), reused 6773 (delta 2631)        
Receiving objects: 100% (6773/6773), 2.90 MiB | 1.08 MiB/s, done.
Resolving deltas: 100% (2631/2631), done.
From https://android.googlesource.com/platform/manifest

.........

If you want to change this, please re-run 'repo init' with --config-name

repo has been initialized in /home/desktop/work

repo sync하여 아래처럼 나오면 잘 받고있는 중입니다 .

Fetching project platform/packages/apps/Nfc
Fetching project platform/external/fio
Fetching project platform/external/google-api-services-storage
Fetching project platform/prebuilts/abi-dumps/vndk
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0

다운로드가 완료되면 아래처럼 소스가 보입니다.

~/WORKING_DIRECTORY$ ls
Android.bp  bionic    bootstrap.bash  compatibility  dalvik      development  docs      frameworks  kernel   libnativehelper  packages  platform_testing  sdk     test       tools
art         bootable  build           cts            developers  device       external  hardware    libcore  Makefile         pdk       prebuilts         system  toolchain

빌드

다운로드 받은 프로젝트에서 다음 명령어로 빌드 관련 의존성을 설정합니다.

$ source build/envsetup.sh

다음 명령어로 어떤 타입의 디바이스 또는 아키텍쳐를 빌드할지 선택합니다.

$ lunch
You're building on Linux
Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_mips-eng
     4. aosp_mips64-eng
     5. aosp_x86-eng
     6. aosp_x86_64-eng
....

Which would you like? [aosp_arm-eng] 6

다음 명령어로 전체 빌드를 할 수 있습니다. -jN은 빌드할 때 사용할 쓰레드 개수를 설정하는 옵션입니다.

$ m -j8

실행

빌드가 완료되었으면 만들어진 이미지로 안드로이드를 실행할 수 있습니다. 다음 명령어를 입력하시면 안드로이드가 실행됩니다.

$ emulator

위에서 환경설정할 때 QEMU도 설정되었기 때문에 간단한 명령어로 실행이 가능한 것입니다. 개별적으로 QEMU를 설치했다면 실행 명령어에 이미지 위치를 옵션으로 주어 실행할 수도 있습니다.

emulator

참고