2011년 12월 20일 화요일

Android Build System 구축



목차
1 서론
2 기본 환경 설정
2.1 git 설치 필요
2.2 xmlto 설치 필요
2.3 java 설치
2.4 gperf 설치
2.5 gcc 3.4 버전 설치
2.6 메모리 요구 사항
3 소스 다운로드
3.1 ARM용 안드로이드 소스 다운로드
3.2 x86 용 안드로이드 소스 다운로드
4 안드로이드 컴파일
4.1 ARM용 컴파일 방법
4.2 x86용 컴파일 방법
5 마치며

1 서론 #
본 페이지는 안드로이드 플렛폼 전체 컴파일에 대하여 정리한 페이지이다. 기본 내용은 안드로이드 컴파일 환경 구축 및 플렛폼 다운로드 및 컴파일 방법 그리고 커널 컴파일 방법등을 정리하였다.

2 기본 환경 설정 #
기본적으로 안드로이드 시스템을 컴파일 하기 위해서는 리눅스 환경이 필요하다. 어플리케이션인 경우는 자바로 되어 있기 때문에 꼭 리눅스가 아니라도 상관이 없다. 어플리케이션 개발은 위하여 환경을 제공하고 있다. 관련 내용은 다른 파트에서 정리하도록 하겠다.

본 내용은 기본적으로 안드로이드 시스템 구현에 맞추어져 있으므로 리눅스 환경을 기반으로 설명하고자 한다. 안드로이드 컴파일 및 실행을 위하여 다음과 같이 여러 환경에서 컴파일을 해봤다.각기 여러 문제점을 발생했는데 관련하여 하나씩 소개하도록 하겠다.
  • 페도라 10
  • 페도라 6
  • CentOS 5
일단 OS 설치시는 컴파일에 필요한 사항이 거이다 들어가야 하므로 developer 버전으로 설치하는 것을 권유한다. 그래야 에러 요소가 적게 날 것이다.

2.1 git 설치 필요 #
버전 관리용 툴인 git가 있어야 기본적으로 소스를 땡겨 올수가 있다. 설치는 다음과 같이 하면 된다.
yum install git*

 페도라 6인 경우 git가 1.5.2인 관계로 설치가 불가능하다 기본 1.5.4 이상을 원하므로 상위 버전을 구하여 설치하도록 하자. 멀리서 찾지말고 페도라 사이트에 가서 페도라 8의 SRPM을 받아다가 다시 rebuild 해서 사용하는 것이 제일 빠르다.

 CentOS 5인 경우 git에 대한 Package를 찾을 수가 없었다. 만약 Package로 설치할려고 한다면 포기하라고 권유하고 싶다. 필자인 경우 Package를 받아서 패키징을 완성하는데 하루 걸렸다. Perl등 여러가지가 걸려서 설치가 생각보다 어려웠다. 이럴바에는 그냥 소스를 받아다가 컴파일 하는게 제일 빠를듯 하다.

2.2 xmlto 설치 필요 #
xml 관련 변경이 필요한 경우 많이 사용하는 어플리케이션임. 이 부분 설치 필요함.
yum install xmlto

2.3 java 설치 #
안드로이드는 컴파일시 자바를 필요로 한다.
yum install java*

 페도라 6 , CentOS 인경우 패키지가 존재하고 있지 않아 sun에서 사용하는 자바가 직접 받아다 사용하였다. 직접 받기 위해서는 http://java.sun.com 이용하기 바란다.

자바 환경을 다음과 같이 설정한다. 최신 JAVA를 sun 사에서 받았다면 아래와 같이 해주어야 한다. 기본적으로 sun사에서 받았을 경우 /usr/java/ 밑에 설치가 되고 각 버전중에 최신 버전을 latest 에 연결하는듯 하다. 그러므로 아래와 같이 설정하면 된다.
vi .bash_profile

export JAVA_HOME=/usr/java/latest
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export ANDROID_JAVA_HOME=$JAVA_HOME

만약 JAVA를 yum으로 설치하였다면 각 버전마다 약간의 차이가 있을수 있드나 방법은 동일하다 페도라 9인 경우 java-1.6.0-openjdk-devel가 설치 될것인데 이럴 경우는 다음과 같다. 참고하여서 사용하기 바란다.
vi .bash_profile

