본문 바로가기

Cocos2D-x

Cocos2d-x 3.2 안드로이드 빌드

Cocos2d-x 3.2 안드로이드 빌드


이 글에서는 이클립스를 사용한 Cocos2d-x 3.2 프로젝트 빌드 및 발견된 빌드 문제 해결 방법을 다룹니다


커멘드창을 이용하지 않고 이클립스를 사용하는 이유는 다음과 같습니다:

  • 세팅이 된 다음엔 빌드 및 스마트폰에의 실행이 아주 쉽다

  • 이클립스를 통해 디버깅이 가능

  • 이클립스를 통해 개발이 가능

  • 최신 버전의 서브시스템에 (ndk10...)에 간단히 대응

    • 굳이 최신 버전을 고집할 필요는 없지만(ndk9로 충분. 대부분은 ndk9를 사용하는 것 같습니다)

    • 그러나 최신 버전을 고집하면 프로젝트의 생명주기가 길어지죠.

  • 빌드에 사용될 cocos 라이브러리, 안드로이드 라이브러리를 언제든 쉽게 수정 가능



빌드 환경



  • Intel 64bit CPU
  • Windows7 64bit
  • Visual Studio 2013
  • Python 2.7
  • cocos2d-x 3.2
  • ndk10
  • ant1.9.4
  • Eclipse Luna
  • Android API 10 (2.3.3)
  • Java7


이 환경은 지난 포스트(http://makerj.tistory.com/153)에서 설정한 것과 같습니다.




시작하기 전에



cocos2d-x 3.2를 안드로이드에 맞추어 빌드하는 과정은 굉장히 손이 많이 가는 작업입니다.

아래의 과정 중 단 하나라도 놓치면 빌드에 성공할 수 없습니다.

인내심을 가지고 아래의 과정을 하나하나 밟아가세요.





이클립스에 프로젝트 추가





File-Import-Existing Projects into Workspace를 선택하고

프로젝트 위치는 해당 게임 프로젝트\proj.android를 선택하면 됩니다.


Copy projects into workspace 옵션은 사용하지 마세요! 소스코드는 언제든지 변경 가능해야 하니까요.





프로젝트 설정



Import된 프로젝트는 기본적으로 설정이 맞게되어 있지 않습니다.

이클립스 환경에 맞게 프로젝트를 변경하도록 합니다.


1. cocos2d-x Andoird Library Project 추가

**이 1번 과정은 딱 한번만 하면 됩니다. 다른 게임 프로젝트를 다루게 되더라도 반복할 필요 없습니다.


File-Import-Existing Projects into Workspace를 선택하고


프로젝트 위치는 cocos2d-x 설치 디렉토리\cocos\platform\android\java를 선택하면 됩니다.

예) C:\cocos2d-x\cocos\platform\android\java


Copy projects into workspace 옵션을 선택하세요! 코코스 엔진 원본 소스코드는 건드려봤자 좋을게 없겠죠.




2. 프로젝트 설정 변경


여러분이 작성한 게임 프로젝트를 선택하고 Properties로 들어갑니다.

그리고 아래의 스크린샷을 따라서 라이브러리 설정을 고칩니다.








3. 문제 있는 소스코드 변경


3-1> 엔진 오타 수정


프로젝트/cocos2d/cocos/3d/CCBundleReader.htell()함수 부분을

long int tell(); 에서

ssize_t tell(); 로 변경하세요


왜 그런지 모르겠지만 cocos2d-x 3.2자체에 문제가 있네요. 반환형이 잘못되어 있습니다 --;



3-2> 자동 CPP 소스파일 추적 및 추가

프로젝트/jni/Android.mk 파일을 수정합니다

LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp
부분을

FILE_LIST := $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp)
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
LOCAL_SRC_FILES += hellocpp/main.cpp


로 변경합니다.


Classes폴더 안에 있는 모든 cpp파일을 자동으로 빌드 시에 포함시키도록 변경하는 것입니다.

물론 LOCAL_SRC_FILES부분을 늘려나가도 되겠지만 그런 바보같은 수고를 할 사람은 없겠죠.




4. 실행


에뮬레이터가 아닌 실제 안드로이드 스마트폰을 사용하시는 걸 추천합니다

Ctrl+B를 눌러 빌드하시고

프로젝트 우클릭->Run AS->Android Application을 누릅니다




5. 끝!


이제 여러분이 개발한 게임이 안드로이드에서 실행되는걸 볼 수 있습니다

끝없이 해결해야할 게임버그는 잠시 잊으시고 행복해 하셔도 좋습니다.





PLUS+

혹시 Visual Studio에서는 잘됐는데 다른 플랫폼에서 한글이 깨지거나

빌드 도중 error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security] 메시지가 발생하면

아래의 추가 문제 해결을 참조하세요




추가 문제 해결



1. 로그로 인해 발생하는 빌드 에러 해결

error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security] 에러 해결 방법입니다.


프로젝트/jni/Application.mk 파일의


APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char

APP_LDFLAGS := -latomic

부분을


APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char

APP_CPPFLAGS += -Wno-error=format-security

APP_LDFLAGS := -latomic

로 변경하세요





2. 한글 깨짐 해결


Visual Studio에서는 잘만 출력되던 한글이 다른 플랫폼(안드로이드,IOS)에서 깨진다면

파일의 저장 형식이 잘못되었을 확률이 높습니다.


STEP1>

Visual Studio에서 한글이 들어있는 소스코드를 띄웁니다. 그리고 나서 파일->고급 저장 옵션을 열어

인코딩

유니코드(서명 있는 UTF-8)

줄 끝

Unix

로 설정하세요.



STEP2>

또한 이클립스 프로젝트의 Properties을 아래와 같이 설정합니다.