태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Mac OS X 10.7 (Lion) 에서 안드로이드 빌드환경 설정하기

2012.08.07 19:50

안드로이드 빌드는 리눅스(우분투)에서 하는 것을 권장하고 있지만,

매킨토시를 사용하고 계시다면 맥에서 빌드하는 것도 가능합니다.

(최근에는 안드로이드 개발도 맥에서 많이 하고 있지요..ㅎㅎ)


하지만, 리눅스와 맥은 환경이 다르기 때문에 몇가지 추가적인 환경설정이 필요합니다.

이 포스트에서는 OSX 10.7 (Lion)에서 안드로이드 빌드 환경을 설정하는 방법을 알아보겠습니다.


1. Brew for Mac 설치


Brew(Homebrew)는 리눅스의 apt-get 명령어와 같이

빌드에 필요한 패키지를 쉽게 설치할 수 있도록 도와주는 패키지 관리자입니다.



brew를 설치하기 위해 터미널에서 다음 명령어를 입력합니다.


ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"


설치 후 문제점이 없는지 확인하기 위해 brew doctor를 실행합니다.


$ brew doctor



주의

Command line Tools가 설치되어 있어야 합니다. Command line tools는 애플 개발자 홈페이지를 통해 다운로드하거나 XCode의 Preferences -> Downloads -> Components 탭에서 설치할 수 있습니다.


문제가 없다면 다음 명령어를 입력하여 빌드에 필요한 패키지를 설치합니다.


$ brew install git coreutils findutils gnu-sed gnupg pngcrush



2. 안드로이드 소스를 받을 디스크 이미지 생성하기


안드로이드를 빌드하려면 대/소문자를 구분하는 파일시스템이 필요합니다.

디스크 관리자(hdiutil)을 사용하여 디스크 이미지를 생성합니다.

안드로이드 소스 용량이 꽤 크므로 디스크 크기는 넉넉하게 잡는 것이 좋습니다. (최소 40GB 권장)

다음 명령어를 입력하여 디스크 이미지를 생성합니다.


$ hdiutil create -type SPARSE -fs "Case-sensitive Journaled HFS+" -size 60g -volname "Android" -attach ~/Android


위에서 size에 들어갈 값은 자신이 원하는 크기로 조절하시면 되고, attach 뒤에 들어가는 인자는 만들어진 디스크 이미지를 저장할 경로로 이 또한 자신이 원하는 위치로 지정하면 됩니다.


디스크 이미지가 생성되었다면, 디스크를 마운트하여 소스를 받을 준비를 합니다.


3. repo 다운로드, 설정 및 소스 다운로드


repo는 Git 저장소에 있는 안드로이드 소스를 쉽게 다운로드하기 위한 툴입니다.

repo를 다운로드하기 전에 먼저 자신의 홈 폴더에 /bin 디렉토리를 생성합니다.

디렉토리를 생성한 후 이를 PATH에 추가합니다.


$ mkdir ~/bin

$ PATH=~/bin:$PATH


다음, repo를 다운로드한 후 repo를 실행할 수 있도록 권한을 변경해줍니다.


$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo


이제 소스를 다운로드할 준비가 되었습니다.

소스를 다운로드하기 위해 앞에서 생성한 디스크 이미지로 이동한 후,

repo init을 실행하여 소스 다운로드를 위핸 설정을 해줍니다. 여기에서는 master 브랜치를 다운로드하는 경우를 가정합니다.


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


이제 소스를 받을 준비가 모두 끝났습니다. repo sync를 입력하면  master 브랜치의 소스를 다운로드합니다.

소스 용량이 꽤 크므로 네트워크 사정에 따라 2~3시간까지 소요될 수도 있습니다.


$ repo sync


소스 다운로드가 끝나면 다음과 같이 이쁘게(?!) 파일들이 들어와 있는 것을 확인할 수 있습니다.



4. 빌드하기