export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0
export PATH=.:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:/home//bin:$PATH
export ANDROID_JAVA_HOME=$JAVA_HOME

 PATH를 잡을때 JAVA를 앞쪽으로 잡기를 바란다. 리눅스에서 runtime java가 따로 있다. 이게 실제 안드로이드에서 잘 안 맞는다. 그래서 컴파일이 안되므로 자바를 설정할때는 꼭 앞쪽에 넣어서 자바 페스를 정확하게 잡게 해주기 바란다.
2.4 gperf 설치 #
프로그램 컴파일 중에 에러가 발생한다. 이 페키지를 설치하면 에러가 사라질 듯 하다.
yum install gperf*

2.5 gcc 3.4 버전 설치 #
gcc 3.4 ARM용을 컴파일 할 목적이라면 안해도 된다. gcc 3.4는 x86용을 컴파일 할경우 필요한 컴파일러다. 페도라 계열은 현재 4.x 대의 gcc가 설치되어 있다. 여러 개발자들의 메일을 확인해 보면 컴파일시에 여러 에러가 발생한다고 되어 있다. 제가 확인해 본결과는 별에러는 발생하지 않았다. 물로 릴리즈 소스는 아니다. 본인은 repo에서 직접 받아다 컴파일을 하고 있다. 대다수 3.4를 권유하므로 일단 별 무리없이 컴파일 하고 싶으면 다음과 같이 설치하기 바란다.

yum install compat-gcc*

2.6 메모리 요구 사항 #
안드로이드를 컴파일 하기 위해서는 상당한 메모리를 요구한다. 일단 메인 메모리는 1G 이상이라야 정상적으로 컴파일이 가능하다. 제가 테스트 해 본결과 구닥다리 노트북에 메인 메모리가 256MB에 스왑을 512MB로 잡고 X를 안 올린 상태에서 메모리의 80% 이상을 점유하고 있다. 또한 오버로 인하여 컴파일시 Kill(9) 나오면서 죽기도 한다. 그러니 정말 컴파일을 하고 싶으면 1GB 이상의 메모리에서 하기 바란다.

3 소스 다운로드 #
소스를 다운로드 하는 방법은 여러가지가 있으나 기본적인 것은 ARM용으로 컴파일 되는 소스이다. 소스 다운로드 방법에 대해서는 ARM용과 X86용인 Eee 701 버전 다운로드 방법에 대해서 설명하도록 하겠다.

3.1 ARM용 안드로이드 소스 다운로드 #
git 형태로 되어 있으므로 git를 이용하여 환경을 설정하자http://android.git.kernel.org/ 에 가보면 안드로이드에 대한 open source project git가 다보인다. 만약 git로 되어 있는것중에 일부만을 받아 올경우는 다음과 같이 하면 된다.
git clone git://android.git.kernel.org/ + project path.
만약 전체를 다 받아오고 싶으면 repo라는 스크립트를 받아와서 다음과 같이 처리하면 된다.
mkdir mydroid
cd mydroid
repo init -u git://android.git.kernel.org/platform/manifest.git
repo sync

repo를 받는것은 다음과 같이 받으면 된다.
wget http://android.git.kernel.org/repo
chmod a+x repo
repo는 어디다가 둬도 된다. 셀 스크립트 이기 때문이다. 사용하기 편하게 자신의 안드로이드 디렉토리 한켠에 bin을 만들고 그걸 .bash_profile에 패스를 추가하자. 그리고 repo를 실행파일로 만들어 주는 것도 잊지 말자.

+--+- [bin]
   +- [mydroid]
내가 repo를 둔곳은 /android/bin 이므로 이 디렉토리를 아래와 같이 추가하였다. 마지막 부분에 export PATH를 해 주는 것도 잊지 말자.

vi .bash_profile
PATH=$PATH:/android/bin

export PATH

git를 사용할 경우 자신의 이메일과 이름을 등록해 놓고 사용하면 할때마다 쳐 넣는 삽질을 안해도 될듯 함.
$>git-config --global user.email "xxx@xxxx.com" <-- 여러분의 이메일주소
$>git-config --global user.name "Kim,HanChul" <-- 자신의 이름

