Android Framework Full-source 다운로드 및 빌드하기

|

안드로이드 풀소스를 다운받는 방법은 http://source.android.com/source/download.html 이곳에 소개되어 있습니다.
대략적인 방법을 아래에 옮깁니다.

소스 다운로드는 git를 이용하며, 우분투를 기준으로 설명되어 있습니다.
(맥에서의 다운로드 방법도 있지만 이것 역시 버츄어머신으로 리눅스를 돌리는 방법입니다.)

일단 소스 다운로드 및 빌드에 필요한 패키지를 설치해야 합니다.
Gingerbread(2.4)이상은 JDK 6버전이 필요하고, Froyo(2.3)이하는 JDK 5버전이 필요합니다.

- Java 6; Gingerbread and newer
[code bash]
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner"
sudo apt-get update
sudo apt-get install sun-java6-jdk
sudo update-java-alternatives -s java-6-sun
[/code]

-Java 5; Froyo and older
[code bash]
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu dapper main multiverse"
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu dapper-updates main multiverse"
sudo apt-get update
sudo apt-get install sun-java5-jdk
sudo update-java-alternatives -s java-1.5.0-sun
[/code]

우분투는 기본적으로 root 계정이 없습니다. (있긴 있습니다만 직접 로그인은 안되게 되어 있죠...)
그래도 시스템 관련 명령을 실행하려면 관리자 권한이 필요한데, 이때 쓰는것이 sudo입니다.
커맨드 앞에 sudo 를 넣어주게 되면 관리자 권한으로 실행되게 됩니다.

add-apt-repository 는 apt에 리파짓을 추가합니다.
우분투는 패키지를 관리하는데 apt를 쓰는데, apt-get으로 새 패키지를 설치할수 있습니다.
이 때 apt-get 을 함에 있어 실제 파일을 받아오는게 리파짓(저장소)입니다.

기본적으로 추가되어있는 리파짓에는 Sun의 JDK가 아닌 openjdk라는게 들어가있습니다.
그래서 Sun의 JDK를 설치하기 위해 리파짓을 추가해주고,

apt-get update : 이건 추가한 리파짓을 리로드합니다.

apt-get install [패키지명]
그리고 새 패키지를 설치합니다. 필요한 자바 버전에 맞게 패키지명을 넣어주면 됩니다.

update-java-alternatives
이건 자바의 우선순위를 변경하는겁니다. 만약 JDK가 5, 6 둘 다 설치되어 있는 경우
기본적으로 어떤 버전을 사용할 것인지 지정하는겁니다.
$ update-java-alternatives -l
을 실행하면 사용 가능한 자바 버전이 표시됩니다.



JDK를 설치하고, 다른 패키지들도 설치합니다.
[code bash]
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib \
g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev \
lib32readline5-dev lib32z-dev
[/code]

꽤 깁니다만, 단지 패키지 갯수가 많은 것뿐입니다.

이때, 패키지를 못찾는 경우가 발생할 수 있습니다.
E:  Unable to locate package 어쩌구저쩌구....

이렇게 나오면 패키지명을 직접 찾아주어야 합니다.

패키지를 찾는 명령은
[code bash]
apt-cache search [키워드]
[/code]
입니다.

키워드는 정규식으로 입력이 가능하고,
예를 들어, 현재 lib32ncurses5-dev를 못찾는다고 나오는데,
이것을 찾으려면
[code bash]
apt-cache search libncurses
[/code]
라고 실행했을때 나오는 목록 중 libncurses5-dev라는게 있습니다. 이것을 설치하시면 될듯 합니다..

프레임워크를 수정하시려면 Valgrind도 설치해주는것을 권장하고 있습니다.


여기까지 하면 필요한 패키지는 설치가 되었습니다.
이제 소스를 다운받을 차례.

일단 repo 실행 스크립트를 받아야 합니다.
[code bash]
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl http://android.git.kernel.org/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
[/code]

홈 디렉토리 아래에 bin디렉토리를 만들고 PATH를 지정한 다음 (~2 line)
repo주소로부터 스크립트를 다운받고 (3 line)
다운받은 스크립트에 실행권한을 줍니다 (4 line)

그리고 나서 이 스크립트를 통해 소스를 받게 됩니다.
먼저 소스를 다운받을 위치에 git를 초기화합니다.

[code bash]
$ mkdir [다운받을디렉토리]
$ cd [다운받을디렉토리]

$ repo init -u git://android.git.kernel.org/platform/manifest.git
[/code]
repo init을 하게 되면 현재 디렉토리에 git 초기화를 하게 됩니다.
이때 최신 브렌치가 아닌 이전 브렌치를 받고 싶으면
-b 옵션을 사용하면 됩니다.

예를 들어 Froyo를 받으려 한다면,
[code bash]
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo
[/code]
이런식으로 cupcake, eclair, gingerbread...등등을 받으면 됩니다.

repo init 중간에 이름과 이메일을 입력하라는 프롬프트가 뜨는데
이건 git유저를 입력하는 절차입니다.
안드로이드 자체가 오픈소스이다보니 누구든 받고 올릴수가 있는데, 이때 사용할 계정입니다.
받기만 하실거라면 그냥 기본값 그대로 하셔도(엔터, 엔터) 상관 없고,
수정하여 올리실 목적이면 계정을 입력하시면 됩니다. 구글 계정으로 가능하다고 하는군요.

repo initialized in 어디어디
이런 메세지가 나오면 초기화가 완료된 것이고,

이제 실제로 소스를 다운받을 차례입니다.
[code bash]
$ repo sync
[/code]
이건 시간이 꽤 걸립니다. 그냥 켜두면 언젠간 끝납니다... orz

소스를 다운받았으면 이제 한번 돌려봐야 겠죠...

빌드는 다음과 같이 할 수 있습니다.
소스를 다운받은 디렉토리로 들어가서,
[code bash]
$ source build/envsetup.sh
$ lunch
$ make
[/code]
첫번째 명령은 환경 변수 설정이고, lunch를 실행하면 뭔가를 물어보는데 이건 그냥 generic으로 선택해주시면 됩니다. (그냥 엔터)
그리고 make를 하게 되면 빌드를 시작하게 되는데
이것도 무지 오래 걸립니다. 몇시간정도....

빌드가 끝나게 되면 out/target/product/generic 위치에
system.img, ramdisk.img, userdata.img 이 세개의 파일이 생기는데,
이 파일을 에뮬레이터에서 확인해 보고 싶다면
안드로이드SDK/platforms/버전별/images 에 넣어 AVD를 만들고 구동해보면 됩니다.

물론 원본 이미지들은 따로 백업해놓는 쎈쓰.....


궁금하신점 있으면 댓글 주세요.

And