티스토리 뷰

크리에이티브 커먼즈 라이선스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이선스에 따라 이용하실 수 있습니다.
본문

 안드로이드 Full source를 다운 받아서 PDK 개발을 진행할 수 있습니다. PDK는 Platform Developer's Kit의 약자로써 안드로이드 전체 소스코드 내에서 플랫폼의 프레임워크를 개발하거나 SDK, NDK를 모두 개발 할 수 있습니다. 각각 간단하게 정의하면 SDK는 안드로이드를 Java로 개발하는 것이고, NDK는 Java와 C/C++을 이용하여 개발하는 것입니다.

 PDK를 개발하기 위한 과정으로 안드로이드 전체 소스코드를 다운 받아서 진행해야 합니다. 이 전체 소스코드를 다운 받는 방법은 AOSP(Android Open Source Project)에 잘 설명되어 있습니다.



현재 PDK및 안드로이드 빌드를 위한 환경

 저는 Ubuntu 를 이용하여 안드로이드 빌드를 진행하였습니다. 최근 권장하는 안드로이드 빌드 환경으로 Ubuntu 12.04 버전을 추천하고 있습니다. AOSP 홈페이지에서도 12.04 64 bit를 기준으로 빌드 환경 구성에 대해서 가장 잘 설명하고 있습니다.

 저는 가상 머신을 이용하여 환경을 구성하고, Ubuntu 12.04 64 bit 환경을 기준으로 설명합니다. AOSP 버전으로 4.4.2 버전을 다운 받아 빌드하였습니다.


 사용 OS : Ubuntu 12.04 64bit

 아래 링크를 통해서 Virtualbox에 ubuntu 설치하기를 따라하실 수 있습니다.

 Virtualbox Ubuntu 12.04 설치하기http://thdev.net/237


 가상 머신 환경 : 2 GB 메모리, 40 GB 이상의 디스크 공간 정도면 충분한것 같습니다. 메모리는 꼭 2 GB 이상이면 좋습니다.

                        make 시에 상당한 메모리를 사용하고 1 GB로 진행하였을 경우 메모리 부족 오류가 발생하였습니다.

 JDK : JDK 1.6(진저브레드 이상은 JDK 1.6을 요구하고, 프로요 이하는 JDK 1.5를 요구합니다.)

 Git : 1.7

 Python : 2.6

 GNU Make : 3.81

 GCC의 경우 ubuntu 12.04를 설치하면 4.6 버전이 설치되어 있습니다.


빌드 환경 구성

 빌드 환경 구성으로 AOSP 홈페이지에 설명되어 있는 프로그램을 다운 받아 설치하면 됩니다. 설치 중에 이미 설치되어 있거나, 약간 다른이름이 존재할 수 있습니다. 아래가 1줄의 명령어이지만 1개씩 설치하는걸 추천합니다.

 빌드 환경 구성 : http://source.android.com/source/initializing.html


Java 설치

 Java의 경우 AOSP 홈페이지의 설명으로는 설치가 불가능합니다. Ubuntu에서 기본 패키지에서 빠져서 아래와 같이 설치해야합니다. 그리고 오픈 JDK로는 안드로이드 빌드가 되지 않습니다.

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

sudo apt-get install oracle-java6-installer


 만약 java가 6, 7이 두개가 설치되어 있는 경우가 있을 수 있습니다. 아래 명령어를 통해서 java 6으로 변경하시면 됩니다.

sudo update-alternatives --config java


를 실행하시고, java 6 버전으의 숫자를 입력하시면 됩니다.

출처 : http://askubuntu.com/questions/272187/setting-jdk-7-as-default


빌드용 프로그램 설치

 빌드에 필요한 프로그램은 아래와 같습니다. 상당히 많이 존재하는데 가능하다면 1개씩 설치하시길 권장드립니다. 이미 설치되어 있으면 아래 명령어가 안먹히는 경우가 있습니다.

