게임 개발/Cocos2d-x

Cocos2d-x 3.0 beta 안드로이드 빌드하기

날개 2014. 1. 14. 01:14

지난번에, Cocos2d-x 3.0 베타의 프로젝트 생성 방법을 살펴봤습니다. (링크 : http://www.wingsnote.com/27)


이번 글에서는 안드로이드 빌드 하는 방법을 살펴봅니다.


iOS의 경우에는 너무 간단해서 설명하지 않아도 될 것 같습니다. 그냥 생성된 프로젝트 디렉터리 중, 'proj.ios_mac' 디렉터리 내의 .xcodeproj만 XCode에서 열먼 모든게 끝나니까요.


안드로이드는, 빌드하는것이 그렇게 간단하지 않습니다. C++로 이루어진 cocos2d-x는 자바 환경이 기본인 안드로이드와는 이질적이기 때문에 NDK도 필요하고, 이클립스도 아무래도 안드로이드 전용 개발툴이 아니다 보니 이것저것 설정을 해 줘야 하거든요. (그래도 지루한 에러와의 싸움은 스트레스를 가중시키네요.)


이 글에서는 간단하게 안드로이드용으로 프로젝트를 빌드해서 실행해 봅니다.


단, 기본적인 안드로이드 개발 방법은 알고 있다고 가정합니다.


즉, Android SDK와 NDK는 이미 설치 되어 있다고 가정합니다.


(이 글에서, NDK는 r9c 버전 사용하였습니다. 개발환경은 MacOS X 매버릭스입니다.)




0. Cocos2d-x를 위한 NDK 환경변수 설정


(이 부분은 이미 하셨다면 다음 항으로 넘어갑니다)


먼저, cocos2d-x 프로젝트에서 NDK빌드 할때 NDK위치를 알 수 있도록 .bash_profile을 수정해 줄 필요가 있습니다.


.bash_profile은 맥 사용자 홈 디렉터리 밑에 있습니다.


터미널을 열고,


$ cd ~


명령어로 홈 디렉터리로 간 후에, .bash_profile 파일을 엽니다.


아래의 내용을 추가해 줍니다.


export NDK_ROOT="/Users/chris/development/android/android-ndk"


빨간색 부분은 본인의 NDK가 설치된 경로를 입력합니다.


제 경우는 아래와 같이 .bash_profile이 설정되어 있습니다.





exit 명령어로 터미널 종료후, 터미널을 닫고 다시 열어줍니다. (새 환경설정이 적용되도록...)




1. 이클립스에 cocos2d-x 프로젝트의 안드로이드용 디렉터리 불러들이기


이미 cocos2d-x 프로젝트는 생성되어 있다고 가정하겠습니다. (새로 만들어서 테스트 해 보고 싶다면, http://www.wingsnote.com/27를 참고하여 새 프로젝트를 만듭니다.)


먼저, 이클립스 워크스페이스를 내가 만든 Cocos2d-x 프로젝트 디렉터리에 두기 위해 아래와 같이 작업하겠습니다. (물론 워크스페이스를 다른데 두어도 됩니다. 하지만, 이클립스 워크 스페이스를 다른 디렉터리에 두면, 프로젝트 디렉터리를 옮길때마다 골치아픈 상황이 발생합니다. 특히 가끔씩 다른 PC에서 작업할 경우에 골치아픕니다. 저는 프로젝트 디렉터리를 통째로 백업하고나 옮겨서 쓰기 쉽게 프로젝트 디렉터리에 워크스페이스를 두겠니다.)


만든, 프로젝트 디렉터리를 보면, 여러 플랫폼을 위한 하위 프로젝트 디렉터리들이 보입니다.


대표적으로, proj.ios_mac은 아이폰, 아이패드, 맥등을 위한 프로젝트 디렉터리이죠. proj.android는 안드로이드를 위한 프로젝트 디렉터리입니다. 


proj.android 디렉터리를 만든 프로젝트 디렉터리가 아닌 임의의 디렉터리에 복사합니다. 이렇게 하는 이유는 이클립스 워크스페이스가 자신의 워크스페이스 아래에 같은 이름의 안드로이드 프로젝트 디렉터리가 있으면, 임포트를 하지 못하고 에러가 나기 때문입니다. 조금 후에 이클립스에서 다시 이 디렉터리로 안드로이드 프로젝트 디렉터리를 복사할 것입니다.


원래의 proj.android는 만약에 대해 proj.android.ori 등과 같은 적당한 이름으로 바꾸어 둡니다.


참고로, '프로젝트 디렉터리/proj.android' 디렉터리를 열어보면, 'README.md' 파일이 있습니다. 여기에 안드로이드 빌드 하는 방법이 설명되어 있습니다. 다만, 아직 베타버전이라서 그런지 새 버전의 디렉터리 구조로 설명되어 있지 않기 때문에 좀 헤멜 수 있습니다.


이클립스를 실행합니다.



Workspace Launcher가 뜨면, [Browse...]버튼을 눌러, Workspace에 본인이 만든 Cocos2d-x 프로젝트의 디렉터리가 선택되게 합니다. [OK]를 누릅니다.


이제 본인 프로젝트 디렉터리에 이클립스 워크스페이스의 메타파일이 만들어 졌겠죠.


이클립스 화면이 떴습니다. 그러나 휑~하죠. 아무것도 없으니까요.


먼저, 이클립스 환경 설정을 하겠습니다.


상단 메뉴에서 [Eclips]->[환경설정...]을 클릭합니다.




왼쪽창에서 General->Workspace->Linked Resources를 클릭하고 [New]버튼을 누릅니다.




cocos2d-x 엔진 소스의 디렉터리를 선택합니다.


이 부분을 잘해야 하는데, 아직 베타버전 README.md에는 이 디렉터리 위치가 잘못 설명되어 있습니다.


이 디렉터리 위치는 정확하게, '[본인의 프로젝트 루트]/cocos2d' 입니다. 바로, 프로젝트 생성으로 복사된 엔진 소스를 선택하는겁니다. (물론 복사되지 않은 원본의 엔진 디렉터리를 선택할 수도 있겠지만 의존성 문제나 나중에 관리상의 문제는 알아서 해결해야겠죠.)




Location에 디렉터리가 잘 선택되었는지 봅니다. 반드시 끝이 '.........../cocos2d'로 끝나야 합니다.


Name에는 'COCOS2DX'라고 입력합니다.


[OK]를 누릅니다.



왼쪽을 좀더 스크롤하고, C/C++ -> Build -> Environment 를 클릭합니다.



[Add...] 버튼을 누릅니다.



Name에는 'NDK_ROOT'라고 입력하고, 아래 Value에는 NDK를 설치한 절대경로를 입력합니다.


[OK]를 클릭하고, Preferences의 [OK]버튼을 눌러 환경설정 팝업을 닫습니다.



이제, Cocos2d-x 엔진 소스를 이클립스로 불러들이겠습니다.


상단 메뉴에서, [File]->[New]->[Project]를 클릭합니다.




'Android Project from Existing Code'를 선택하고, [Next]를 클릭합니다.





Import Projects 화면이 나오면, [Brows...] 버튼을 클릭하고, Cocos2d-x 엔진 자바 프로젝트를 선택해야 합니다.


엔진 안드로이드 자바 프로젝트의 위치는,


<내 프로젝트 디렉터리 루트>/cocos2d/cocos/2d/platform/android/java


입니다. (이것도 아직 베타라 그런지 잘못 설명되어 있더라고요.)


제대로 선택하면 아래와 같이 나옵니다.




[Finish]를 클릭하면, Package Expolorer에, 'libcocos2dx'가 추가된 것을 볼 수 있습니다.


이제, 본인의 프로젝트를 불러오겠습니다.


본인의 프로젝트를 불러오는 과정은 위의, Cocos2d-x 엔진을 불러오는 과정과 같습니다.


상단 메뉴에서, [File]->[New]->[Project]를 클릭합니다.


'Android Project from Existing Code'를 선택하고, [Next]를 클릭합니다.


여기서, 앞에서 설명한, 복사한 안드로이드 프로젝트를 선택합니다.



반드시, 본인의 프로젝트 루트 디렉토리에 있는 proj.android가 아닌, 다른 디렉터리에 임시로 복사해 놓은 proj.android를 선택 합니다.


New Project Name아래를 클릭해서 proj.android를 <프로젝트이름>.android로 바꾸어 줍니다.


또한 반드시 'Copy projects into workspace'를 체크합니다. 이것을 체크해야 본인의 프로젝트 디렉터리로 안드로이드 프로젝트가 복사됩니다. 


본인의 프로젝트 루트 디렉터리에 위와 같이 복사된 <프로젝트명>.android가 생성되었으면 제대로 된것입니다. 앞으로는 이 디렉터리를 사용합니다. (proj.android.ori는 더이상 사용하지 않습니다.)


아래와 같이 Package Explorer에 프로젝트 디렉터리와, libcocos2dx 디렉터리가 둘다 등록 되었다면 제대로 한것입니다.

그런데, 에러가 있네요. 빨간 X 표시와 함께요...


자세히 보면, 매니페스트 파일에 스크린과 관련된 잘못된 설정이 있다는군요.


수정해 줍시다.




먼저 Package Explorer에서 'AndroidManifest.xml' 파일을 더블클릭합니다.


소스코드 창의 하단 탭에서 'AndroidManifest.xml'을 클릭하여 직접 XML을 수정할 수 있도록 화면을 불러옵니다.


위 그림과 같이, 'android:configChanges=.....'에서, screenSize과 smallestScreenSize를 삭제해 줍니다.


사실, 에러가 난 이유가 이 두가지 옵션이 최신 버전 안드로이드 SDK에서만 지원하기 때문에 에러가 나는 것입니다.


아울러, 윗쪽의 minSdkVersion도 적당한 값으로 바꿔 줍니다. 저는 '10'으로 바꾸어 주었습니다. '10'이면 진저브레드입니다.




2. 빌드하고 실행하기




빌드하고 실행해 봅니다.




안타깝게도 에러가 났네요. 에러가 난 이유는, Cocos2d-x 엔진과 실제 게임 소스가 빌드되지 않았기 때문입니다. Cocos2d-x는 NDK를 사용하여 라이브러리 형태로 만들어 지는 것을 안드로이드에서 로드하는 방식이기 때문에 먼저 NDK 빌드가 필요합니다.


가장 간단한 방법은 터미널을 열거 NDK 빌드로 게임 소스와 함께 빌드하는 것입니다. (물론 이클립스에서 빌드하도록 만들 수도 있지만, 이클립스 설정이 필요하게 됩니다.)


먼저, 안드로이드에서 빌드하기 위해서는 게임 소스코드 중에 어떤 코드를 빌드해야 하는지 일일히 빌드툴에게 알려줘야 합니다. 그 설정은 Android.mk 을 수정하여 하게 됩니다.


Android.mk 파일은 '<내 프로젝트 루트>/<프로젝트명>.android/jni' 디렉터리에 있습니다.


이 파일을 텍스트 에디터에서 열어 적당히 수정해 줍니다. (만약에 테스트를 위해서 기본 프로젝트만 만들었으면, 수정하지 않아도 됩니다. 수정하지 않아도 기초 테스트 샘플은 돌아갑니다.)


아래에 제가 사용하는 Android.mk 파일의 예시를 올려 드립니다. (실제 프로젝트이므로 보안상 모자이크 처리한 부분은 이해 바랍니다.)





이제 터미널을 열고, <본인의 프로젝트>/<프로젝트명>.android 디렉터리로 들어갑니다.


터미널 상에서 아래의 명령을 입력하여, Cocos2d-x 엔진과 게임 소스를 NDK 빌드합니다.


$ ./build_native.py



제대로 빌드가 되었다면,

위 그림과 같이, libcocos2dcpp.so가 설치되었다는 메시지까지 무사히 나와야 합니다.


결과는 이클립스에서도 확인 할 수 있는데, 이클립스 화면으로 돌아가서, 





위 그림과 같이, 프로젝트를 오른쪽 클릭한 후, Refresh를 클릭해 주면,




위 그림과 같이 'libs/armeabi/libcocos2dcpp.so'가 추가 되었다는 것을 알 수 있습니다.


이제 안드로이드폰을 연결하고 실행하면,





짜잔~! 드디어 게임이 제대로 실행이 된다는 것을 알 수 있습니다. (참고로, 실제 제작중인 3-매치 퍼즐 게임입니다. 출시하면 많이 사랑해주세요. ^^; )


여기까지 따라오느라 수고 많으셨습니다.


구글에서 좀더 개발 환경을 편하게 만들어 주기를 기대하며(?) 글을 마칩니다.


끝.