사용 OS : Ubuntu 12.04 64bit

 아래 링크를 통해서 Virtualbox에 ubuntu 설치하기를 따라하실 수 있습니다.

 Virtualbox Ubuntu 12.04 설치하기 : http://thdev.net/237


 가상 머신 환경 : 2 GB 메모리, 40 GB 이상의 디스크 공간 정도면 충분한것 같습니다. 메모리는 꼭 2 GB 이상이면 좋습니다. make 시에 상당한 메모리를 사용하고 1 GB로 진행하였을 경우 메모리 부족 오류가 발생하였습니다.

 JDK : JDK 1.6(진저브레드 이상은 JDK 1.6을 요구하고, 프로요 이하는 JDK 1.5를 요구합니다.)

 Git : 1.7

 Python : 2.6

 GNU Make : 3.81

 GCC의 경우 ubuntu 12.04를 설치하면 4.6 버전이 설치되어 있습니다.


[빌드 환경 구성]

빌드 환경 구성으로 AOSP 홈페이지에 설명되어 있는 프로그램을 다운 받아 설치하면 됩니다. 설치 중에 이미 설치되어 있거나, 약간 다른이름이 존재할 수 있습니다. 아래가 1줄의 명령어이지만 1개씩 설치하는걸 추천합니다.

빌드 환경 구성 : http://source.android.com/source/initializing.html


[Java 설치]

Java의 경우 AOSP 홈페이지의 설명으로는 설치가 불가능합니다. Ubuntu에서 기본 패키지에서 빠져서 아래와 같이 설치해야합니다. 그리고 오픈 JDK로는 안드로이드 빌드가 되지 않습니다.


sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

sudo apt-get install oracle-java6-installer


 만약 java가 6, 7이 두개가 설치되어 있는 경우가 있을 수 있습니다. 아래 명령어를 통해서 java 6으로 변경하시면 됩니다.

sudo update-alternatives --config java


를 실행하시고, java 6 버전으의 숫자를 입력하시면 됩니다.

출처 : http://askubuntu.com/questions/272187/setting-jdk-7-as-default


[빌드용 프로그램 설치]

 빌드에 필요한 프로그램은 아래와 같습니다. 상당히 많이 존재하는데 가능하다면 1개씩 설치하시길 권장드립니다. 이미 설치되어 있으면 아래 명령어가 안먹히는 경우가 있습니다.

$ sudo apt-get install git-core gnupg flex bison gperf build-essential \

  zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \

  x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \

  libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \

  libxml2-utils xsltproc


- android site Ubuntu 12.04

$ 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



- 1개씩 설치하는 경우

sudo apt-get install git-core 

sudo apt-get install gnupg

sudo apt-get install flex

sudo apt-get install bison

sudo apt-get install gperf

sudo apt-get install build-essential

sudo apt-get install zip

sudo apt-get install curl

sudo apt-get install zlib1g-dev

sudo apt-get install libc6-dev

sudo apt-get install libncurses5-dev:i386

sudo apt-get install ia32-libs

sudo apt-get install x11proto-core-dev

sudo apt-get install libx11-dev

sudo apt-get install lib32readline5-dev

sudo apt-get install lib32z-dev

sudo apt-get install libgl1-mesa-dev

sudo apt-get install g++-multilib

sudo apt-get install mingw32

sudo apt-get install tofrodos

sudo apt-get install python-markdown

sudo apt-get install libxml2-utils

sudo apt-get install xsltproc


## build error시 체크 패키지.

http://askubuntu.com/questions/256487/initialising-the-build-environment-for-android-on-64-bit-12-04

sudo apt-get install zlib1g-dev:i386

sudo apt-get install libx11-dev:i386 

sudo apt-get install libreadline6-dev:i386

sudo apt-get install libgl1-mesa-glx-lts-quantal:i386


[Java Path 등록]

 아래와 같이 Java Path를 등록해야 합니다. JAVA_HOME의 경로는 아래와 같은 경로가 아닐 수 있으니 직접 경로를 확인하신 다음 등록하시기 바랍니다.

vi ~/.bashrc에 등록한다.

# Java Setting

export JAVA_HOME=/usr/lib/jvm/java-6-oracle

export ANDROID_JAVA_HOME=$JAVA_HOME


 안드로이드 소스코드 다운로드 방법 : http://source.android.com/source/downloading.html


 아래 링크를 통해 안드로이드 버전과 기기 정보를 확인하신 후 다운로드 주소가 변경될 수 있습니다.

 안드로이드 버전 확인 : http://source.android.com/source/build-numbers.html


[Installing Repo 설정]

 repo를 등록할 임시 폴더를 생성합니다. 저는 ~/ 아래에 bin 폴더를 생성하였습니다. mkdir ~/bin 명령으로 bin 폴더를 생성하고, PATH 등록하였습니다. 여기서 PATH를 등록하지 않으시면 풀 소스 다운로드시에 진행이되지 않습니다. 진행 중에 경로를 찾지 못한다는 오류가 난다면 여기의 PATH 등록이 되지 않은것이므로 PATH 등록을 다시해주시면 됩니다.

1. bin 폴더 생성

$ mkdir ~/bin

$ PATH=~/bin:$PATH