$ sudo apt-get install git-core gnupg flex bison gperf build-essential \

  zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \

  x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \

  libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \

  libxml2-utils xsltproc


Java Path 등록

 아래와 같이 Java Path를 등록해야 합니다. JAVA_HOME의 경로는 아래와 같은 경로가 아닐 수 있으니 직접 경로를 확인하신 다음 등록하시기 바랍니다.

vi ~/.bashrc에 등록한다.

# Java Setting

export JAVA_HOME=/usr/lib/jvm/java-6-oracle

export ANDROID_JAVA_HOME=$JAVA_HOME


안드로이드 4.4.2 다운로드

 빌드환경 구성이 끝났습니다. 어렵지 않게 간단하게 환경을 구성할 수 있습니다. 안드로이드 4.4.2를 빌드하기에 가장 적합한 환경으로 Ubuntu 12.04 64 bit가 가장 좋다고 생각하고, 실제로 문제 없이 빌드가 된 환경이라서 위와 같이 구성하였습니다. 이제 환경 구성이 끝났으니 안드로이드 Full Source를 다운 받아야겠습니다. 저는 안드로이드 4.4.2 최신버전을 다운로드 받았습니다.

 안드로이드 소스코드 다운로드 방법http://source.android.com/source/downloading.html


 아래 링크를 통해 안드로이드 버전과 기기 정보를 확인하신 후 다운로드 주소가 변경될 수 있습니다.

 안드로이드 버전 확인 : http://source.android.com/source/build-numbers.html


Installing Repo 설정

 repo를 등록할 임시 폴더를 생성합니다. 저는 ~/ 아래에 bin 폴더를 생성하였습니다. mkdir ~/bin 명령으로 bin 폴더를 생성하고, PATH 등록하였습니다. 여기서 PATH를 등록하지 않으시면 풀 소스 다운로드시에 진행이되지 않습니다. 진행 중에 경로를 찾지 못한다는 오류가 난다면 여기의 PATH 등록이 되지 않은것이므로 PATH 등록을 다시해주시면 됩니다.

1. bin 폴더 생성

$ mkdir ~/bin

$ PATH=~/bin:$PATH


Repo 등록

 안드로이드를 다운받을 repo를 등록하고 권한을 a+x 권한을 주면 됩니다. 바로위에서 생성한 ~/bin/ 아래 repo라는 폴더를 생성하여 repo 등록을 진행합니다.

$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

$ chmod a+x ~/bin/repo


Android를 다운 받을 폴더 생성

 안드로이드를 다운 받을 폴더를 생성합니다. 이 폴더는 안드로이드 전체 소스코드가 다운 받아져야하는 폴더로 bin 폴더가 있는 곳에 아래와 같이 생성하셔도 됩니다. 아니면 원하시는 경로 상관 없이 생성하시면 됩니다.(Ubuntu이니 ~/ 폴더 아래가 좋습니다. / 폴더는 관리자 권한을 필요로 하니 피하는게 좋습니다.)

 저는 ~/temp 폴더를 생성하였습니다.

$ mkdir temp

$ cd temp


안드로이드 소스 다운로드

 이제 모든 설정이 끝났습니다. 안드로이드 Full Source를 다운 받으실 수 있는 환경이 구성되었습니다. repo init 명령어를 통해서 어느 주소에서 안드로이드 소스를 받을지를 지정하면 됩니다. 이후 sync 명령어를 통해서 소스를 다운 받으면 됩니다.


 여기서 중요한 init 명령어를 살펴보겠습니다.

 안드로이드 버전 확인http://source.android.com/source/build-numbers.html 에서 확인하고, 내가 필요로하는 Source를 다운 받을 수 있습니다. init 명령어를 아래와 같이 2가지로 사용할 수 있습니다.


 옵션의 -b를 지정하면 특정 소스코드를 다운 받게되고, -b를 지정하지 않으면 기본 소스코드를 다운 받습니다. 최신 버전을 받으실 것이라면 -b 옵션을 사용하시고, 안드로이드 버전 확인 페이지에서 버전 확인 후 진행하시면 됩니다. 현재 가장 최신은 android-4.4.2_r1 버전으로 Nexus 4, 5, 7, 10용입니다.

