이클립스 처음 써보는 c++개발자가 윈도우 + cocos2d-x 환경에서 안드로이드 빌드&실행 성공까지의 좌충우돌 도전기

이제부터 설치하게 될 것들의 설치경로가 꽤나 중요한 요소로 작용합니다. 딱히 어디에 설치해야만 하는건 아니지만 각자가 어디에 설치를 했는지만 기억하시면 될 것입니다.

1. 준비과정

Java SE 설치

Java SE 다운받으러 가기

2012년 7월 19이 기준 JDK 7u5가 최신입니다. 다운로드 페이지로 이동 후 이미지와 같은 링크를 클릭합니다.

다음으로 라이센스에 동의를 누르신 후 원하시는 OS버전의 SDK를 다운받습니다. 저는 Windows7 64bit라서 Windows x64 버젼으로 다운로드 했습니다.

아래의 스샷 처럼 설치를 진행하시다가 JavaFX 부분이 나오는데 JavaFX는 필요하지 않으므로 Cancel을 하고 설치를 완료합니다.




Cygwin

c++로 코딩한 것을 자바에서 사용 가능한 라이브러리로 컴파일하기 위해 Cygwin을 설치합니다.

Cygwin 다운받으러가기

setup.exe를 다운받아 설치를 진행합니다.

다운로드 소스 선택 화면입니다. 인터넷으로 바로 받아 설치하려면 첫번째를 로컬에 다운받아 놓으려면 2번째, 마지막은 받아놓은 로컬 소스가 있다면 선택해서 설치 옵션입니다. 일단 첫번째 바로 인터넷 설치를 진행합니다.

설치경로 설정입니다. 디폴트로 설치 진행합니다.

설치하는데 필요한 다운로드 소스를 저장할 경로 지정입니다. 자동으로 setup.exe가 있는 곳으로 설정되는데 별 것 아니니 넘어갑니다.

접속 방법인데 첫번째를 선택합니다.

다운로드 사이트를 정합니다. 여러 미러 사이트가 있는데 아무 곳이나 정합니다.

제일 중요한 부분입니다. 패키지를 골라 설치 가능한데 Devel과 Editors를 클릭해서 Install로 바꿔준 후 계속 설치 진행합니다.

의존성 있는 패키지도 설치된다는 내용입니다.


인터넷 속도에 따라 시간이 꽤 걸리니 그 동안 다른일을 하시면서 기다리는게 정신건강에 좋습니다.

설치 완료 후 제어판 -> 시스템 -> 고급 시스템 설정 -> 고급 -> 환경 변수 -> 시스템 변수에서 Path 시스템 변수에 아래 내용을 추가 합니다. 물론 자신이 설치 한 폴더에 맞게 수정 추가 하시면 됩니다.

C:\cygwin\bin;C:\cygwin\usr\include;

Android SDK 설치

Android SDK 다운로드 받기

r20.0.1 이 최신이네요.

분명 JDK를 설치했는데 java.exe 지정된 파일을 찾을 수 없습니다. 라고 나올 수 있습니다. 설치창 밑단에 설명에도 있듯이 환경변수에 JAVA_HOME 이라는 것을 추가해야 합니다.

제어판 -> 시스템 -> 고급 시스템 설정 -> 고급 -> 환경 변수 -> 시스템 변수에서 새로 만들기를 눌러 변수이름에 JAVA_HOME, 변수 값에 JDK를 설치 한 경로를 입력합니다.

설치 경로를 지정해 줘야 하는데 원하시는 곳에 설치 하셔도 좋지만 추후 NDK도 설치와 빌드 관련된 스크립트 안의 디렉토리 설정과 관련된 작업이 있으므로 간단하게 하시는 게 좋습니다.

SDK 설치가 완료되면 Android SDK Manager가 실행이 됩니다. 원하시는 안드로이드 버전별로 Api나 샘플등의 추가 패키지를 다운받으면 됩니다. 저는 진저브레드인 2.3.3, 아이스크림샌드위치인 4.0.3, 최신 젤리빈인 4.1만 설치 했습니다.

라이센스 동의를 묻는데 Accept All를 선택후 설치 합니다. 이것도 선택한 것이 많으면 설치가 오래 걸립니다.

