본문 바로가기

AOSP

AOSP) 코드 초기화, 빌드, Cuttlefish 설치

AOSP 관련 공식문서에서 제공하는 코드 초기화, 빌드 방법, 구글에서 제공하는 에뮬레이터인 cuttlefish를 설치하는 법과 사용하는 법을 알아보겠습니다.
 

코드 초기화 및 동기화

cd ~
mkdir aosp
cd aosp
repo init -u https://android.googlesource.com/platform/manifest
repo sync -j8

aosp 프로젝트 코드를 클론하여 저장할 디렉토리를 생성하고 
 

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

repo 유틸리티로 repo 작업 공간을 초기화하는데 사용합니다. "https://android.googlesource.com/platform/manifest" url은 안드로이드 플랫폼의 매니패스트 파일이 위치한 git 저장소를 가리킵니다. 
해당 url를 통해 매니페스트 파일을 다운을 받고 매니페스트가 저장된 디렉토리를 repo 작업 공간으로 설정합니다.


repo sync -j8

매니페스트 파일을 다운 받은 이후 매니페스트 파일 기반으로 코드 동기화를 진행합니다.
j 옵션은 사용할 코어의 갯수입니다.

코드 빌드

source build/envsetup.sh
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
m

 

source build/envsetup.sh

위 명령어를 수행하여 안드로이드 기기의 빌드 환경을 설정할 수 있습니다.
예를 들어 명령어를 수행함으로써 빌드를 위한 유틸리티 함수를 활성화할 수 있습니다. 
해당 명령어 아래에서 사용되는 명령어인 "lunch", "m" 여기에 해당합니다.
추후에 “hmm” 명령어를 실행하여 출력된 안드로이드 빌드시스템의 함수들이 어떤 것이 있는지 알아보겠습니다.
또한, 환경 변수를 설정을 하여 빌드 도구와 스크립트의 올바른 경로를 설정할 수 있게 됩니다.


lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

여기서 "lunch" 명령어의 설명을 보면
 
product_name = aosp_cf_x86_64_phone
release_type   = trunk_staging
build_variant   = userdebug
 
명령어를 해석하자면 lunch 명령어를 통해 빌드 타겟을 결정해줍니다. 빌드 타겟의 이름은 aosp_cf_x86_64_phone이고 
릴리스 타입은 trunk_staging입니다. 개발 브랜치나 스테이징 브랜치를 나타냅니다. 빌드 변형은 userdebug입니다.

빌드 방식(build_variant)

user:           사용자 버전. 최종 사용자에게 배포할 준비가 된 빌드. 디버깅 도구와 로그가 포함X
userdebug: 사용자 버전이지만, 디버깅 기능이 활성화, 개발 및 테스트 목적
eng:             엔지니어링 버전, 디버깅 테스트를 위한 모든 기능 활성화

해당 명령어를 실행 후부터 cuttlefish를 실행하기 위한 명령어 “launch_cvd —daemon”가 활성화 됩니다.


m

아무 인수 없이 "m" 명령어를 실행하면, 전체 소스 트리에서 모든 모듈을 빌드하려고 시도합니다.

이외에도 ”mma”, “mmma” 와 같은 빌드를 위한 명령어가 더 있습니다 이것 또한 추후에 다뤄보겠습니다.
 

Cuttlefish 종속 항목 설치 및 실행

Cuttlefish 종속 항목 설치, Cuttlefish 설치

sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curl
git clone https://github.com/google/android-cuttlefish
cd android-cuttlefish
for dir in base frontend; do
pushd $dir
# Install build dependencies
sudo mk-build-deps -i
dpkg-buildpackage -uc -us
popd
done
sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f
sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f
sudo usermod -aG kvm,cvdnetwork,render $USER
sudo reboot

위에 코드는 공식문서에서 cuttlefish를 설치하기 위한 명령어입니다.
종속 항목을 설치하는 것을 확인할 수 있습니다. 

추가적으로 했던 것

그런데 저 같은 경우에는 위에 종속 항목 이외에도 추가적으로 유틸리티를 설치했어야 했습니다.
 
clang, libfmt-dev, libflags-dev, libjsoncpp-dev, libcurl4-openssl-dev, libgoogle-glog-dev, libgtest-dev, libssl-dev, libssl-dev, uuid-dev, libprotobuf-c-dev, libz3-dev, bazel
 
대부분의 유틸리티는 터미널에서 설치할 수 있었지만 어찌된 이유인지 이상하게 bazel 같은 경우에는 터미널 상에서 설치가 되지 않아 bazel 공식 사이트에서 설치를 하였습니다.
bazel 다운로드: https://bazel.build/install/ubuntu?hl=ko
 

Cuttlefish 실행

aosp 디렉토리 내에서 빌드 환경 설정, 빌드 타겟 설정, 빌드 이후..

launch_cvd --daemon

명령어를 통해서 Cuttlefish를 백그라운드 상에서 실행해줍니다.

만약 --daemon 옵션 없이 실행을 하게 된다면, cuttlefish의 상태를 콘솔 상에서 출력되게 됩니다.

 
이후 웹브라이저에서 https://localhost:8443로 이동하면 빌드했던 프로그램을 에뮬레이터 상에서 확인할 수 있습니다.


참고

https://source.android.com/docs/setup/start?hl=ko

 

Android 개발자 Codelab  |  Android 오픈소스 프로젝트  |  Android Open Source Project

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Android 개발자 Codelab 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Codelab을 통해 역사상 가장 광범위

source.android.com