빌드를 하기 위해 먼저 빌드 명령어 설정이 필요합니다.

다음 명령어를 사용하여 빌드 명령어를 설정합니다.


$ source build/envsetup.sh


다음과 같이 빌드 명령어가 설정된 것을 확인할 수 있습니다.

다음으로 빌드할 타깃을 설정합니다. lunch 명령어를 사용하여 타깃을 설정할 수 있으며, 자세한 내용은 여기를 참조하세요.

lunch를 사용하여 타깃을 설정한 후에 make를 입력하면 설정한 타킷을 빌드하게 됩니다.


주의

OSX 10.7을 클린설치 한 경우 OSX 10.6 SDK가 포함되어 있지 않습니다. (XCode 4.4에 포함되어 있지 않기 때문) 때문에 그냥 빌드를 실행하려 하면 다음과 같은 메시지가 표시됩니다.


build/core/combo/HOST_darwin-x86.mk:38: *****************************************************
build/core/combo/HOST_darwin-x86.mk:39: * Can not find SDK 10.6 at /Developer/SDKs/MacOSX10.6.sdk
build/core/combo/HOST_darwin-x86.mk:40: * or /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk
build/core/combo/HOST_darwin-x86.mk:41: *****************************************************
build/core/combo/HOST_darwin-x86.mk:42: *** Stop..  Stop.


이를 해결하려면 애플 개발자 홈페이지에서 XCode 4.3을 다운로드한 후, 패키지 내용 보기 -> Contets/Developer/Platforms/MacOSX.platform/Developer/SDKs/에 있는 MacOSX10.6.sdk를 /Developer/SDKs에 복사해주면 됩니다.


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

