다음 링크를 참조한다. (http://blog.daum.net/baramjin/16011098)


http://jonathan1004.tistory.com/6


대부분의 작업은 2번째 링크로 했는데 JDK 1.5 설치와 XCode 관련 도움은 첫번째 링크에서 참조했다. 첫번째 링크 전문은 다음과 같고 설치하다 보니 안되는 부분도 있어서 좀 고쳤다.


최근 개발환경을 iMac으로 변경 후 안드로이드 빌드를 한번 해봤다.
기본적으로 Snow Leopard에서는 안드로이드 빌드를 지원하지 않는다고 나와 있지만 
웹상에 이미 빌드할 수 있는 방법이 나와 있다.

전체적으로 정보가 흩어져 있어 차후 개인적인 참고 목적으로 정리를 해 본다.


http://source.android.com/download  -> 기본적인 정보는 여기서 구할 수 있다.


1. 디스크유틸리티로 새로운 이미지 만들기

안드로이드를 빌드하기 위해서는 대소문자를 구분하는 파티션( Case-sensitive Journaled HFS+)이 필요하다 
맥은 기본적으로는 해당 포맷이 아니므로 이미지를 하나 만들어서 해결 한다.

디스트 유틸리티실행 => 새로운 이미지메뉴를 통해서 이미지를 만든다 ( android 로 만들었다.)

크기 : 8 G이상 ( goldfish 커널빌드등을 할려면 한 20G정도 잡아놓는게 좋을듯 )
포맷 : Mac OS확장(대소문자 구분, 저널링) 

이미지를 만들고 나면 자동으로 마운트가 되고 다음부터 마운트할 때는 디스크 유틸리티를 통해서 할 수 있다.

( /Volumes/android 에 마운드했다고 가정함)

2. Xcode 설치

그냥 최신 버전을 다운로드 받아서 설치하면 된다. ( 최소 3.0 이상 )
단, 설치시 옵션항목에서 Mac OS X 10.4 api를 같이 설치해야 한다.
 
Mac OS X 10.4 api 설치되어야 하는 것은 정말 중요
Xcode를 이전에 이미 설치해서 신경안쓰고 있었는데 10.5와 10.6 api만 설치되어 있으니까 make시 에러가 난다.
/Developer/SDKs 나 시스템 환경에서 확인이 가능하다.

3. Mac ports 설치
http://www.macports.org 에 가서  dmg로 되어 있는 걸 받아서 설치 해준다.
설치하면 알아서 .bash_profile 에 필요한 내용도 알아서 작성해준다.

4. 필요한 툴들은 ports를 통해서 설치한다.
터미널에서 아래 명령어로 설치한다.

$ POSIXLY_CORRECT=1 sudo port install  libsdl git-core gnupg

5. 프로세스당 파일 오픈 갯수 변경
~/.basch_profile 에 아래와 같이 추가

 ulimit -S -n 1024 

$ source ~/.bash_profile ( 적용 )

6. Java 1.5 설치
Snow Leopard는 기본적으로 java 1.6 만 지원하나 안드로이드 빌드때는 1.5가 필요하므로 1.5를 설치해 준다.
 

먼저 확인해 보면 다음과 같이 1.5, 1.5.0 모두 현재버전(1.6)에 링크되어 있습니다.

ls -al

total 64

drwxr-xr-x  13 root  wheel  442  7 31 14:06 .

drwxr-xr-x  12 root  wheel  408  7 31 14:06 ..

lrwxr-xr-x   1 root  wheel    5  7 31 14:03 1.3 -> 1.3.1

drwxr-xr-x   3 root  wheel  102 12  3  2009 1.3.1

lrwxr-xr-x   1 root  wheel   10  7 31 14:03 1.4 -> CurrentJDK

lrwxr-xr-x   1 root  wheel   10  7 31 14:03 1.4.2 -> CurrentJDK

lrwxr-xr-x   1 root  wheel   10  7 31 14:03 1.5 -> CurrentJDK

lrwxr-xr-x   1 root  wheel   10  7 31 14:03 1.5.0 -> CurrentJDK

lrwxr-xr-x   1 root  wheel    5  7 31 14:03 1.6 -> 1.6.0

drwxr-xr-x   8 root  wheel  272  7 31 12:53 1.6.0

drwxr-xr-x   9 root  wheel  306  7 31 14:06 A

lrwxr-xr-x   1 root  wheel    1  7 31 14:03 Current -> A

lrwxr-xr-x   1 root  wheel    3  7 31 14:03 CurrentJDK -> 1.6


1.5 와 1.5.0 링크를 삭제합니다.

sudo rm 1.5 1.5.0

JDK 1.5를 다운 받는다

위에서 다운 안되면 여기에서 다운

 

보통 wget은 없는 경우도 있으니 바로 http로 다운로드하는 것이 속편하다.

 
 
$ tar -xvzf java.1.5.0-leopard.tar.gz
$ sudo mv 1.5.0 /System/Library/Frameworks/JavaVM.framework/ Versions/1.5.0
$ cd /System/Library/Frameworks/JavaVM.framework/Versions/
$ sudo ln -s 1.5.0-leopard 1.5.0
 

접근권한 변경하는게 빠져 있다.

$ sudo chown -R root:wheel 1.5.0


 
6.1 Java 환경 설정
응용프로그램 > 유틸리티 > Java 환경설정을 열어서 다음과 같이 설정 해준다.


7. GCC 변경

$ sudo rm /usr/bin/gcc
$ sudo ln -s /usr/bin/gcc-4.0 /usr/bin/gcc


8. 소스코드를 다운로드하기위한  repo script 다운로드

$ cd ~
$ mkdir bin

//PATH에 bin 디렉토리가 없으면 추가  ~/.bash_profile 에서 편집하면 됨.

$ curl https://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo

9. 저장소 초기화 및 소스코드 sync

$ cd /Volumes/android
$ mkdir mydroid
$ cd mydroid
$ repo init -u git://android.git.kernel.org/platform/manifest.git  -b eclair ( 2.1 eclair  )

repo initialized in /mydroid <= 이 메세지가 나오면 성공

$ repo sync  ( 코드 싱크 )

10. 컴파일 에러나는 부분 수정.

10.1 external/qemu/Makefile.android  파일을 열어서 수정.

MY_CC := $(HOST_CC)

변경
MY_CC := gcc


10.2  external/yaffs2/utils/mkyaffs2image.c 수정

#ifdef HAVE_BIG_ENDIAN
static int convert_endian = 1;
#elif defined(HAVE_LITTLE_ENDIAN)
static int convert_endian = 0;
#endif

변경 
#ifdef HAVE_BIG_ENDIAN
static int convert_endian = 1;
#elif defined(HAVE_LITTLE_ENDIAN)
static int convert_endian = 0;
#else
static int convert_endian = 0 ;
#endif

10.3 system/core/libacc/acc.cpp 수정

4557, 4637, 4643, 4731, 5740 줄의  (int) 를 (size_t) 로 수정.

11. 빌드하기

$ make

다음과 같은 에러가 발생하는 경우가 있다.

make(37655) malloc: *** error for object 0x108056c78: incorrect checksum for freed object - object was probably modified after being freed.

검색해 보니 다음과 같이 해결하라고 한다. 
http://code.google.com/p/android/issues/detail?id=11263

The problem is from macports gmake v3.82.0, you need to revert back to gmake 3.81_0

// Check the versions of gmake on your system.
$ sudo port installed gmake
---> The following versions of gmake are currently installed:
---> gmake @3.81_0
---> gmake @3.82_0 (active)

// Change active version to 3.81_0
$ sudo port deactivate gmake@3.82_0
$ sudo port activate gmake@3.81_0

빌드 가정 중에 java OutOfMemoryError 가 발생하면 
build/core/combo/javac.mk
build/core/definitions.mk

파일을 열어서 Xmx 옵션을 2G 이상으로 설정하면 된단다. 
( 변경해봐도 잘안되네요. ㅡ,.ㅡ; 그냥 make 한번 더 해주니깐 정상적으로 빌드되네요 )

커널 빌드 중에 elf.h가 없어서 에러가 발생하는데 이를 해결하는 방법은 여기를 참조한다.

error: elf.h: No such file or directory


http://code.google.com/p/android/issues/detail?id=2755


1. sudo port install libelf
2. sudo ln -s /opt/local/include/libelf /usr/include/libelf
3. copy elf.h to /usr/include
4. sudo port install gsed
6. sudo port install arm-elf-gcc, use this as cross compiler

3번은 위의 사이트에서 제공하는 elf.h를 다운받아서 복사하라는 의미이다.  


12. 실행해보기 

$ cd out/target/product/generic
$ cp userdata.img userdata-qemu.img
$ cd /Volumes/android/mydroid
$ ./out/host/darwin-x86/bin/emulator -system out/target/product/generic -kernel prebuilt/android-arm/kernel/kernel-qemu

정상적으로 뜬다면 성공적으로 빌드된 것임.

Posted by 까칠코더.


티스토리 툴바