Skip to content

Instantly share code, notes, and snippets.

@johlim
Forked from chitacan/AOSP_vagrant.md
Created October 21, 2017 16:16
Show Gist options
  • Save johlim/bd1475790268072d48778db404720cfc to your computer and use it in GitHub Desktop.
Save johlim/bd1475790268072d48778db404720cfc to your computer and use it in GitHub Desktop.
AOSP 개발환경을 vagrant를 활용해 좀 더 손쉽게 꾸려보자

개발환경 꾸리기

AOSP(Android Open Source Project) 개발환경을 vagrant 를 활용해 좀 더 편하게 꾸려보자

진짜?

vagrant를 활용하면 다음과 같은 명령어 만으로도 AOSP 빌드환경을 갖춘 가상머신을 생성하고 빌드를 진행할 수 있습니다.

$ wget http://goo.gl/OnTHI4 -O Vagrantfile
$ vagrant up
$ vagrant ssh
vagrant$ cd workspace/android-4.4_r1/
vagrant$ repo sync
vagrant$ . build/envsetup
vagrant$ lunch aosp_hammerhead-eng
vagrant$ make -j8 updatepackage

아, 필요한 것들이 있습니다.

  • Virtualbox 가 설치되어 있어야합니다.
  • Vagrant 도 설치되어 있어야 합니다.
  • 충분한 시간
    • vagrant box 다운로드(dropbox 에 호스팅된 1.3GB 정도의 파일을 다운로드 받아야 합니다.)
    • AOSP 다운로드(아시다시피 상당한 시간이 필요합니다.)

위에서 나온 명령어를 하나씩 살펴봅시다.

vagrant 설치

vagrant 는 가상머신의 설정과정과 소프트웨어 설치과정을 자동화 할 수 있는 도구입니다. windows, OS X, Linux 를 모두 지원합니다.

vagrant 를 활용해 가상머신을 설치하기 위해서는 가상머신의 정보를 담은 Vagrantfile 과 운영체제의 정보를 담은 *.box 파일이 필요합니다.

wget http://goo.gl/OnTHI4 -O Vagrantfile

위 명령어는 http://goo.gl/OnTHI4 의 파일을 Vagrantfile로 저장합니다.

http://goo.gl/OnTHI4 는 사실 https://gist.github.com/chitacan/f8f8c2702c367df515de 의 Raw 링크 입니다.

Vagrantfile 에는 가상머신을 실행하는데 사용할 box의 이름box가 호스팅되어 있는 url 이 선언되어 있습니다. 이는 다음에 살펴볼 vagrant up 명령어를 실행할 때 사용됩니다.

robust-android-v1.box

Vagrantfile 에 선언된 robust-android-v1 box에는 Ubuntu 12.04 server 64 bit 에 AOSP 빌드환경과 여러 도구들을 미리 설치해 두었습니다.

  • JDK, git, python, repo 등등
  • 그 외에도 tmux, node.js, vim 플러그인(Vundle)
  • workspace/android-4.4_r1 디렉토리에 android-4.4_r1 브랜치를 checkout 할 수 있도록 설정해 놓았습니다.

가상머신에서 사용할 리소스 설정

Vagrantfile이 부분 을 수정해 가상머신에서 사용할 하드웨어 리소스를 설정할 수 있습니다. 예를 들어 가상머신에 12GB 의 메모리, 4개의 CPU 를 할당하고 각 CPU의 80%만 사용하고자 한다면 아래와 같이 수정하면 되겠습니다.

config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", (1024*12).to_s]
    vb.customize ["modifyvm", :id, "--cpus", "4"]
    vb.customize ["modifyvm", :id, "--cpuexecutioncap", "80"]
end

vagrant up

Vagrantfile 이 있는 디렉토리에서 vagrant up 명령을 실행하면, Vagrantfile 의 내용을 읽어 가상머신을 실행합니다.

Vagrantfileconfig.vm.box 이름에 해당하는 box가 없는 경우, 자동으로 config.vm.box_url에서 box를 가져와 설치해 줍니다.

vagrant ssh

vagrant로 실행된 가상머신에 ssh 로 접속할 수 있습니다.

vagrant의 다른 명령어들은 http://docs.vagrantup.com/v2/cli/index.html 에서 확인할 수 있습니다.

cd workspace/android-4.4_r1/, repo sync

robust-android-v1 box에는 android-4.4_r1 를 바로 다운로드 받을 수 있도록 세팅해 놓았기 때문에 다른 환경설정이 필요없이 바로 repo sync 명렁어로 android-4.4_r1 브랜치에 해당하는 소스를 다운로드 받을 수 있습니다.

. build/envsetup

build/envsetup 스크립트를 실행하면 AOSP 를 개발할 때 유용하게 사용할 수 있는 함수들이 설정되는데 이 함수들에 대한 설명은 hmm 명령으로 살펴볼 수 있습니다.

vagrant$ . build/envsetup
vagrant$ hmm
Invoke ". build/envsetup.sh" from your shell to add the following functions to your environment:
- lunch:   lunch <product_name>-<build_variant>
- tapas:   tapas [<App1> <App2> ...] [arm|x86|mips|armv5] [eng|userdebug|user]
- croot:   Changes directory to the top of the tree.
- m:       Makes from the top of the tree.
- mm:      Builds all of the modules in the current directory, but not their dependencies.
- mmm:     Builds all of the modules in the supplied directories, but not their dependencies.
- mma:     Builds all of the modules in the current directory, and their dependencies.
- mmma:    Builds all of the modules in the supplied directories, and their dependencies.
- cgrep:   Greps on all local C/C++ files.
- jgrep:   Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir:   Go to the directory containing a file.

Look at the source to view more functions. The complete list is:
...

lunch aosp_hammerhead-eng

넥서스 5(hammerhead)를 타겟으로 설정합니다.

make -j8 updatepackage

robust-android-v1 box에는 빌드에 필요한 것들이 모두 설치되어 있기 때문에 별다른 설정없이 바로 빌드가 가능합니다.

updatepackage 타겟은 AOSP 빌드후 단말 업로드에 필요한 파일들(boot.img, ramdisk.img, system.img, userdata.img, recovery.img 등) 을 압축해 줍니다.

vagrant로 설정된 가상머신의 /vagrant 디렉토리는 호스트 머신의 Vagrantfile이 위치한 디렉토리가 마운트 됩니다. 이를 잘 활용하면 vagrant로 시작된 가상머신과 호스트 머신간에 파일을 손쉽게 교환할 수 있습니다.

단말에 업로드

vagrant$ cp out/target/product/hammerhead/full_hammerhead-img-eng.vagrant.zip /vagrant/
vagrant$ exit
$ adb reboot bootloader
$ fastboot -w update full_hammerhead-img-eng.vagrant.zip
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment