강좌 & 팁
안녕하세요.
요즘 안드로이드가 정말 많은 조명을 받고 있는데요, 구글이 세계정복을 하려나 봐요. ^^
그래서 저도 안드로이드에 관심을 갖고 접근하고 있는 중인데 안드로이드 소스를 컴파일 하고 EZ 보드에 올려보자~ 하는게 목표!
잘 될까요?
하여간, 저의 긴 여정을 시작하기 위한 첫발로 안드로이드 소스를 전체빌드 하는 과정을 올려보려 합니다.
일단 안드로이드가 무엇일까요?
Android is a software stack for mobile devices that includes an operating system, middleware and key applications. The Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language. (Google)
구글의 말을 인용하자면 뭐, 저렇습니다.
다들 아시겠지만 안드로이드는 쉘폰에 집어넣기 위해 만들어진 운영체제인데 리눅스를 기반으로 하고 있는 운영체제 입니다.
[안드로이드 아키텍처 레이어]
일단 기본적인 말은 구글이나 안드로이드 홈페이지 등에서 쉽게 볼수 있으니 얼른 목표인 안드로이드를 다운로드 해보죠!
1. 개발환경은?
먼저 해결해야 할 것이 개발환경을 만드는 것인데요.
많이들 애용하고 계시는 coLinux를 이용해 도전해 봤다가 GG를 치고 안드로이드 측에서 시키는데로!
'Ubuntu 8.04 or Upper' 버전을 사용했습니다.
다행히 전 우분투를 애용하고 있어서 괜찮았는데 없으신 분들은... 설치해야 할 것만 같은 그런 느낌이 마구 듭니다.
나중에 포터블 우분투를 이용하는 방법도 알아보려 하구요... 일단 그건 나중에.
우분투가 준비되었다면 apt를 이용해 다음 팩키지들을 다운로드 받아야 합니다.
32비트 우분투를 사용한다면 아래와 같이...
# sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
# sudo apt-get install valgrind (메모리 문제를 해결해준다)
# apt-get install lib32readline5-dev (상위 우분투 버전을 사용한다면 설치)
64비트 우분투를 사용한다면 아래와 같이...
# sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl sun-java5-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
# update-java-alternatives -s java-1.5.0-sun
# ln -s /usr/lib32/libX11.so.6 /usr/lib32/libX11.so (X11 패키지가 없는 경우)
여기서 주의할 것!! 저는 일단 우분투를 항상 root로 로그인 해놓고 작업 합니다. 사용자 계정으로 로그인 하시는 분들은 sudo를 이용해서 apt-get 을 실행시키시면 되겠습니다. 그리고 구글의 공식 입장에 대해 말하자면 Sun-Java6-JDK에 대해서는 공식적으로 지원하지 않는답니다. 그렇다면 공식적으로 지원하는 버전으로 바꾸어야 겠죠? # update-java-alternatives -s java-1.5.0-sun 위 명령어로 셋팅해 주시면 되겠습니다. 2. 안드로이드 소스 다운로드 자~ 이제 안드로이드 소스를 다운로드 받아야겠죠? 먼저 curl을 이용해서 repo 스크립트를 다운로드 받도록 합니다. # mkdir ~/bin # curl http://android.git.kernel.org/repo >~/bin/repo # chmod 755 ~/bin/repo # cp ~/bin/repo /bin 자~ 이제 repo 가 준비되었습니다. 아, 그리고 내려받을 때 curl 쓰기 귀찮으신 분들은 wget으로 받으셔도 됩니다. ^^ 그리고 이제 안드로이드를 받기 위해 폴더를 만들고 버전을 갱신받아보도록 하겠습니다. # mkdir ~/mydroid # cd ~/mydroid # repo init -u git://android.git.kernel.org/platform/manifest.git 이렇게 하면 몇가지 정보를 다운로드 받는 것 처럼 보이고 곧 이어 그대의 이름과 이메일을 물어봅니다. 뭐, 이건 간단하게 자신이 알아서 넣어줍니다. 곧 이어 'Testing colorized ouput' 테스트를 하게 됩니다. 그대의 계정으로 컬러 디스플레이를 가능하게 만들겠소~ 라고 물어보는데 과감히 y 눌러도 문제 없습니다. ^^ 자~ 이제 마이드로이드 폴더로 잽싸게 이동해서 싱크 작업을 하면 끝입니다! # cd ~/mydroid # repo sync 이렇게만 해주면 이제 알아서 소스가 최신 버전으로 다운로드 되게 됩니다. 소스 용량이 생각보다 엄청나게 큽니다. (1GB 가까이) 이것저것 빌드하고 할 때를 생각하면 경험상 리눅스 용량이 20기가 이상은 있어야 좀 안전하게 작업 할 수 있을 듯 합니다. 용량 미리미리 확보해 주세요. ^^ [안드로이드가 다운로드 되어진 폴더의 모습] 3. 안드로이드 전체 빌드 자! 이제 안드로이드 전체 빌드를 해볼 차례 입니다. 뭐, 고민없이 할 수 있을 것 같습니다. # cd ~/mydroid # export ANDROID_JAVA_HOME=$JAVA_HOME (자바 경로 안잡힌 분들만) # make 메이크를 하게되면 컴파일이 시작되는데... ... ... 엄~~~~~ 청~~~~~ 오래 걸립니다. ^^ 컴파일 하다가 뻗으면 오류 메시지 나오니까 그전까진 꾸욱~ 참고 기다리셔야 합니다. 제 노트북(셀러론 1.5Ghz)으로는 3시간 가량 걸렸고 데스크탑(코어2듀오 2.1Ghz)에선 1시간 반 가량 걸렸습니다. [전체 빌드가 시작되는 모습] [빌드가 완료되고 결과물이 산출된게 확인된 순간] 야호! 드디어 빌드가 다 되었네요. ~/mydroid/out/target/product/generic 디렉토리에 보면 루트파일시스템, 램디스크, 각종 데이터들이 이미지 파일로 만들어져 있는 것을 확인 할 수 있습니다. ... 휴우~ 힘들었습니다. 오늘은 여기까지 해본 것을 올려보도록 하겠습니다. 최종 목표인 EZ 보드에 안드로이드 올리기를 하기위해 이제 다음으로 커널 빌드가 기다리고 있는데요. 이 문제는 차차 배워가면서 올려보도록 하겠습니다. 하여간 안드로이드 전체 빌드가 끝났으니까 이제 기본은 해놓았습니다. 앞으로 안드로이드와 조금 더 가까워지는 시간을 갖을 수 있도록 무지막지한 노력을 아끼지 않아야겠네요. ^^ 아! 그리고 위 과정대로 했는데 안되신 분들은 자신의 우분투가 버전이 8.04 이상인지를 확인해 주세요. 그래도 안된다! 그렇다면 http://source.android.com/download 여기서 문서를 한번 봐주시기 바랍니다. 별일이 없다면 잘 될꺼에요. ^^ 그럼 모두들 평안들 하세요~
cp ~/bin/repo /bin를하는데,root계정이아닌경우 permission error가발생합니다.
이거 생 략해도 되나요 ?
/home/kevinpark/bin/repo: line 1: syntax error near unexpected token `newline'
/home/kevinpark/bin/repo: line 1: `<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">'
이런 에러가 나네요 ? ????????????
curl http://android.kernel.org/repo >~/bin/repo
이 다운로드가 잘 안된것을 internet에서 찾아 아래 방법으로 바꾸었습니다.
curl http://android.git.kernel.org/repo> ~/bin/repo
이렇게 하니까 다운로드 가 되네요.
오우~ 글을 어쩜 이렇게 재미나게 쓰시나요. 마치 앞에서 말씀하시는 듯해서 즐겁게 읽었습니다.
저도 그대로 따라해 보려구요. 매우 쉽게 글을 올려 주셔서 별 문제가 없을 것으로 생각됩니다만,
혹, 진행하다가 부딪히는 부분이 있으면 부탁 말씀 많이 올리겠습니다. 감사합니다. ^^
우분투 8.04에서 진행해구요, 안드로이드 홈피에 있는 것처럼 따라서 했습니다.
아무것도 건드리지 않고 다운 받은 상태에서 make 를 했습니다.
무사히 make가 되었구요...
이제 이것을 어디에 써먹을까 하다가 앞으로 자사 장비의 device를 제어해야 할 필요성때문에 libhardware_legacy.so 라이브러리를 사용해 보기로 했습니다.
target 보드용으로 빌드된 위 라이브러리(out/target/product/generic/system/lib/libhardware_legacy.so) 를
현재 안드로이드가 돌고 있는 자사 보드(PXA320 보드)에 올리는 시험을 해 봤습니다.
기존의 라이브러리를 백업하고, 새로빌드된 라이브러리를 넣고 부팅을 시도했습니다.
그런데, 안드로이드가 실행되지 않습니다.
뭔가 다른 작업이 필요한 것인가요?
아니면, libhardware_legacy의 하드웨어 관련 내용들때문에 그런 것일까요?
음.. 처음이라서 무작정 해보고 있는데, 어디를 뒤져봐야 할지 도무지 모르겠네요..
우분투초짜입니다.
E: /var/lib/dpkg/lock 잠금 파일을 얻을 수 없습니다 - open (11 Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
32비트 우분투를 사용한다면 그쪽의 명령문을 치니
sun-java5-jre설정 중입니다. 라고 뜨고
넘어가질 안습니다.
이럴때 어떻게 해야되나요?ㅠㅠ
안녕하세요.
update-java-alternatives -s java java-1.5.0-sun 하면
usage: update-java-alternatives [--jre-headless] [--jre] [--plugin] [ -t|--test|-v|--verbose]
-l|--list [<jname>]
-s|--set <jname>
-a|--auto
-h|-?|--help
라고 나오네요.
물런 ubuntu 8.04 interpid입니다.
평안