역시나 설치 후 Path 환경 변수에 아래 내용이 없다면 추가 합니다.

C:\Android\android-sdk\tools;

Android NDK 설치

구글 NDK 다운받기

android-ndk-r8b-windows

CrystaX.net의 커스텀 NDK 다운받기

android-ndk-r7-crystax-5.beta2-windows

Crystax.net의 NDK는 커스터 마이징 된 것이라고 합니다. c++ exceptions, RTTI, Standard c++ Library를 지원하고 c++0x, Objective-C 등도 지원하는 듯 하네요.


저는 일단 구글의 공식 NDK를 받았습니다. 단순 압축 파일이기 때문에 압축만 풀면 되고 설치 폴더는 SDK가 설치 되었던 곳과 같습니다.

Eclipse 설치

이클립스 다운 받기

뭔놈에 이클립스 종류가 이리 많은지 모르겠네요. 일단 구글링 해보니 구글에서는 Eclipse Classic 버전을 추천한다고 합니다.

저는 이클립스 클래식 4.2 64비트 버젼을 받았습니다. 자동으로 한국 링크를 알려주네요.

역시나 NDK, SDK와 같은 폴더에 설치했으며 압축파일이기 때문에 압축만 푸시면 됩니다.

cocos2d-x 설치

cocos2d-x 다운 받기



cocos2d-2.0-rc2-x-2.0.1이 최신이네요. 역시나 다운받아 압축을 해제합니다.

여기까지 1차적인 준비과정인 필요 SDK와 간단한 환경변수 설정이 마무리 되었습니다. 각자의 설치한 폴더에 맞게 환경변수를 설정하면 됩니다. 꼭 저처럼 안해도 됩니다.

2. 샘플 빌드와 실행

Cygwin 설정 및 NDK 빌드

Cygwin Terminal을 실행 후 아래 명령어를 입력해서 bashrc 파일을 편집합니다.

'vi ~/.bashrc'

원하는 위치에서 편집모드로 가기 위해 'i' 키를 눌러서 아래 문자열을 추가 합니다.
export PATH=$PATH:/cygdrive/c/android/android-ndk-r8b
export ANDROID_NDK_ROOT=/cygdrive/c/android/android-ndk-r8b

입력 후 'esc'를 눌러 편집모드를 취소 후 ':x' 를 입력 후 엔터키를 눌러 저장 후 종료합니다.

'source ~/.bashrc' 를 입력해 변경된 bashrc파일을 적용시킵니다.

'ndk-build -B' 를 입력해 NDK를 빌드합니다.

위 스샷은 정상 진행 결과 스샷입니다. 만약 마지막 NDK 빌드시에 prebuilt/windows/bin/awk.exe: can't open file 어쩌구 awk.awk 로그가 뜬다면 아래의 파일을 삭제하시고 다시 빌드 하시기 바랍니다.

NDK설치폴더/prebuilt/windows/bin/awk.exe

build_native.sh 수정 및 c++ 빌드

일단 cocos2d-x의 HelloWorld를 빌드해 보겠습니다. 최종 빌드 이전에 c++로 된 것을 라이브러리로 만들기 위해 sh파일 수정이 불가피 합니다. 각자의 cocos2d-x가 설치된 폴더의 Helloworld/proj.android/ 폴더에 있는 build_native.sh 파일을 편집합니다. 저는 C:\Android\cocos2d-2.0-rc2-x-2.0.1\HelloWorld\proj.android 입니다.


NDK_ROOT_LOCAL=/cygdrive/c/android/android-ndk-r8b
COCOS2DX_ROOT_LOCAL=/cygdrive/c/android/cocos2d-2.0-rc2-x-2.0.1


만약에 cygwin의 home/사용자계정/ 같은 곳에다 설치를 했다면 아래와 같이도 변경 가능합니다.


NDK_ROOT_LOCAL=/home/wwforever/android-ndk-r8
COCOS2DX_ROOT_LOCAL=/home/wwforever/cocos2d-2.0-rc2-x-2.0.1

수정한 파일을 저장 후 cygwin terminal에서 해당 경로로 이동 후 아래 명령을 입력해 sh를 실행해서 c++파일들을 빌드합니다.