repo init -u https://android.googlesource.com/platform/manifest

또는

repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1


 repo sync를 진행합니다. 진행하는 방법은 2가지입니다. -j 옵션을 지정하면 다중 다운로드가 됩니다. 다중 다운로드를 진행하므로 다운로드 속도는 그냥 sync 보다 빠릅니다. 그만큼 메모리를 많이 차지하니.. 적당한 옵션을 지정하여 사용하시면 됩니다.

repo sync

또는

repo sync -j3


 다운이 완료되면 아래와 같습니다. 총 407개의 리스트를 각각 다운로드 완료하면 됩니다. 중간에 중단되신다면 repo sync 명령으로 다시 진행이 가능합니다.




Android 4.4.2 빌드

 안드로이드 4.4.2 빌드를 하기 위한 환경이 모두 끝났습니다. repo sync를 통해서 다운 받은 소스코드를 확인하실 수 있습니다. 다운 받은 소스코드를 make 명령어를 통해서 빌드할 수 있지만.. 4.4.2에는 GCM이 비어있어서 오류가 발생하더군요. GCM을 다운 받고 복사한 후에 make를 진행하도록 하겠습니다.


GCM 다운로드 및 폴더 생성

 GCM 다운로드는 :http://stackoverflow.com/questions/16385927/building-aosp-4-2-2-on-ubuntu-12-10-x64-fail 을 참고하여 작성하였습니다.

 GCM 코드는 안드로이드 Full source에 포함되어 있지 않습니다. 더군다나 폴더가 vendor 아래에 포함되어 있더군요. 그래서 아래와 같이 GCM 소스코드 다운로드 방법을 함께 추가하였습니다.

 GCM 소스 다운로드 : https://code.google.com/p/gcm/source/checkout


 다운 받은 안드로이드 temp 폴더에서 아래 명령어를 입력합니다. vendor/unbundled_google/libs 폴더를 생성하고 이동합니다.

$ mkdir -p vendor/unbundled_google/libs

$ cd vendor/unbundled_google/libs


 libs 폴더에서 아래 명령을 이용해 gcm 소스코드를 다운 받습니다.

git clone https://code.google.com/p/gcm/


Android 명령셋 등록

 안드로이드에서 제공하는 명령셋을 등록합니다. 추후 mm 등의 명령어를 사용할 때 필요로 합니다.

$ source build/envsetup.sh

또는

$ . build/envsetup.sh


make

 최종적으로 make를 진행할 수 있는 환경이 만들어졌습니다. 이번글에서는 make까지 진행하는 작업을 하므로 아래와 같이 마지막 명령어를 진행합니다.

 역시 repo sync 명령어와 마찬가지로 -j 옵션을 통해서 추가 쓰레드를 진행할 수 있습니다. 가상 머신을 기본값으로 하셨다면 -j3이 적당해보입니다. 기본적으로 자신의 CPU Thread 수만큼 지정해주시는게 가장 좋은 성능을 보입니다.

 적당한 멀티 쓰레드 수는 Cores(실제 코어) * 1.1 을 해주는 값이 적당하다고 합니다. i7의 경우는 실제 코어가 4개이니 4 * 1.1의 4 또는 5가 적당하고 i5는 2 * 1.1 = 3 또는 2가 적당한값 같습니다.

$ make

또는

$ make -j3


