[Android Framework #02] 안드로이드 개발 환경 구축

 
 [Android Tutorial #01] ADT 및 SDK 설치 -  http://croute.me/509
 



페이지 링크 : http://source.android.com/source/downloading.html



인사이드 안드로이드의 2장 내용은 '안드로이드 개발 환경 구축'입니다.

호스트 환경을 구성하고(Virtual box, Ubuntu),
안드로이드 플랫폼 빌드 환경을 구축하고,
안드로이드 애플리케이션 개발환경을 구축하고,
예제 프로젝트를 생성해서,
소스코드를 간단하게 디버깅해보는 식으로 구성이 되어있습니다.

책은 2010년 9월 출판되었고, 안드로이드 2.2, Ubuntu 32bit OS 환경을 기반으로 작성이 되었습니다.

현재는 아이스크림 샌드위치(안드로이드 4.0)이 나온 상태이고, 안드로이드 2.2가 지나고 부터는, 64bit OS에서 안드로이드 소스를 빌드해야합니다.
(호스트 OS가 무슨상관인지는 모르겠지만, 이것때문에 시간이 많이 지나버렸네요. 이걸로만 하루를 잡아먹은것 같은 느낌이네요.)


 


 빌드를 하던 중 출력된 메시지. 그리고 멈춤.
 You are attempting to build on a 32-bit system.
 Only 64-bit build enviroments are supported beyond froyo/2.2.
 



[2.2.1 빌드 유틸리티]

빌드 유틸리티에서는 특별히 수정할 부분은 없어보입니다.
다만, 당시에는 Java 1.5를 사용해야만 하는 상황이었던것 같은데, 현재는 그럴필요는 없다고 생각되어 이미 우분투에 포함되어있는 Java 1.6을 기반으로 스터디를 진행할 생각입니다. 


 

[2.2.2 Repo 설치] 및 내용 중 수정해야하는 부분

기존 명령
 $ cd ~
 $ mkdir bin
 $ export PATH=$PATH:~/bin
 $ curl http://android.git.kernel.org/repo > ~/bin/repo
 $ chmod a+x ~/bin/repo

바뀐 명령(바뀐 주소)
 $ cd ~
 $ mkdir bin
 $ export PATH=$PATH:~/bin
 $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
 $ chmod a+x ~/bin/repo 



[2.2.3 안드로이드 플랫폼의 소스 코드 내려받기] 및 내용 중 수정해야하는 부분

기존 명령
 $ cd ~
 $ mkdir mydroid
 $ cd mydroid
 $ repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo-plus-aosp

바뀐 명령(바뀐 주소)
 $ cd ~
 $ mkdir mydroid
 $ cd mydroid
 $ repo init -u 
https://android.googlesource.com/platform/manifest 
 

추가적으로 정보는 아래의 구글 소스 다운로드 페이지를 참고하세요
(아래의 페이지에 가면, 소스코드 빌드 환경설정부터 모두 나와있습니다. 요즘의 안드로이드 환경에 맞추어 설명이 되있어요. 사실 아래의 페이지를 참고하는게 정확하겠죠.)
 

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



2012.01.10 01:40 ....

이후의 repo sync 라던지 다른 부분에 있어서는 그대로 따라해보면 될듯합니다.
저는 우분투 32bit를 설치했다가 64bit로 빌드하라는 메시지에 현재 우분투를 다시 설치하고 위의 과정들을 반복한 후,  $ repo sync  를 이용해 소스코드를 다운받고있는 중입니다.

인내의 설치과정...


뒤에 이어나오는 안드로이드 애플리케이션 개발환경 구축에 대해서는 지나가도록 하구요, 안드로이드 소스 다운로드가 완료되면 [2.5 애플리케이션 프레임워크 소스 레벨 디버깅]부터 보려구 합니다. 마치는대로 내용을 덧붙일 예정입니다. 
  


2012.01.10 04.38 ....

안드로이드 소스를 다 받은 후, 소스를 빌드하던 중 아래와 같은 상황의 에러가 발생하였습니다. 

While building Android with latest host gcc, it causes the following
build error:

Install: out/host/linux-x86/bin/mkbootimg
host C++: obbtool <= frameworks/base/tools/obbtool/Main.cpp
<command-line>:0:0: error: "_FORTIFY_SOURCE" redefined [-Werror]
<built-in>:0:0: note: this is the location of the previous definition
cc1plus: all warnings being treated as errors

glibc 2.11 이상의 버전에서는 에러가 난다는................


core/combo/HOST_linux-x86.mk 에서 해당 부분을 찾아 코드를 확인하였습니다.
2967937이라는 버그가 있다고 되어있더라구요.

 # Disable new longjmp in glibc 2.11 and later. See bug 2967937.

안드로이드에서는 해당 버그에 대한 처리가 되어있지 않아서 빌드가 되지않았던거였구요.
아래의 링크를 따라가면, 옵션을 바꾸어놓은 코드가 있습니다. 
 

https://github.com/peteralfonso/platform_build/commit/949fafde8733740a9a1b1c4806ade78d10ba3514

기존 코드는 이렇습니다.

 HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0

이 코드를 이렇게 바꾸어줍니다.

 HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 


이 문제를 해결하고 나서 소스코드를 다시 빌드하고 있는중입니다.
소문으로 들어보니, 안드로이드 전체 소스코드 빌드는.. 오래걸린다고 하네요.
아침까지는 안끝날듯하여, 잠시 자고 일어나겠습니다.

결론
 
 인사이드 안드로이드의 2장(환경 구축)에 대한 내용은
 1년 5개월 이상의 시간이 흘렀으므로 신뢰하지 않는다. 

 대신 구글의 소스 다운로드 페이지의 환경 구축 내용을 신뢰한다.

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

 또한 안드로이드 소스코드 다운로드에 관련해서도 아래의 다운로드 페이지를 신뢰한다.

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

 환경 구축은 구글의 페이지를 기반으로 하고,
 책은 개념을 이해하고 공부를 해나가는 과정에서 참고용으로 사용한다.
 
 결론이 나기까지 2일이 걸렸습니다. 아직 환경구축을 못했다니!!!
 자고일어나면 빌드가 끝나있길...

 



2012.01.10 05.19 ....

업무를 정리하고 컴퓨터를 끄려는데, 빌드하던 녀석이.. 에러가 나있는걸 발견하였습니다.

frameworks/compile/slang/slang_rs_export_foreach.cpp: In static member function 'static slang:RSExportForEach* slang::RSExportForEach::Create(slang::RSContext*, const clang::FunctionDecl*)':

frameworks/compile/slang/slang_rs_export_foreach.cpp:247:23: error: variable 'ParamName' set but not used [-Werror=unused-but-set-variable]
cc1plus: all warnings being treated as errors 

make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/slang_rs_export_foreach.o] 오류 1 

이건 뭐... 모든 warning은 error로 취급한다. 이건 소스코드 문젠데 왜 이러지.
일단 지금은 여기까지.

곰곰히 생각해보니.. 우분투 10.4버전을 깔고 다시할까봐요.........



어쨋든, 일을 하면서 진행하는지라, 지난주 11일~12일 넘어가는 새벽, 빌드를 끝마쳤습니다.

 
 VirtualBox

 Ubuntu 10.04(64bit) - build cache를 생각하려면 100GB 정도는 필요합니다.  

  http://source.android.com/source/initializing.html 
  http://source.android.com/source/downloading.html 
 
 위의 링크들을 따라서 소스코드를 다운받고 빌드했습니다.
 저는 안드로이드 2.2.2 를 빌드했구요. (책이랑 같은 버전으로 맞추려구요)

 우분투 10.04로 하니, 별 문제 없이.. 그냥 잘 되더라구요 ^^;;;;;;;
 



안드로이드 '애플리케이션' 개발환경 구축

빌드를 끝마치는 동안(이거 정말 오래걸려요 ㅋ)
이클립스 및 ADT(Android development kit), 안드로이드 SDK 등의 환경 구축을 해줍니다.

[Android Tutorial #01] ADT 및 SDK 설치 -  http://croute.me/509

ADT 및 SDK, 이클립스 설치 관련해서는 여기저기 정리된 곳이 많아요~ ㅎ
(그렇지만 http://croute.me/509 를 참고하셔도 좋습니다.)



추가사항 1 - 빌드 후(2012.01.21)

빌드를 해놓고, 회사에서 진행하는 프로젝트때문에 손대지 못하고 있다가 오늘에서야 보게됐네요.
안드로이드 애플리케이션 개발환경을 구축하고 난 후, 안드로이드 소스코드에서  제공하는 .classpath 파일을 통해 안드로이드 전체 소스코드를 워크스페이스에 추가할 수 있습니다.

그때 아래와 같은 에러가 발생할 수 있어요.

Description Resource Path Location Type 
Project 'AndroidFramwork' is missing required library:
'out/target/common/obj/JAVA_LIBRARIES/google-common_intermediates/javalib.jar' 
AndroidFramwork Build path Build Path Problem 

Description Resource Path Location Type 
Project 'AndroidFramwork' is missing required library: 
'out/target/common/obj/JAVA_LIBRARIES/gsf-client_intermediates/javalib.jar
AndroidFramwork Build path Build Path Problem   


라이브러리 두개를 찾지 못하는 것인데 이 라이브러리들을 제거하고 다른 라이브러리를 추가해주어야 합니다.

다른 라이브러리의 위치는 아래와 같습니다. (새로운 라이브러리의 위치)'

'out/target/common/obj/JAVA_LIBRARIES/android-common_intermediates'

Project -> Properties -> Java Build Path -> Libraries 에서 [Add JARs...]를 이용해 새로운 라이브러리를 추가해 주고, 에러가 나있는 위의 두 라이브러리를 지워줍니다.
결과적으로는 아래와 같은 이미지처럼 될 것입니다.




추가사항 2 - 라이브러리 교체 후(2012.01.21)

자 이제 라이브러리를 교체했습니다. 그럼 에러가 나게 됩니다.
아래의 두 패키지에서 EventLogTags.java 파일이 없다고 에러를 냅니다.

'packages/providers/CalendarProvider/src'
'packages/providers/ContactsProvider/src' 

이 두패키지의 에러를 없애기 위해서 EventLogTags.java 파일을 추가해주거나, 안드로이드 소스코드에서 찾아다 복사해주어야 합니다.

파일의 위치는 각각 아래와 같습니다. 

out/target/common/obj/APPS
/CalendarProvider_intermediates/src/src/com/android/providers/calendar/EventLogTags.java


out/target/common/obj/APPS
/ContactsProvider_intermediates/src/src/com/android/providers/contacts/EventLogTags.java

이 두파일을 각각의 패키지에 복사해서 넣어주면, 에러가 없어지고 아래와 같이 깨끗한 프로젝트가 됩니다. 



이제 안드로이드 소스 수준에서의 디버깅을 할 준비가 된것이죠.
아... 오래 걸렸다..... 
 


Posted by croute

댓글을 달아 주세요

  1. 시스 2012.01.19 09:03  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~ repo sync할때 아래 메세지만 나오고 소스가 받아지지 않는건 어떻게 해야할까요?? ㅜㅜ
    =======================
    fatal: '../platform/abi/cpp.git' does not appear to be a git repository
    fatal: The remote end hung up unexpectedly
    error: Cannot fetch platform/abi/cpp
    =======================
    git이 막힌건지 왜 안되는지 모르겠습니다... orz

  2. 안드로이드흐규 2012.06.03 02:08  댓글주소  수정/삭제  댓글쓰기

    도움 많이 되었습니다. 감사합니다.