커니 AOSP , , , , , , , , , , , , , ,

  1. Blog Icon
    안녕하세요

    제가 리눅스로만 빌드하다가 맥으로 오게되었는데....
    강좌를 따라하다가

    Checking build tools versions...
    build/core/main.mk:100: ************************************************************
    build/core/main.mk:101: You are building on a case-insensitive filesystem.
    build/core/main.mk:102: Please move your source tree to a case-sensitive filesystem.
    build/core/main.mk:103: ************************************************************
    build/core/main.mk:104: *** Case-insensitive filesystems not supported. Stop.

    이런 오류가 발생하는데 도저히 잡을수가없네요,,... 이런경우는 어떻게 해야할까요?

  2. 대소문자 구분을 지원하는 파티션에 받아야합니다.

    $ hdiutil create -type SPARSE -fs "Case-sensitive Journaled HFS+" -size 60g -volname "Android" -attach ~/Android

    위의 명령어에서 디스크 이미지의 파일시스템을 "Case-sensitive Journaled HFS+"로 만들어주는 이유죠.

  3. Blog Icon
    감사합니다!

    아 정말 감사합니다 ^^

    그 문제는 해결했는데...

    make: *** [out/host/darwin-x86/obj/EXECUTABLES/emulator-arm_intermediates/emulator-arm] Error 1


    이 에러는 뭔지모르겠네요,,, 구글링해도안나오구요 ㅠㅠ

  4. 에러 원인이 나오지 않나요?
    그부분으로 구글링해보는걸 추천합니다.
    단 명확한 해결책이 검색되지 않을 가능성이 높긴 합니다...

    http://s.android.com/source/known-issues.html

    여기에 몇몇 이슈들이 정리되어 있으니 한번 참고해보세요.

  5. Blog Icon
    감사합니다.

    흠 몇 가지 오류들은 구글링으로 해결했는데 이건 해결이 안되네요 ..ㅎ

    아 그리고 책은 어디서 살수있나요?..

    이 블로그 너무 좋아서 책으로 사려고하는뎅...

  6. 인터넷서점이나 오프라인 서점에서 '기초부터 다지는 커니의 안드로이드'를 검색하시면 됩니다 :)

  7. Blog Icon
    beila

    좋은 정보 감사합니다. 따라해봐야겠네요.
    한 가지 추가하자면 repo 설치할 때
    brew install repo
    로도 간단히 설치할 수 있네요.^^

  8. Blog Icon
    WS dongho

    Dongho-MacBook-Pro:cm gangdongho$ brunch mako
    including vendor/cm/vendorsetup.sh
    Looking for dependencies

    ============================================
    PLATFORM_VERSION_CODENAME=REL
    PLATFORM_VERSION=4.2.1
    TARGET_PRODUCT=cm_mako
    TARGET_BUILD_VARIANT=userdebug
    TARGET_BUILD_TYPE=release
    TARGET_BUILD_APPS=
    TARGET_ARCH=arm
    TARGET_ARCH_VARIANT=armv7-a-neon
    HOST_ARCH=x86
    HOST_OS=darwin
    HOST_OS_EXTRA=Darwin-12.2.1-x86_64-i386-64bit
    HOST_BUILD_TYPE=release
    BUILD_ID=JOP40D
    OUT_DIR=/Volumes/Android/cm/out
    ============================================

    ============================================
    PLATFORM_VERSION_CODENAME=REL
    PLATFORM_VERSION=4.2.1
    TARGET_PRODUCT=cm_mako
    TARGET_BUILD_VARIANT=userdebug
    TARGET_BUILD_TYPE=release
    TARGET_BUILD_APPS=
    TARGET_ARCH=arm
    TARGET_ARCH_VARIANT=armv7-a-neon
    HOST_ARCH=x86
    HOST_OS=darwin
    HOST_OS_EXTRA=Darwin-12.2.1-x86_64-i386-64bit
    HOST_BUILD_TYPE=release
    BUILD_ID=JOP40D
    OUT_DIR=/Volumes/Android/cm/out
    ============================================
    find: `src': No such file or directory
    build/core/base_rules.mk:525: system/core/mkbootimg/Android.mk: Module "unpackbootimg" has useless module tags: eng. It will be installed anyway.
    build/core/Makefile:44: warning: overriding commands for target `/Volumes/Android/cm/out/target/product/mako/system/etc/mkshrc'
    build/core/base_rules.mk:502: warning: ignoring old commands for target `/Volumes/Android/cm/out/target/product/mako/system/etc/mkshrc'
    PRODUCT_COPY_FILES device/sample/etc/apns-full-conf.xml:system/etc/apns-conf.xml ignored.
    build/core/Makefile:44: warning: overriding commands for target `/Volumes/Android/cm/out/target/product/mako/system/etc/permissions/android.software.live_wallpaper.xml'
    build/core/base_rules.mk:502: warning: ignoring old commands for target `/Volumes/Android/cm/out/target/product/mako/system/etc/permissions/android.software.live_wallpaper.xml'
    No private recovery resources for TARGET_DEVICE mako
    host C: mkbootimg <= system/core/mkbootimg/mkbootimg.c
    host C: libmincrypt <= system/core/libmincrypt/rsa.c
    host C: libmincrypt <= system/core/libmincrypt/rsa_e_3.c
    host C: libmincrypt <= system/core/libmincrypt/rsa_e_f4.c
    host C: libmincrypt <= system/core/libmincrypt/sha.c
    host C: acp <= build/tools/acp/acp.c
    host C++: libhost <= build/libs/host/pseudolocalize.cpp
    host C: libhost <= build/libs/host/CopyFile.c
    /var/folders/8m/ghbh36d16yq790m1h_23h_dw0000gn/T//ccPHIK0o.s:173:FATAL:Symbol _RSA_verify.eh already defined.
    make: *** [/Volumes/Android/cm/out/host/darwin-x86/obj/STATIC_LIBRARIES/libmincrypt_intermediates/rsa.o] Error 1
    make: *** Waiting for unfinished jobs....
    system/core/mkbootimg/mkbootimg.c: In function ‘write_padding’:
    system/core/mkbootimg/mkbootimg.c:89: warning: comparison between signed and unsigned
    system/core/mkbootimg/mkbootimg.c: In function ‘main’:
    system/core/mkbootimg/mkbootimg.c:191: warning: pointer targets in passing argument 1 of ‘__builtin___strcpy_chk’ differ in signedness
    system/core/mkbootimg/mkbootimg.c:191: warning: pointer targets in passing argument 1 of ‘__inline_strcpy_chk’ differ in signedness
    system/core/mkbootimg/mkbootimg.c:236: warning: assignment discards qualifiers from pointer target type
    system/core/mkbootimg/mkbootimg.c:249: warning: comparison between signed and unsigned
    system/core/mkbootimg/mkbootimg.c:252: warning: comparison between signed and unsigned
    system/core/mkbootimg/mkbootimg.c:256: warning: comparison between signed and unsigned
    /var/folders/8m/ghbh36d16yq790m1h_23h_dw0000gn/T//ccG6DfuD.s:781:FATAL:Symbol _subM.eh already defined.
    /var/folders/8m/ghbh36d16yq790m1h_23h_dw0000gn/T//ccaM0xSS.s:1002:FATAL:Symbol _subM.eh already defined.
    make: *** [/Volumes/Android/cm/out/host/darwin-x86/obj/STATIC_LIBRARIES/libmincrypt_intermediates/rsa_e_3.o] Error 1
    make: *** [/Volumes/Android/cm/out/host/darwin-x86/obj/STATIC_LIBRARIES/libmincrypt_intermediates/rsa_e_f4.o] Error 1
    /var/folders/8m/ghbh36d16yq790m1h_23h_dw0000gn/T//ccasrcpP.s:731:FATAL:Symbol _SHA_update.eh already defined.
    make: *** [/Volumes/Android/cm/out/host/darwin-x86/obj/STATIC_LIBRARIES/libmincrypt_intermediates/sha.o] Error 1
    In file included from build/libs/host/pseudolocalize.cpp:1:
    build/libs/host/include/host/pseudolocalize.h:4:18: error: string: No such file or directory
    /var/folders/8m/ghbh36d16yq790m1h_23h_dw0000gn/T//cczkLek6.s:829:FATAL:Symbol _process.eh already defined.
    build/libs/host/include/host/pseudolocalize.h:6: error: ‘string’ in namespace ‘std’ does not name a type
    make: *** [/Volumes/Android/cm/out/host/darwin-x86/obj/EXECUTABLES/acp_intermediates/acp.o] Error 1
    build/libs/host/pseudolocalize.cpp: In function ‘const char* pseudolocalize_char(char)’:
    build/libs/host/pseudolocalize.cpp:61: error: ‘NULL’ was not declared in this scope
    build/libs/host/pseudolocalize.cpp: At global scope:
    build/libs/host/pseudolocalize.cpp:71: error: ‘string’ does not name a type
    make: *** [/Volumes/Android/cm/out/host/darwin-x86/obj/STATIC_LIBRARIES/libhost_intermediates/pseudolocalize.o] Error 1
    /var/folders/8m/ghbh36d16yq790m1h_23h_dw0000gn/T//ccf3ehIY.s:1384:FATAL:Symbol _load_file.eh already defined.
    make: *** [/Volumes/Android/cm/out/host/darwin-x86/obj/EXECUTABLES/mkbootimg_intermediates/mkbootimg.o] Error 1
    /var/folders/8m/ghbh36d16yq790m1h_23h_dw0000gn/T//ccXw1nYW.s:1854:FATAL:Symbol _isSourceNewer.eh already defined.
    make: *** [/Volumes/Android/cm/out/host/darwin-x86/obj/STATIC_LIBRARIES/libhost_intermediates/CopyFile.o] Error 1
    CM10.1 넥서스4를 맥에서 빌드했더니 이 에러나는데여 어떻게 할까요?