2014년 3월 5일 수요일

Cocos2d-x 프로젝트 생성부터 Eclipse에서 빌드, 실행까지

1. Cocos2d-x 프로젝트 생성

cocos2d-x-3.0beta2 설치디렉토리\tools\project-creator\create_project.py 실행


- Project Name : 프로젝트 명 입력
- Package Name : 패키지 명
- Project Path : 프로젝트 Workspace 경로
- Language : C++

create_project.py -p PuzzleGame -k kr.co.hanguk.cocos2d.puzzlegame -l cpp

create 버튼을 클릭하면 다음과 같이 프로젝트 경로에 파일이 생성된다.


2. Eclipse 프로젝트 Import
2.0. Eclipse 환경 변수 설정
  ㄱ. Path Variable `COCOS2DX`: 
    * Eclipse->Preferences->General->Workspace->**Linked Resources**
Name : COCOS2DX
        Location : cocos2d-x의 Root directory.



  ㄴ. C/C++ Environment Variable `NDK_ROOT`: 
     * Eclipse->Preferences->C/C++->Build->**Environment**.
       Name : NDK_ROOT
       Value : Android NDK Root directory 경로



2.1. libcocos2dx 프로젝트 Import
Cocos2d-x는 libcocos2dx 라는 라이브러리를 사용해야만 한다.
그러기 위해 라이브러리 프로젝트를 Import 시켜두어야 한다.
- File > import 선택
[ Exisition Android Code Info Workspace 선택 ]


%cocos2d-x-3.0beta2 설치경로%\cocos\2d\platform\android

새로 생성된 프로젝트에서 Project > Properties > Android 를 열어 보면 Library 부분이 링크가 깨져 있는것을 볼수 있다. 이것을 해결 하기 위해 미리 libcocos2dx Library 프로젝트를 Import 해 둘 필요가 있다.



2.2. 신규 생성한 프로젝트 Import
- File > import 선택
위에서 생성한 프로젝트 안의 폴더 중에 proj.android 를 선택 한면 된다.

[ Exisition Android Code Info Workspace 선택 ]

[ Root Directory : proj.android선택 ]

[ Projects 에 PuzzieGame 확인 하고  Finish 클릭 ]

※참고 : libcocos2dx 프로젝트 Import
새로 생성된 프로젝트에서 Project > Properties > Android 를 열어 보면 Library 부분이 링크가 깨져 있는것을 볼수 있다. 이것을 해결 하기 위해 미리 libcocos2dx Library 프로젝트를 Import 해 둘 필요가 있다.
%cocos2d-x-3.0beta2 설치경로%\cocos\2d\platform\android\java
를 Improt 시키면된다.


3. 프로젝트 NDK Build 하기

모른척 하고 build_native.py 실행(더블클릭)하면 libs\armeabi\libcocos2dcpp.so 파일이 생성된다. 그럼 끝~~!!

(※참고 : build_native.py -n clean)





4. 프로젝트 환경설정 파일 변경
이제 libcocos2dcpp.so를 Java와 연결하고 빌드하여 APK 파일을 생성하면 된다. 
그 전에 설정 좀 바꿔줘야 할 것이 있다.

## AndroidManifest 파일 편집
    <uses-sdk android:minSdkVersion="9"/>
==>
    <uses-sdk 
        android:minSdkVersion="10"
        android:targetSdkVersion="19"
        />
실행 가능한 최소 버전은 10(2.3.3) 컴파일 타겟 버전은 14(4.0)로 설정했다.


        <activity android:name="org.cocos2dx.cpp.Cocos2dxActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="landscape"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  android:configChanges="orientation">
==>
        <activity android:name="org.cocos2dx.cpp.Cocos2dxActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="landscape"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize">

안드로이드 폰의 가로세로모드 변경 또는 키보드 창 등과 같은 화면변화가 일어나면 기본적으로 액티비티가 재생성되는데 configChanges에 명시 하면 명시된 변경 사항이 발생하면 Activity에서 직접 처리하겠다는 의미

keyboard|keyboardHidden 키보드 입력에 관련(cocos2d-x는 extension에서 키보드입력 지원)
uiMode|screenSize|smallestScreenSize  전원 버튼이 눌리어서 Lock 되었을때 발생
orientation 화면이 가로 세로로 변경


## project.properties 파일 편집
빌드 타켓이 위에서 설정한 19로 되어 있는지 확인하고 안되어 있으면 19로 변경
target=android-19

※참고
Run As > Android Application 했을때 다음과 같은 에러가 나오는 경우가 있다.
[2014-03-05 16:40:53 - Dex Loader] Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
[2014-03-05 16:40:53 - MyGame] Conversion to Dalvik format failed: Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.

이 경우 일단 Add SupportLibrary를 해 주고......
ㄱ. Add SupportLibrary
Project 우클릭 -> Android Tools -> Add Support Library
그리고 Accept License 를 클릭해서 인스톨 해 주면된다.
ㄴ. Android Target 버전을 14로 했다면 19로 바꿔 주도록 한다.
ㄷ. 라이브러리 libcocos2dx 의 Android Target 버전도 19로 되어 있는지 확인해서 안되어 있다면 19로 변경해 준다.


5. 실행
Project > Run As > Android Application.

갤럭시S2에서 실행된 모습 ^^v


일단 오늘은 여기 까지... ^^


※ 급 추가
jni > hellocpp > main.cpp 를 열었을때 에러가 표시될때가 있다(에러가 나면 Run을 할 수가 없게 된다. ㅠ,.ㅠ 궁금해서 main.cpp를 열어 봣는데... 괜히 열었어 라는 생각이 든다. 하지만 언제가 열어 봐야 할거 같은 느낌은 뭘까....). 이 경우 C/C++ General 의 Code Analysis 를 열어 Use workspace settings 에 체크됭어 잇으면 Use project settings으로 변경해 주면 에러가 사라진다.(일단 다시 실행 할수 있게는 되었다. 하지만... 이놈은 뭐하는 놈일까.. 싶다.)





댓글 1개:

giigxi :

*급추가 감사합니다. 저도 같은문제..ㅋㅋㅋ