티스토리 뷰

이 글에서는 이클립스를 사용한 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



시작하기 전에



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.h의 tell()함수 부분을

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을 아래와 같이 설정합니다.



출처 : http://makerj.tistory.com/156



----------------------------------



위 작업을 완료 한 뒤에 추가로 발생 하는 아래와 같은 에러는

다음 방법으로 해결 ㅎ


1) cannot find : cocod2d-x libcocos2dcpp.so

2) The import org.cocos2dx.lib cannot be resolved





1) cannot find : cocod2d-x libcocos2dcpp.so


NDK 빌드

일단 명령프롬프트(윈도우버튼 > 프로그램파일검색 창에서 cmd)를 엽니다. 다음과 같이 cd 명령을 수행해서 앞서 새로 만든 프로젝트의 proj.android폴더로 이동합니다.(역시 폴더 이름은 각자의 것에 맞게)

이제 NDK 빌드를 하기 위해 파이썬 스크립트를 수행합니다.

> build_native.py

그럼 컴파일이 쫙쫙쫙 수행됩니다. 빌드 후 메시지가 다음과 같이 나오며 proj.android\libs\armeabi에libcocos2dcpp.so 파일이 생성되면 NDK 빌드가 완료 된 것입니다.


설정 파일 변경

이제 libcocos2dcpp.so를 Java와 연결하고 빌드하여 APK 파일을 생성하면 됩니다. 그 전에 설정 좀 바꿔줘야 할 것이 있습니다.

일단 AndroidManifest파일의 수정이 필요합니다. 안드로이드 프로젝트의 속성 파일이라고 생각하시면 됩니다. proj.android 디렉터리에 있는 AndroidManifest.xml 파일을 문서편집기로 열어 다음과 같이 sdk 버젼이 9로만 되어 있는 것을 

<uses-sdk android:minSdkVersion="9"/>

다음과 같이 target을 14로, min을 10으로 바꾸어줍시다.

<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="14"/>

여기서 가리키는 SdkVersion은 앞서 ADT에서 설치했던 API 레벨을 의미합니다. 수정 전에 입력되어 있던 9는 전설속에만 존재하는 API고, 우린 전설을 믿지 않으니 수정해 주는겁니다. 기왕이면 target SDK를 구글에서 권장하는 14레벨로 설정합니다. API14는 4.0 아이스크림샌드위치인데 그럼 그 이하 버젼은 지원을 안하는 것이냐!? 그건 걱정하지 맙시다. 하위 OS 호환성을 위해서 targetSdkVersion과 minSdkVersion이 따로 있습니다. 최소 지원 SDK 값을 10으로 지정해줘서 2.3.3 생강빵 이상에서 돌아가게 해줍니다. 사실상 현존하는 최소 버젼은 API8 2.2 프로요이긴 하지만 target을 14로 설정하면 8의 설정과 충돌나는 부분이 있어서 애석하게도 사용하지 못합니다. 2.2 프로요는 아직 점유율이 2.7%나 되서 버리기에는 조금 아깝긴합니다. 하지만 타겟을 4.0 아이스크림샌드위치로 설정해야 태블릿에서 검색 가능하기때문에 살을 내주고 뼈를 취하는게 낫습니다.



2) The import org.cocos2dx.lib cannot be resolved



proj.android/src 폴더에 들어가 보시면 org/cocos2dx   폴더가 있을겁니다 이 내부가 비어 있는건 아닌지 확인해 보세요.

원래 create-android-project.sh를 실행했을때 이부분이 자동으로 채워져야 하는데 생성이 되지 않는 경우가 있습니다. 이런경우엔 수동으로 복사해 주면 되는데요.

 cocos2d-x-3.6/cocos/platform/android/java/src/에 들어가보시면 같은 구조의 디렉토리가 존재합니다.   이안에 있는 org 폴더를 통채로 복사해서 proj.android/src/ 에 그대로 복사해 붙여 넣은후 eclipse 에서 f5버튼으로 reflash 한후에 다시 빌드


댓글

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음



Total
Today
Yesterday
최근에 달린 댓글