'sh build_native.sh'


c:/android/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/ld.exe: cannot find ./obj/local/armeabi/png.a: Permission denied
c:/android/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/ld.exe: cannot find ./obj/local/armeabi/jpeg.a: Permission denied
c:/android/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/ld.exe: cannot find ./obj/local/armeabi/xml2.a: Permission denied
c:/android/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/ld.exe: cannot find ./obj/local/armeabi/tiff.a: Permission denied
c:/android/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/ld.exe: cannot find ./obj/local/armeabi/libgnustl_static.a: Permission denied
collect2: ld returned 1 exit status
/cygdrive/c/android/android-ndk-r8b/build/core/build-binary.mk:378: recipe for target `obj/local/armeabi/libhelloworld.so' failed
make: *** [obj/local/armeabi/libhelloworld.so] Error 1


만약 위와 같은 에러가 발생 한다면 컴파일 중 파일에 대한 접근 권한 실패 때문인 것으로 왜 이런지는 자세히 모르지만 해결은 아래와 같이 해주고 다시 빌드를 합니다.


cd obj/local/armeabi
chmod 777 *.a
cd ../../..

또는

chmod 777 -R errorFloder

sh build_native.sh 에러 해결 참고 링크
sh build_native.sh 에러 해결 참고 링크2

chmod 설명 링크

helloworld가 아닌 다른 신규 프로젝트들도 빌드시마다 이러는데 뭔가 sh파일을 수정하거나 좀더 근본적으로 한번에 수정해서 해결하는 방법이 있을 듯 한데 아직 거기까진 확인 안해봤네요. 일단 새로운 프로젝트 빌드시마다 파일 권한을 수정해줍니다.

또한 이런 파일 접근 권한 수정이 추후 어떠한 문제를 일으킬지는 장담할 수 없네요.

다시 빌드를 하면 위와같이 깨끗하게 빌드 완료가 되야 합니다.

Eclipse 설정과 Java Compile 및 디바이스에서 실행

마지막으로 Java를 컴파일해서 안드로이드용 apk를 만들어 에뮬레이터에서 실행해보거나 디바이스에서 직접 실행하는 것만 남았습니다.

지금부터 나올 부분은 이클립스를 먼저 사용해보셨던 분들이라면 지겨우실 수도 있습니다. 저처럼 c++개발자였다가 이클립스 자체를 처음 해보시는 분들을 위한 설명도 몇가지 곁들어져 있기 때문이죠.

먼저 처음 실행하면 위와 같은 워크스페이스 경로 지정화면이 나오는데 기본적인 이클립스 작업 프로젝트들 저장하는 위치

이클립스 설정

먼저 이클립스에 안드로이드 관련 에드인을 설치해줘야 합니다. Help -> Install New Software를 선택합니다.

Add버튼을 클릭해서 스샷과 같이 입력합니다.

Name: android
Location: http://dl-ssl.google.com/android/eclipse/

확인을 누르면 밑에 패키지를 선택 할 수 있게 목록이 생기는데 위와 같이 2개를 선택하고 설치를 진행합니다.

라이센스 동의 후 설치.

중간에 경고가 뜨는데 살짝 무시하고 OK를 눌러 계속 설치합니다.

설치 완료 후 다시 시작하라고 합니다. Yes를 눌러 이클립스를 재가동 시킵니다.

빌드 및 실행

빌드를 하기에 앞서 cocos2d-x의 샘플 프로젝트인 Helloworld를 이클립스에 로딩해야 합니다.  File -> New -> Project를 하시거나 Ctrl + N 을 눌러 프로젝트 위자드를 실행 후 기존에 있는 프로젝트를 가져올 것이므로 Android Project from Existing Code를 선택합니다.

다음 Browse버튼을 눌러 Import할 프로젝트를 선택합니다. cocos2d-x가 설치된 폴더의 Helloworld/proj.android를 선택하면 됩니다.

Import한 프로젝트의 설정을 변경해야 합니다. Package Exploer에서 프로젝트명에서 마우스 우 클릭 후 Properties를 선택합니다.

Java Compiler에서 Compiler compliance level를 1.6으로 해줍니다.

이제 빌드를 해야하는데 Project에 Build Project가 비활성화 되어 있다면 Build Automatically를 체크 해제합니다. 자바환경에서 이클립스는 알아서 그때그때 빌드를 하나봅니다. 일단 익숙하지 않기에 제가 직접 빌드하고 싶어서 이렇게 진행합니다.

빌드 후 실행 전에 이클립스와 디바이스 연결이 되어있는지 확인해야 합니다. Devices창이 보이지 않는다면 Window -> Show View -> Other에서 아래 처럼 Devices를 선택해줍니다.


디바이스 창에서 연결된 폰을 확인 할 수 있습니다. 물론 디바이스의 시스템 설정 -> 개발자 옵션 -> USB 디버깅 에 체크가 되어있어야 연결이 되겠지요.

마지막으로 실행 타겟을 설정해줘야 합니다. Run -> Run Configurations를 선택합니다.

Target에서 Active devices를 선택하면 연결된 디바이스에서 실행이 되고 다른걸 선택해 에뮬레이터에서 실행할 수도 있습니다.

이제 실행하면 됩니다. 제 디바이스에서 실행한 것을 캡쳐해봤습니다.

샘플 소스를 수정해서 변경 사항을 확인하고 싶으시다면 c++이 수정 된 것이므로 위에 설명한대로 build_native.sh를 실행해 c++컴파일을 해야하고 마찬가지로 접근 권한 에러가 또 발생하면 권한 수정후 build_native.sh를 해줍니다. 그리고 이클립스에서 refresh -> build -> run을 해주시면 됩니다.

지금까지 긴 글을 읽어주셔서 감사합니다. 일단 기본적인 개발환경 세팅부터 기존에 있는 샘플 프로젝트 기반 실행까지에 대한 내용을 다뤄봤습니다.

다음에는 샘플 말고 create-android-project 를 통한 신규 프로젝트 생성부터 빌드까지 도전해봐야겠네요. 본문은 이걸로 끝을 맺고 아래 추가로 제가 겪은 이슈를 정리해봅니다.

이클립스 디바이스 인식 문제


처음 시도시 USB디버깅도 체크했고 케이블도 연결되어 있었는데 Devices 창에서 확인이 안되더군요. 구글링 해보니 일단 여러가지가 있었는데 제 경우는 디바이스 드라이버가 설치 안되어서 문제였습니다. 이거 때문에 시간 허비를..

제어판 -> 장치관리자 -> 제대로 설치 안된 장치 에 마우스 우클릭 후 드라이버 소프트웨어 업데이트를 자동으로 해주거나, 해당 디바이스 제조사 홈피에서 다운받아 설치하고 진행하시면 이클립스에서 연결 인식이 잘됩니다.

Import Project가 안될때


Cannot import org.cocos2dx.application.ApplicationDemo because the project name is in use 라면서 임포트가 안될 수 있습니다. 제 경우 처음 하다보니 이클립스를 종료 후 다시 실행을 몇번 반복했었는데, 이클립스 자체가 새로 실행을 해도 전에 로드 되었던 프로젝트가 떡하니 버티고 있더군요.

Navigator창에 있는 같은 이름의 프로젝트를 삭제 후 다시 시도하면 됩니다. 이거 또한 왜 이렇게 해놨는지 적응이 안되더군요. 이거 때문에 또 시간 허비한거 생각하면...;;

댓글

  1. 이렇게 자세하게 써주셔서 감사합니다.
    첨 설치하는 거라 여기저기 많이 검색했는데 이글은 차례로 자세히 써주셔서 정말 도움이 많이 되었습니다.
    감사합니다. ^^

    답글삭제
    답글
    1. 작년에 처음 본격적으로? 시작한 글이어서 지저분해서 보기 좀 그렇고,
      오래된 내용이라 다른 내용도 있었을 거에요.
      고생하셨구요~ 찾아주셔서 감사합니다 ^^
      대박 나세요~

      삭제

댓글 쓰기

이 블로그의 인기 게시물

CMake Windows에 설치하기

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

크로스 스레드 작업이 잘못되었습니다. xxx 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스되었습니다