이제 초기화 하자.
$>repo init -u git://android.git.kernel.org/platform/manifest.git
... 초기화 문구가 다 끝나고 나면
$>repo sync

3.2 x86 용 안드로이드 소스 다운로드 #
mkdir mydroid_x86
cd mydroid_x86
repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake
repo sync
" o:spid="_x0000_i1025">" src="file:///C:\Temp\msohtmlclip1\01\clip_image002.gif"> -b 의미를 정확하게 모르겠음. 현재 이 내용은 조금은 잘못된듯한 느낌이 있음.

참고 문헌을 뒤져 본 결과 안드로이드 X86용 정확하게 말하면 Eee 701용을 다운로드 받는 방법은 다음과 같다.
mkdir mydroid_x86
cd mydroid_x86
repo init -u git://android.git.kernel.org/platform/manifest.git
repo sync

-b할 필요 없이 풀 소스를 먼저 받는다. 그리고 나서 로컬 설정을 해야 한다.
cd .repo
vi local_manifest.xml
.repo 디렉토리 내에 local 에서 원하는 것으로 컴파일 하기 위한 설정을 해야 한다.
<?xml version = "1.0" encoding = "UTF-8"?>
<manifest>
<project name="platform/vendor/asus/eee_701" path="vendor/asus/eee_701"/>
</manifest>
이제 sync를 해보자.
repo sync
----- 로그 내용 -----
[root@rainbow-pc mydroid_x86]# repo sync

Initializing project platform/vendor/asus/eee_701 ...
remote: Counting objects: 33, done.
remote: Compressing objects: 100% (31/31), done.
remote: Total 33 (delta 2), reused 33 (delta 2)
Unpacking objects: 100% (33/33), done.
From git://android.git.kernel.org/platform/vendor/asus/eee_701
 * [new branch]      cupcake    -> korg/cupcake
 * [new branch]      master     -> korg/master
이렇게 하면 뭔가를 받아오고 받아온 것을 확인해 보면
.repo/projects/vendor/asus/eee_701.git
아래 디렉토리에 eee_701 관련 부분을 받아 온것을 볼수 있다.

또한 받아온 내용은 vendor/asus/eee_701 디렉토리를 확인하면 어떤 내용이 있는지 확인이 가능할 것이다.
[root@localhost eee_701]# ls
AT_Translated_Set_2_keyboard.kcm  AndroidProducts.mk   disk_layout.conf 
init.eee_701.sh                   kernel.config        modules
AT_Translated_Set_2_keyboard.kl   BoardConfig.mk       eee_701.mk 
init.rc                           system.prop          Android.mk                       
init.eee_701.rc                   kernel               kernel.version

4 안드로이드 컴파일 #
4.1 ARM용 컴파일 방법 #
ARM 버전인 경우 컴파일 방법은 간단하다.현재 ARM용으로 필자가 특별하게 시도해본 내용이 없어서 적을 내용이 없다.
make
기본적으로 make를 하게 되면 out디렉토리에 generic이라는 기본 하드웨어로 만들어지게 된다. 아직 특별하게 설치를 해보지 않아서 사용방법에대해서는 여기로 마치겠다.

4.2 x86용 컴파일 방법 #
여기서는 좀더 내용을 나누어서 설명을 해야 하므로 링크를 따라가면서 보기 바랍니다.

안드로이드빌드_x86에는 안드로이드 x86 컴파일 방법 및 VmWare, VitualBox에 포팅한 내용이 정리되어 있습니다.

5 마치며 #
안드로이드 하드웨어가 없는 상황에서 실제 ARM을 가상 머신에 올리는 것보다는 x86용으로 올려보는 것이 좀더 의미가 있을것 같아서 필자는 그 길을 택하였다. 또한 안드로이드가 약간의 NC와 유사한 x86 PC에 탑재되는것을 희망한다. 그러한 의미에서 어쩌면 x86에 탑재해 본것은 저로써는 굉장한 흥미로웠고 포팅하는 동안 재미있었다. 많은 분들이 이 글을 읽고 시도해봤으면한다.


 http://cod.springnote.com/pages/3440849.xhtml 좋은 정보 감사합니다.


댓글 없음:

댓글 쓰기