안드로이드 프레임워크 프로그래밍(2) [안드로이드 커널 다운로드 및 컴파일]

 지난 포스팅에서는 안드로이드 프레임워크 환경 구축에 대해 알아보았습니다. 이번에는 안드로이드 커널을 다운로드한 후 이를 컴파일하는 과정을 진행해 보도록 합니다.


 Ubuntu 12.04 환경에서 Terminal을 통해 안드로이드 커널을 구축해 보도록 하겠습니다. Terminal은 Ctrl+Alt+T 버튼의 조합으로 실행하실 수 있습니다.


 커널을 다운받기에 앞서 아래의 프로그램을 설치합니다. apt-get 명령어를 통해 설치하며 아래의 내용을 그대로 터미널에 적은 후 엔터를 입력하면 되겠습니다.


$ sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev   libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386


$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so


위 패키지를 설치하던 도중 libgl1-mesa-glx:i386을 설치하려 할 때 의존성에 의한 오류가 발생하는 경우가 있습니다. 이 경우 다음과 같은 순서대로 실행을 해 주시면 되겠습니다.


$ sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev   libx11-dev:i386 libreadline6-dev:i386 libglapi-mesa:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386

(libgl1-mesa-glx:i386 의존성을 해결하기 위해 먼저 설치)


$ sudo apt-get install libgl1-mesa-glx:i386


 이제부터 본격적으로 안드로이드 커널을 설치하는 단계에 들어가도록 하겠습니다. 우선 사용자 폴더에 bin이라는 이름의 폴더를 생성합니다.

$ mkdir ~/bin


다음으로 해당 폴더에 설치될 repo를 다른 폴더에서 쉽게 사용할 수 있도록 PATH를 추가합니다.

$ export PATH=$PATH:~/bin


이제 repo를 설치해 보도록 하겠습니다.

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


다운로드한 repo에 실행권한을 추가합니다.

$ chmod a+x ~/bin/repo


이로서 repo를 설치하였습니다. 안드로이드 커널을 설치할 폴더를 만드신 후 해당 폴더로 이동합니다.

$ mkdir ~/lollipop

$ cd ~/lollipop


커널을 다운받을 폴더로 이동하신 후 repo를 초기화 합니다. 해당 초기화 내용은 폴더 내에 저장됩니다.

$ repo init -u https://android.googlesource.com/platform/manifest -b android-5.0.2_r1


맨 뒤에 굵은 글씨가 자신이 설치하고자 하는 안드로이드의 버전입니다. 자신이 설치하고자 하는 버전을 확인하기 위해서는 다음 사이트를 참조하시면 되겠습니다.

https://android.googlesource.com/platform/manifest



위 목록에서 자신이 설치하고자 하는 버전을 선택하신 후 실행하면 repo가 알아서 해당 버전만 설치해줍니다.


$ repo sync

 해당 명령어를 실행하자마자 바로 안드로이드 커널을 다운로드 하는 과정이 시작됩니다. 컴퓨터의 성능 및 인터넷 환경에 따라 빠르면 1시간내에 다운로드가 완료됩니다. 필자의 경우 약 3시간 30분 정도 소요되었습니다.



 다운로드가 완료된 안드로이드 커널(Lollipop)의 용량은 약 13.7GB를 차지하고 있습니다. 마지막으로 안드로이드 커널을 컴파일해 보도록 하겠습니다.


$ make -j4


 뒷부분의 -j4는 4개의 쓰레드를 수행하여 컴파일을 하겠다는 의미입니다. 쓰레드의 갯수는 자신의 컴퓨터의 코어 갯수로 설정하면 최적하게 컴파일이 수행될 수 있습니다. 


※가상머신 등 메모리의 크기나 Ubuntu 설치시 linux_swap 영역의 크기가 부족할 시 make 컴파일을 진행하는 도중에 실패로 종료되는 경우가 있습니다. 이를 해결하기 위해서는 두 가지의 용량을 더 크게 하거나 make 컴파일시 -j 옵션을 쓰지 않은 단일 thread로 컴파일을 하면 이를 해결할 수 있습니다. 단, 단인 thread로 컴파일 시 컴파일 속도가 현저하게 느려질 수 있습니다.(필자의 경우 약 2일 정도 소요된 것으로 확인되었습니다.)



참고문헌 : 인사이드안드로이드, 송형주 외 3인 저, 위키북스, 2010