안드로이드를 개발하기 위해 반드시 거쳐야하는 과정, 컴파일 방법에 대해서 기술한다.
여기서 언급하는 내용은 http://source.android.com/source/initializing.html 를 참고했다.
안드로이드 소개
안드로이드는 그 어떤 프레임워크 보다도 짧은 주기로 업데이트되어 왔다.
안드로이드 버전 | 코드 명칭(출시일) | 특징 |
1.0 | 2008.9.23 | 최초의 안드로이드 버전, SDK 함께 배포 |
1.1 | 2009.2.9 | 마켓지원, 뷰의 패딩 개선, 새로운 권한 추가 |
1.5 | Cupcake(2009.4.30) | 리눅스 커널 2.6.27 기반, 안드로이드 최초 정식버전(홈 화면에 띄울 수 있는 위젯과 폴더, 동영상 녹화와 재생, 유튜브로의 비디오 업로드 및 피카사로의 그림 업로드, 한글지원) |
1.6 | Donut(2009.9.15) | 리눅스 커널 2.6.29 기반(마켓 리뉴얼, 카메라 및 캠코더등의 인터페이스 탑재, 다양한 스크린 사이즈 지원(QVGA, WVGA), CDMA 지원시작, 제스처 인식 기능과 API 추가, text-to-speech 엔진 추가, 통합 검색 기능 추가, 배터리 사용 상태 표시기) |
2.0/2.1 | Eclair(2009.10.26/2010.1.12) | 리눅스 커널 2.6.29 기반, 멀티터치, 블루투스 2.1 지원, 하드웨어 최적화 진행, 인터넷 브라우저 상단 주소 창 추가, HTML5, 라이브 월페이퍼 지원, 구글 다중 계정 등록 사용 가능, MS Exchange 계정 사용 가능 |
2.2 | Froyo(2010.5.20) | 리눅스 커널 2.6.32 기반, 안드로이드 OS 의 속도, 메모리, 성능 최적화(배터리타임 성능개선, 어도비 플래시 10.1 지원, 모바일 Wi-Fi 핫스팟 등 테더링 기능을 지원, 외장메모리에 앱 설치 가능) |
2.3 | Gingerbread(2010.12.6) | 리눅스 커널 2.6.35 기반, 인터넷 접속을 통한 OS 업데이트, 인터넷 전화 바로 사용 가능, 전면 카메라 공식지원, 구글맵 5.0, 자이로센서, NFC 등 지원 |
3.0/3.1 | Honeycomb(2011.2.24/2011.5.10) | 리눅스 커널 2.6.36 기반(태플릿 PC 전용, 홀로그래픽 UI, USB 기기 지원) |
4.0 | Icecream sandwitch(2011.10.19) | 리눅스 커널 3.0.1 기반(태블릿 PC 와 스마트폰 공용 OS) |
4.1 | Jelly Bean(2012.6.28) | 리눅스 커널 3.0.31 기반(터치스크린 반응성 개선, HTML5 와 자바스크립트 성능이 향상된 웹브라우저 |
준비운동 하기
안드로이드 최신버전(4.x)를 다운로드 받아 컴파일하는 과정을 거칠 텐데, 그전에 유의해야 할 점이 있다.
'The source download is approximately 8.5GB in size. You will need over 30GB free to complete a single build, and up to 100GB (or more) for a full set of builds.'
나의 경우, 노트북의 한정된 용량 때문에 외장 하드(80G)를 사용했다. 또한 컴파일 시간도 오래 걸리기 때문에 어느 정도 감수해야 한다. 물론 호스트 CPU 에 따라 가변적이긴 하다. 빌드 환경은 다음과 같다.
H/W | IBM X40, HDD(40G) |
S/W | Debian 6.0, Kernel 3.6.7 |
만일 가상머신을 사용한다면 아래 문장을 유의하도록 한다.
'It is also possible to build Android in a virtual machine. If you are running Linux in a virtual machine, you will need at least 16GB of RAM/swap and 30GB or more of disk space in order to build the Android tree.'
안드로이드를 빌드하기 위해 사전에 필요한 소프트웨어가 설치되어야 한다.
- Python 2.5 – 2.7, which you can download from python.org.
- GNU Make 3.81 – 3.82, which you can download from gnu.org,
- JDK 6 if you wish to build Gingerbread or newer; JDK 5 for Froyo or older. You can download both from java.sun.com. 여기서는 JDK6 을 사용했다.
- Git 1.7 or newer. You can find it at git-scm.com.
JDK 설치
기본 소스리스트로는 JDK 를 설치할 수 없다. 아래와 같이 /etc/apt/sources.list 에 추가한다.
deb http://ftp.pl.debian.org/debian/ squeeze non-free
이제 설치하자.
#apt-get update #apt-get install sun-java6-jdk
우분투의 경우
데비안이 아닌 우분투를 사용한 경우라면, 위의 방법으로 jdk 를 설치할 수 없다. 이런 경우, 아래와 같이 관련 패키지들을 설치해야 한다.
#apt-get install git-core 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 openjdk-6-jdk tofrodos \ python-markdown libxml2-utils xsltproc zlib1g-dev:i386
다운로드
안드로이드 소스코드를 다운받기 위해 환경설정이 필요하다.
#mkdir ~/bin #PATH=~/bin:$PATH #curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo // curl 이 없다면 설치한다 #chmod a+x ~/bin/repo
이제 다운 받을 곳을 지정하여 디렉토리를 만든다. 다시 말하지만, 용량을 고려해야 한다. 여기서는 /mnt 로 한다.
#mkdir /mnt/android #cd /mnt/android #repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 // 4.0.1 브랜치를 다운로드 받는다 #repo sync
네트워크 속도에 따라 장시간이 소요될 수 있다.
컴파일
컴파일 하기 위해 환경설정 파일을 읽어들인다.
#source build/envsetup.sh #lunch full-eng #make
이 역시, 장시간이 소요된다.
에뮬레이터 실행하기
안드로이드에서는 실제 타겟보드에 올리기 전에 동작을 확인할 수 있도록 에뮬레이터를 제공한다.
#cd /mnt/android #source build/envsetup.sh #lunch You're building on Linux Lunch menu... pick a combo: 1. full-eng 2. full_x86-eng 3. vbox_x86-eng 4. full_maguro-userdebug 5. full_tuna-userdebug 6. full_panda-eng Which would you like? [full-eng] 1 // 1번 선택 ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=4.0.1 TARGET_PRODUCT=full TARGET_BUILD_VARIANT=eng TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=arm TARGET_ARCH_VARIANT=armv7-a HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=ITL41D ============================================
에뮬레이터 실행을 위한 환경 설정이 끝났다. 이제 실행하자.
#cd /mnt/android/out/target/product/generic #emulator –system system.img –data userdata.img