마무리

 안드로이드 AOSP 홈페이지에 모두 설명이 잘되어 있지만 저는 Android 4.4.2를 Ubuntu 12.04 64 bit 가상 머신 환경에서 진행하는 방법을 설명하였습니다. 그냥 Ubuntu를 설치된 환경이라도 똑같은 코드를 통해서 진행할 수 있습니다. 참고로 Ubuntu 12.04 이상의 버전에서 하였을 경우 풀 소스 make 시에 오류가 날 수 있다는 점 주의하시기 바랍니다. 검색하면 오류가 나는 이유가 대부분 자세하게 나와있으며 해결 방법 역시 잘 나와있습니다.

 저는 위의 환경에서 위와 같은 방법으로 했을 때 오류 없이 진행할 수 있었습니다. 일단은 완벽한 환경으로 위와 같이 진행할 수 있었기에 흔적을 남겨두려고 작성하는 글입니다. 만약 진행 상 오류가 있으시다면 질문 주시면 확인을 해보도록 하겠습니다.

 이상입니다.

개인 광고 영역


댓글
  • 프로필사진 학생 안녕하세요. 우분투에서 안드로이드 풀소스 빌드해서 화면출력부분의 프레임워크 소스를 수정해보려고 해서 이 게시물을 보고 셋팅을 완료했는데 이 다음에 빌드된 안드로이드 img 파일을 emulator로 실행시켜보려고 ./emulator를 실행했는데

    If you are an Android SDK user, please use '@<name>' or '-avd <name>' to start a given virtual device (see -help-avd for details).

    Otherwise, follow the instructions in -help-disk-images to start the emulator

    이라고 나오면서 안되는데 다른데 다 검색해봐도 그냥 ./emulator만 하면 실행이 된다고 나와있는데
    저렇게 나와서 혹시나 답변을 얻을 수 있을까 싶어서 질문드립니다.
    2014.04.09 19:35 신고
  • 프로필사진 BlogIcon taehwan 빌드하셨다면. http://s.android.com/source/building-running.html#run-it 부분을 살펴보셔야 할것 같습니다. 저도 직접 해본게 아니라서 자세한 내용을 답변을 못드려 죄송합니다. 2014.04.09 23:43 신고
  • 프로필사진 실험실청소부 학생입니다.
    nexus4에 lollipop빌드 하려고하는데요,
    안드로이드 버전 android-5.1.0_r5이고 타겟은 aosp_mako-eng 입니다.
    build/core/base_rules.mk:154: *** prebuilts/common/jarjar: MODULE.HOST.JAVA_LIBRARIES.jarjar already defined by external/jarjar. Stop.
    이런 에러가 뜨네요.
    뭐가 문제인지 모르겠네요. 도움 부탁드립니다.
    me@mincheolsung.com로 도움주시면 너무나 감사하겠습니다!
    2015.05.20 01:25 신고
  • 프로필사진 BlogIcon taehwan 메일로 답변 드렸습니다. 2015.06.11 19:16 신고
  • 프로필사진 AOSP개고생중 안녕하세요.
    AOSP 마시멜로 6.2 빌딩 시도중인데 완전히 막혔습니다.

    Ubuntu 16.4 xenial 버전을 맥의 패럴렐즈 가상머신으로 돌려서 빌딩을 시도하고 있습니다.

    System.img를 최종적으로 만드는 단계의 에러입니다. 근데 구글링 해봐도 사례가 올라온게 없더군요.

    메이크 실패 메시지는 아래와 같습니다.
    boot.oat 파일에 문제가 있다는 말 같은데 파일은 멀쩡히 잘 있습니다.

    dex2oatd F 31431 31431 art/compiler/image_writer.cc:1463] Unable open oat file: Failed to map ELF file: mmap((nil), 56885248, 0x3, 0x1, 3, 0) of file 'out/target/product/generic/symbols/system/framework/arm/boot.oat' failed: Invalid argument.
    See process maps in the log.

    mmap 함수에서 에러를 리턴하는것 까지는 확인했습니다만 함수 본체중 C 코드로 이루어진 부분에서는 에러 리턴할 이유가 없어 보였고 어셈블리로 코딩된 부분에서 에러리턴 하는거 같은데 어셈블리어라 왜 에러를 리턴하는지 짐작이 안가네요.

    구글이 빌딩하는데 장애물이 많은 상태의 소스를 왜 공개하는지 도무지 이해가 안가네요.

    설정과 컴파일에 시간낭비가 너무 심합니다.
    우분투는 메모리 스와핑 기능이 없는지 빌딩하는 도중에 가상머신에 할당한 13기가 램메모리를 94%까지 사용하기도 하더군요.

    빌딩하는 도중에 게시글에는 적지 않은 많은 빌딩에러들이 있었는지도 정말 궁금합니다.

    PS.
    art/compiler/image_writer.cc 파일의 ImageWriter::SetOatChecksumFromElfFile 함수에서 boot.oat 파일을 열면서 발생하는 에러 메시지입니다. 체크섬 계산 하기도 전에 ElfFile::Open 에서 에러 리턴 합니다. 즉 열지를 못하는건데 파일은 멀쩡히 있습니다.
    2016.08.13 12:53 신고
  • 프로필사진 BlogIcon taehwan 안녕하세요. 장문의 질문을 주셨는데.... 저도 이걸 해당 글 작성할때만 작업을 해보아서 현재 최신 버전에 어떤 오류가 있는지는 모르겠습니다.

    http://source.android.com/source/initializing.html

    해당 글에 참고해서 진행을 해보아야 합니다.

    그리고 우분투 버전이 너무 최신이면 또... 정상 빌드가 안되긴 하더라구요. 그래서 권장하는 버전에서 작업을 해주는게 가장 깔끔하게 빌드가 이루어졌었던것 같습니다. 저도 14.04 LTS 이후로는 빌드해본게 아니라서 다음의 글을 참고하셔서 빌드환경 구축해보시는게 좋을것 같은데.. 저도 말씀하신 자세한 부분에 대해서 설명 드릴 정도가 아니라서... 질문에 대한 답변을 드릴 수준이 아니라서 죄송합니다.

    https://realm.io/kr/news/younghocha-nexus/
    2016.08.15 15:27 신고
  • 프로필사진 AOSP개고생중 Ubuntu 12에서 컴파일을 시도 했습니다. 무려 7 시간 빌드 후에 정확히 같은 지점에서 빌드 Fail 입니다 T _ T.
    정말 이상하네요.
    우분투 14에서도 같은 지점에서 에러였습니다.
    인터넷에는 우분투 16 버전으로도 컴파일 했다는 글이 넘쳐나는데 왜 저만 안되는지 허참.
    버전 문제도 아닌듯 하고 빌드 전에 빌드용 Dependency 패키지 설치에 한번에 설치가 안되고 두루뭉실하게 끝나는 것이 몇개 있었는데 혹시 이것을 간과한것이 아닌지 설치 점검 해보고 다시 시도해 봐야 겠네요.
    계획상 이거 안할 수도 없어서 참 난감합니다.
    2016.08.16 20:29 신고
  • 프로필사진 BlogIcon taehwan 7시간이나 빌드를 하셨다니.. 아... 저도 다시 한번 해봐야겟네요. 저도 딱 한번 빌드해본것이고.. 클린 상태로 빌드한 것이였습니다.

    아무래도 Dependency 설치하는 과정에서 실패한 부분에 문제가 있는것 아닐까 생각해봅니다.

    Java 버전도 확인한번 더 하시구요.
    2016.08.16 22:40 신고
  • 프로필사진 AOSP개고생중 다음 패키지들을 apt-get으로 모두 설치 확인하고 컴파일 했습니다만 역시 같은 지점에서 같은 원인으로 빌드 실패 했습니다. 메모리 배치 주소값이 틀린 AOSP를 구글이 올릴 리가 없는데..마시멜로 빌드 성공하신 분들 조언 부탁드립니다. xspire@msn.com

    git ccache automake lzop bison gperf build-essential zip curl zliblg-dev zliblg-de:i386 g++-multilib python-networkx libxml2-utils bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush schedtool dpkg-dev liblz4-tool make optipng maven
    2016.08.24 16:32 신고
댓글쓰기 폼
Total
5,089,293
Today
541
Yesterday
1,351
«   2018/06   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함