Android 단말의 SW 은 Android App/Framework, AP Chipset 업체 BSP, Modem BSP, 폰 제조사 SW와 같이 4가지로 구성되어 있고 상호 밀접하게 결합되어 있다. (최근 2~3년 동안 구글에서는 각 개발 주체별 SW 종속성을 Treble project를 통해서 최소화하려고 노력하고 있다.)
- Android Framework/Apps : Google이 개발하는 Android Framework, Native Library, Android Run time, GMS App (e.g. Youtube, Playstore), Linux kernel 일부
- 퀄컴/MTK/삼성에서 개발하는 AP Chipset BSP: 하드웨어 관련된 추상화 레이어 (HAL/HIDL), 리눅스 커널 일부
- Modem BSP: LTE, 5G 와 같은 Modem chip용 BSP, AP와 통신을 위한 RIL interface
- 폰 제조사 (e.g. 삼성/LG) SW: Google App/Framework, AP Chipset BSP, Modem BSP를 Intergration 하고 제조사 고유 SW 기능을 추가한다. 수정 범위는 Kernel부터 App까지 모두 수정한다.
AP와 Modem BSP, 제조사 SW의 소스 코드는 비공개이며, Linux 커널과 구글의 AOSP의 소스는 모두 공개하고 있다. 본 게시글에서는 Google 의 AOSP 소스를 repo을 사용해서 다운로드하는 방법을 설명한다.
1. Repo 다운로드
AOSP를 다운로드는 하기 위해서는 Repo을 사용해야 한다. repo는 Android 환경에서 Git을 더 쉽게 사용할 수 있게 해주는 도구이고, 자세한 내용은 Repo 명령어 참조 및 Repo README를 참조할 수 있다. Repo는 Android site에서 curl을 통해서 다운로드하고 /bin 또는 ~/.local/bin 에 copy 하고 PATH를 설정해준다.
# Google Site에서 repo bin을 다운로드
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ./repo
# repo 에 실행 권한 부여
$ chmod a+rx repo
# sudo 권한이 있는 repo 를 /bin으로 copy
$ sudo cp repo /bin/local/repo
# sudo 권환이 없으면 ~/.local/bin 으로 copy
$ cp repo ~/.local/bin/repo
repo 명령어:
2. AOSP Q-OS 소스 다운로드
repo 를 다운로드 후 repo init 명령어를 통해서 원격의 repoisotry 정보를 다운로드 한다. repo init 명령어는 -u manifest URL 으로 parameter를 설정해야 하고, 특정 branch의 소스 코드만 다운로드하는 경우 -b <brnach 이름> 옵션을 줄 수 있다. AOSP의 manifest URL은 https//android.googlesource.com/platform/manifest이며 향후에도 URL는 변경하지 않는다. Branch 정보는 https://source.android.com/setup/start/build-numbers#source-code-tag 에서 확인할 수 있다. 구글이 AOSP를 배포할 때마다 branch와 tag를 만들고 해당 홈페이지에 branch/tag명을 게시한다. 현시점에서는 가장 최신 tag인 android-10.0.0_r36 를 다운로드한다. (Android 10 Q-OS 소스로 Pixel 2 와 PixelXL에 사용된 소스임)
$ repo init -u <manifest URL> -b <branch 이름>
# 최신의 repo 소스 다운로드
# Q-OS 최신 branch - https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds
$ repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r36
repo init 정상적으로 완료되었으면, 소스의 폴더에서 ./repo 가 생성되어 있을 것이다. 그 다음은 repo sync 명령어를 사용해서 네트워크 상에서 소스를 다운로드한다. repo sync의 옵션은 -j (멀티 쓰레드 사용) 사용해서 다운로드 속도를 향상할 수 있고, --no-tags 옵션(=tag 정보는 안 받음)으로 소스 파일의 크기를 줄일 수 있다. repo sync 시간은 네트워크 상태에서 따라서 짧게는 2시간에서 길게는 4시간 이상 소요된다. 소스가 다운로드가 완료되면 repo start <branch> --all 명령오 모든 git을 android-10.0.0_r36 branch 로 전환(check out)시킨다.
$ repo sync [옵션]
$ repo start android-10.0.0_r36 --all
# 소스 다운로드
$ repo sync -j4 --no-tags
# checkout branch
repo start android-10.0.0_r36 --all
AOSP 소스는 대략 100 GB 정도된다. /.repo 폴더가 47GB 정도로 가장 크고, 그 다음은 /prebuilt이다. ./.repo 폴더는 repository 구성을 위한 branch, tag, git 정보가 저장되어 있다. /prebuilt는 cross compile용 tool chain과 ndk, vndk, gdb, emulator와 같은 파일들이 저장되어 있다. 나머지 폴더는 java, c 등의 소스로 사이즈는 대략 20GB 정도되며 그 양은 정말로 방대하도 할 수 있다.
AOSP 소스를 다운로드 후 우분투에서 전체 빌드 방법은 다음에 게시할 예정이다.
<관련글>
[모바일/Android] - Android 11 (R-OS) Emulator에 설치하기
[모바일/Android] - Android 11 변경 기능 소개
[모바일/Android] - Android 10 (Q-OS) 소스 다운로드
[모바일/Android] - Ubuntu 20.04 에서 Android 10 빌드하기
댓글