[Repo 등록]

 안드로이드를 다운받을 repo를 등록하고 권한을 a+x 권한을 주면 됩니다. 바로위에서 생성한 ~/bin/ 아래 repo라는 폴더를 생성하여 repo 등록을 진행합니다.

$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

$ chmod a+x ~/bin/repo


[Android를 다운 받을 폴더 생성]

 안드로이드를 다운 받을 폴더를 생성합니다. 이 폴더는 안드로이드 전체 소스코드가 다운 받아져야하는 폴더로 bin 폴더가 있는 곳에 아래와 같이 생성하셔도 됩니다. 아니면 원하시는 경로 상관 없이 생성하시면 됩니다.(Ubuntu이니 ~/ 폴더 아래가 좋습니다. / 폴더는 관리자 권한을 필요로 하니 피하는게 좋습니다.)

 저는 ~/temp 폴더를 생성하였습니다.

$ mkdir temp

$ cd temp


안드로이드 소스 다운로드

 이제 모든 설정이 끝났습니다. 안드로이드 Full Source를 다운 받으실 수 있는 환경이 구성되었습니다. repo init 명령어를 통해서 어느 주소에서 안드로이드 소스를 받을지를 지정하면 됩니다. 이후 sync 명령어를 통해서 소스를 다운 받으면 됩니다.


 여기서 중요한 init 명령어를 살펴보겠습니다.

 안드로이드 버전 확인 : http://source.android.com/source/build-numbers.html 에서 확인하고, 내가 필요로하는 Source를 다운 받을 수 있습니다. init 명령어를 아래와 같이 2가지로 사용할 수 있습니다.


 옵션의 -b를 지정하면 특정 소스코드를 다운 받게되고, -b를 지정하지 않으면 기본 소스코드를 다운 받습니다. 최신 버전을 받으실 것이라면 -b 옵션을 사용하시고, 안드로이드 버전 확인 페이지에서 버전 확인 후 진행하시면 됩니다. 현재 가장 최신은 android-4.4.2_r1 버전으로 Nexus 4, 5, 7, 10용입니다.

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

또는

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


 repo sync를 진행합니다. 진행하는 방법은 2가지입니다. -j 옵션을 지정하면 다중 다운로드가 됩니다. 다중 다운로드를 진행하므로 다운로드 속도는 그냥 sync 보다 빠릅니다. 그만큼 메모리를 많이 차지하니.. 적당한 옵션을 지정하여 사용하시면 됩니다.

repo sync

또는

repo sync -j3





Android 4.4.2 빌드

 안드로이드 4.4.2 빌드를 하기 위한 환경이 모두 끝났습니다. repo sync를 통해서 다운 받은 소스코드를 확인하실 수 있습니다. 다운 받은 소스코드를 make 명령어를 통해서 빌드할 수 있지만.. 4.4.2에는 GCM이 비어있어서 오류가 발생하더군요. GCM을 다운 받고 복사한 후에 make를 진행하도록 하겠습니다.


GCM 다운로드 및 폴더 생성

 GCM 다운로드는 :http://stackoverflow.com/questions/16385927/building-aosp-4-2-2-on-ubuntu-12-10-x64-fail 을 참고하여 작성하였습니다.

 GCM 코드는 안드로이드 Full source에 포함되어 있지 않습니다. 더군다나 폴더가 vendor 아래에 포함되어 있더군요. 그래서 아래와 같이 GCM 소스코드 다운로드 방법을 함께 추가하였습니다.

 GCM 소스 다운로드 : https://code.google.com/p/gcm/source/checkout


 다운 받은 안드로이드 temp 폴더에서 아래 명령어를 입력합니다. vendor/unbundled_google/libs 폴더를 생성하고 이동합니다.

$ mkdir -p vendor/unbundled_google/libs

$ cd vendor/unbundled_google/libs


 libs 폴더에서 아래 명령을 이용해 gcm 소스코드를 다운 받습니다.

git clone https://code.google.com/p/gcm/


Android 명령셋 등록

 안드로이드에서 제공하는 명령셋을 등록합니다. 추후 mm 등의 명령어를 사용할 때 필요로 합니다.

$ source build/envsetup.sh

또는

$ . build/envsetup.sh


make

 최종적으로 make를 진행할 수 있는 환경이 만들어졌습니다. 이번글에서는 make까지 진행하는 작업을 하므로 아래와 같이 마지막 명령어를 진행합니다.

 역시 repo sync 명령어와 마찬가지로 -j 옵션을 통해서 추가 쓰레드를 진행할 수 있습니다. 가상 머신을 기본값으로 하셨다면 -j3이 적당해보입니다. 기본적으로 자신의 CPU Thread 수만큼 지정해주시는게 가장 좋은 성능을 보입니다.

 적당한 멀티 쓰레드 수는 Cores(실제 코어) * 1.1 을 해주는 값이 적당하다고 합니다. i7의 경우는 실제 코어가 4개이니 4 * 1.1의 4 또는 5가 적당하고 i5는 2 * 1.1 = 3 또는 2가 적당한값 같습니다.

$ make

또는

$ make -j3




Posted by 빈이아빠 mobile

댓글을 달아 주세요