현재 최신 버전은 3.0 @ 이지만, 
[저는 2.1.4 버전 프로젝트 진행중이므로 본 포스팅은 2.1.4로 진행하겠습니다.]



압축 해제 후 개발 폴더로 이동

[저는 /Users/cozdebrainpower/Desktop/ 으로 복사하였습니다.]









현재 맥 최신 버전 : android-ndk-r9-darwin-x86_64.tar.bz2 클릭

2.1.4에서 android-ndk-r9 으로 컴파일하면 에러가 많이 뜨네요.
android-ndk-r8e로 진행하겠습니다.
update: 13.08.18 ndk-r9으로 진행하겠습니다.

압축 해제 후 Library폴더로 이동
(터미널 사용 시 :  $mv android-ndk-r8e /Users/cozdebrainpower/library )

현재 설치 구조
Desktop에는 eclipsecocos2d-x-2.1.4 폴더가 존재 
Library에는 android-sdk-macosx, android-ndk-r9 가 존재


3. 환경변수 입력


[터미널]
$ vi .bash_profile 편집기를 열어서

i 누르고, 다음 경로를 입력 후 저장

1번 포스팅 단계에서 이미 다음과 같이 저장해둔 상태일 것이다.
export ANDROID_SDK_ROOT="/Users/coz/library/android-sdk-macosx"
export PATH="$PATH:$ANDROID_SDK_ROOT/tools"

추가.
export ANDROID_NDK_ROOT="/Users/cozdebrainpower/library/android-ndk-r9"
export COCOS2DX_ROOT="/Users/cozdebrainpower/Desktop/cocos2d-x-2.1.4"
export NDK_ROOT="/Users/cozdebrainpower/library/android-ndk-r9"
export PATH=$PATH:$ANDROID_NDK_ROOT
export PATH=/opt/local/bin:/opt/local/sbin:$PATH

esc누르고 :wq입력 (저장 후 종료)

$ source ~/.bash_profile






4. xcode에 cocos2d-x 템플릿 설치


cocos2d-x가 설치된 폴더로 이동 (Desktop/cocos2d-x-2.1.4/)

template 설치
$ sudo ./install-templates-xcode.sh

WARNING: Improper use of the sudo command could lead to data loss
or the deletion of important system files. Please double-check your
typing when using sudo. Type "man sudo" for more information.

To proceed, enter your password, or type Ctrl-C to abort.

Password: 맥북 비밀번호 입력
cocos2d-x template installer





xcode 에서 템플릿 확인


완성공


5. 멀티플랫폼 프로젝트 생성

기존의 프로젝트를 만들고, 폴더를 병합하던 노가다 방식에서 벗어나, 파이썬을 활용한 멀티플랫폼 프로젝트 생성입니다.

[터미널]
cocos2d-x-2.1.4/tools/project-creator/ 폴더로 이동.
./create_project.py 을 입력해봅니다.



3가지를 입력해야 하는데, 
-project  생성할 프로젝트명
-package  생성할 프로젝트의 패키지명
-language 사용할 개발 언어

개발언어는 뒤에 cpp | lua | javascript 중 선택하게 되어있습니다.


저는 c++로 개발할 것이기 때문에 다음과 같이 입력했습니다.

./create_project.py  -project MyGame -package com.company.mygame -language cpp




cocos2d-x-2.1.4 폴더 안에 projects 폴더가 생성되고, 입력한 프로젝트가 다양한 플랫폼으로 생성됩니다.



6. iOS 프로젝트 실행




완성공


7. 안드로이드 프로젝트 실행

[터미널]
cocos2d-x-2.1.4/projects/MyGame/proj.android/ 로 이동

./build_native.sh  실행
하면 에러가 뜰 텐데요 (현재는.)
라이브러리를 수정해서 저 에러를 수정해도 다른 에러는 계속 발생합니다.

다음을 수정합니다.
proj.android/jni/Application.mk 파일을 오픈합니다.

그리고 다음과 같이 한 줄 추가해주세요.
APP_CFLAGS += -Wno-error=format-security



다시 ./build_native.sh  실행


완성공.



이클립스 실행



프로젝트 불러오기










cocos2d-x 라이브러리 임포트



2.0.3부터는 이클립스에서 프로젝트 만들어도 바로 실행되지 않습니다.
cocos2d-x lib가 외부 프로젝트로 되어있어서 임포트를 해야하는데요.
이클립스 File->Import에서 General-Existing Projects into Workspace로 다음의 프로젝트 경로를 임포트합니다.
cocos2d-x-2.1.4/cocos2dx/platform/android/java 폴더를 임포트 합니다.
임포트 후 이클립스 workspace에는 libcocos2dx 프로젝트가 생성되고, 정상적으로 실행이 가능합니다.




--------------------- 이전 버전 안내 포스트--------------------- 

4. android 프로젝트 생성

Xcode에서는 cocos2dx 프로젝트를 만들수 있는 템플릿을 설치했고, 
안드로이드의 경우 cocos2dx가 설치된 폴더에서 직접 프로젝트를 생성해줘야 합니다.
(우리의 경우에는 desktop/cocos2d-x 폴더안에 있겠죠)

프로젝트 생성
Kwon-ui-MacBook-Pro:cocos2d-x coz$ ./create-android-project.sh  엔터  (create-android-project.bat 는 윈도우용 배치파일)

정의된 sdk, ndk 경로가 표시됩니다.
use global definition of NDK_ROOT: /Users/coz/library/android-ndk-r8d
use global definition of ANDROID_SDK_ROOT: /Users/coz/library/android-sdk-macosx
Input package path. For example: org.cocos2dx.example <= 만들 안드로이드 프로젝트 패키지명을 요구
com.ohjung.cocos2dxtest


안드로이드 빌드타겟을 설정합니다.
본인이 세팅한 안드로이드 개발환경에 따라서 다릅니다.
원하는 android 타겟의 아이디값을 입력

Now cocos2d-x supports Android 2.2 or upper version
Available Android targets:
----------
id: 1 or "android-7"
     Name: Android 2.1
     Type: Platform
     API level: 7
     Revision: 3
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WVGA800 (default), WVGA854
     ABIs : armeabi
----------
id: 2 or "Google Inc.:Google APIs:7"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 1
     Description: Android + Google APIs
     Based on Android 2.1 (API level 7)
     Libraries:
      * com.google.android.maps (maps.jar)
          API for Google Maps
     Skins: WVGA854, WQVGA400, HVGA, WQVGA432, WVGA800 (default), QVGA
     ABIs : armeabi
----------
id: 3 or "android-8"
     Name: Android 2.2
     Type: Platform
     API level: 8
     Revision: 3
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WVGA800 (default), WVGA854
     ABIs : armeabi
----------
id: 4 or "Google Inc.:Google APIs:8"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 2
     Description: Android + Google APIs
     Based on Android 2.2 (API level 8)
     Libraries:
      * com.google.android.maps (maps.jar)
          API for Google Maps
     Skins: WVGA854, WQVGA400, HVGA, WQVGA432, WVGA800 (default), QVGA
     ABIs : armeabi
----------
id: 5 or "android-10"
     Name: Android 2.3.3
     Type: Platform
     API level: 10
     Revision: 2
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WVGA800 (default), WVGA854
     ABIs : armeabi
----------
id: 6 or "Google Inc.:Google APIs:10"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 2
     Description: Android + Google APIs
     Based on Android 2.3.3 (API level 10)
     Libraries:
      * com.android.future.usb.accessory (usb.jar)
          API for USB Accessories
      * com.google.android.maps (maps.jar)
          API for Google Maps
     Skins: WVGA854, WQVGA400, HVGA, WQVGA432, WVGA800 (default), QVGA
     ABIs : armeabi
----------
id: 7 or "Intel Corporation:Intel Atom x86 System Image:10"
     Name: Intel Atom x86 System Image
     Type: Add-On
     Vendor: Intel Corporation
     Revision: 1
     Description: Intel Atom x86 System Image
     Based on Android 2.3.3 (API level 10)
     Skins: WVGA854, WQVGA400, HVGA, WQVGA432, WVGA800 (default), QVGA
     ABIs : x86
----------
id: 8 or "android-11"
     Name: Android 3.0
     Type: Platform
     API level: 11
     Revision: 2
     Skins: WXGA (default)
     ABIs : armeabi
----------
id: 9 or "Google Inc.:Google APIs:11"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 1
     Description: Android + Google APIs
     Based on Android 3.0 (API level 11)
     Libraries:
      * com.google.android.maps (maps.jar)
          API for Google Maps
     Skins: WXGA (default)
     ABIs : armeabi
----------
id: 10 or "android-12"
     Name: Android 3.1
     Type: Platform
     API level: 12
     Revision: 3
     Skins: WXGA (default)
     ABIs : armeabi
----------
id: 11 or "Google Inc.:Google APIs:12"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 1
     Description: Android + Google APIs
     Based on Android 3.1 (API level 12)
     Libraries:
      * com.android.future.usb.accessory (usb.jar)
          API for USB Accessories
      * com.google.android.maps (maps.jar)
          API for Google Maps
     Skins: WXGA (default)
     ABIs : armeabi
----------
id: 12 or "android-13"
     Name: Android 3.2
     Type: Platform
     API level: 13
     Revision: 1
     Skins: WXGA (default)
     ABIs : armeabi
----------
id: 13 or "Google Inc.:Google APIs:13"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 1
     Description: Android + Google APIs
     Based on Android 3.2 (API level 13)
     Libraries:
      * com.android.future.usb.accessory (usb.jar)
          API for USB Accessories
      * com.google.android.maps (maps.jar)
          API for Google Maps
     Skins: WXGA (default)
     ABIs : armeabi
----------
id: 14 or "Google Inc.:Google TV Addon:13"
     Name: Google TV Addon
     Type: Add-On
     Vendor: Google Inc.
     Revision: 1
     Based on Android 3.2 (API level 13)
     Skins: WXGA, 1080p-overscan, 1080p, 720p-overscan, 720p (default)
     ABIs : x86
----------
id: 15 or "android-14"
     Name: Android 4.0
     Type: Platform
     API level: 14
     Revision: 3
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800
     ABIs : armeabi-v7a
----------
id: 16 or "Google Inc.:Google APIs:14"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 2
     Description: Android + Google APIs
     Based on Android 4.0 (API level 14)
     Libraries:
      * com.android.future.usb.accessory (usb.jar)
          API for USB Accessories
      * com.google.android.maps (maps.jar)
          API for Google Maps
     Skins: WVGA854, WQVGA400, WSVGA, WXGA720, HVGA, WQVGA432, WVGA800 (default), QVGA, WXGA800
     ABIs : armeabi-v7a
----------
id: 17 or "android-15"
     Name: Android 4.0.3
     Type: Platform
     API level: 15
     Revision: 3
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800
     ABIs : armeabi-v7a, mips, x86
----------
id: 18 or "Google Inc.:Google APIs:15"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 2
     Description: Android + Google APIs
     Based on Android 4.0.3 (API level 15)
     Libraries:
      * com.google.android.media.effects (effects.jar)
          Collection of video effects
      * com.android.future.usb.accessory (usb.jar)
          API for USB Accessories
      * com.google.android.maps (maps.jar)
          API for Google Maps
     Skins: WVGA854, WQVGA400, WSVGA, WXGA720, HVGA, WQVGA432, WVGA800 (default), QVGA, WXGA800
     ABIs : armeabi-v7a
----------
id: 19 or "android-16"
     Name: Android 4.1.2
     Type: Platform
     API level: 16
     Revision: 4
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in
     ABIs : armeabi-v7a, mips, x86
----------
id: 20 or "Google Inc.:Google APIs:16"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 3
     Description: Android + Google APIs
     Based on Android 4.1.2 (API level 16)
     Libraries:
      * com.google.android.media.effects (effects.jar)
          Collection of video effects
      * com.android.future.usb.accessory (usb.jar)
          API for USB Accessories
      * com.google.android.maps (maps.jar)
          API for Google Maps
     Skins: WVGA854, WQVGA400, WSVGA, WXGA800-7in, WXGA720, HVGA, WQVGA432, WVGA800 (default), QVGA, WXGA800
     ABIs : armeabi-v7a
----------
id: 21 or "android-17"
     Name: Android 4.2
     Type: Platform
     API level: 17
     Revision: 1
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in
     ABIs : armeabi-v7a, mips, x86
----------
id: 22 or "Google Inc.:Google APIs:17"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 1
     Description: Android + Google APIs
     Based on Android 4.2 (API level 17)
     Libraries:
      * com.google.android.media.effects (effects.jar)
          Collection of video effects
      * com.android.future.usb.accessory (usb.jar)
          API for USB Accessories
      * com.google.android.maps (maps.jar)
          API for Google Maps
     Skins: WVGA854, WQVGA400, WSVGA, WXGA800-7in, WXGA720, HVGA, WQVGA432, WVGA800 (default), QVGA, WXGA800
     ABIs : armeabi-v7a
input target id:
3


마지막으로 프로젝트명을 입력하면 프로젝트가 생성됩니다.

input your project name:
cocos2dxTest
Created project directory: /users/coz/desktop/cocos2d-x/cocos2dxTest/proj.android
Created directory /Users/coz/Desktop/cocos2d-x/cocos2dTest/proj.android/src/com/ohjung/cocos2dxtest
Added file /users/coz/desktop/cocos2d-x/cocos2dTest/proj.android/src/com/ohjung/cocos2dxtest/cocos2dTest.java
Created directory /Users/coz/Desktop/cocos2d-x/cocos2dxTest/proj.android/res
Created directory /Users/coz/Desktop/cocos2d-x/cocos2dxTest/proj.android/bin
Created directory /Users/coz/Desktop/cocos2d-x/cocos2dxTest/proj.android/libs
Created directory /Users/coz/Desktop/cocos2d-x/cocos2dxTest/proj.android/res/values
Added file /users/coz/desktop/cocos2d-x/cocos2dxTest/proj.android/res/values/strings.xml
Created directory /Users/coz/Desktop/cocos2d-x/cocos2dxTest/proj.android/res/layout
Added file /users/coz/desktop/cocos2d-x/cocos2dxTest/proj.android/res/layout/main.xml
Added file /users/coz/desktop/cocos2d-x/cocos2dxTest/proj.android/AndroidManifest.xml
Added file /users/coz/desktop/cocos2d-x/cocos2dxTest/proj.android/build.xml
Added file /users/coz/desktop/cocos2d-x/cocos2dxTest/proj.android/proguard-project.txt
Resolved location of library project to: /Users/coz/Desktop/cocos2d-x/cocos2dx/platform/android/java
Updated project.properties
Updated local.properties
Updated file /users/coz/desktop/cocos2d-x/cocos2dxTest/proj.android/proguard-project.txt


(만들어진 폴더모습. android폴더는 cocos2d-x 버전 2.0부터 proj.android로 바뀌었습니다. 스샷은 예전 것으로 그냥 쓰겠습니다)



cocos2dx 설치폴더에 proj.android, Classes, Resources 세개의 폴더를 가지는 프로젝트폴더가 만들어졌습니다.
프로젝트를 만들고 소스코드들은 Classes폴더에 위치하도록 하고, 이미지등의 리소스들은 Resources폴더에.
마지막으로 프로젝트를 빌드하려면 android 폴더의 build_native.sh 를 실행합니다.



5. 안드로이드 프로젝트 빌드 및 실행

터미널로 안드로이드 프로젝트 proj.android 폴더에서 (스샷의 android 폴더)

Kwon-ui-MacBook-Pro:proj.android coz$ ./build_native.sh  <= 빌드 쉘스크립트 실행

//이전 버전 로그입니다.
Using prebuilt externals
make: Entering directory `/Users/coz/Desktop/cocos2d-2/cocos2dxTest/android'
Compile++ thumb  : game_shared <= main.cpp
Compile++ thumb  : game_shared <= AppDelegate.cpp
Compile++ thumb  : game_shared <= HelloWorldScene.cpp
Prebuilt       : libgnustl_static.a <= <NDK>/sources/cxx-stl/gnu-libstdc++/libs/armeabi/
.
.
.
SharedLibrary  : libgame.so
Install        : libgame.so => libs/armeabi/libgame.so
make: Leaving directory `/Users/coz/Desktop/cocos2d-2/cocos2dxTest/android'
//이전 버전 로그입니다.
쭉 컴파일이 되고, 완료가 되면 이클립스에서 프로젝트를 생성합니다.


6. 이클립스에서 프로젝트 생성

(이전 버전 스샷입니다. )


File - New - AndroidProject에서 exist project로 cocos2dx 설치경로에 만들어뒀던 프로젝트의 android폴더를 지정합니다.
우리는 desktop/cocos2d-x/cocos2dxTest/proj.android 폴더를 열면 되겠죠.
(이클립스 JUNO에서는 File-New-Android Project From Existing Code가 있네요)

(저는 이미 만들어서 error메시지가 뜬 상황입니다.)

빌드해서 실행해보시면 정상적으로 되실겁니다.

12.10.31 : 2.0.3부터는 이클립스에서 프로젝트 만들어도 바로 실행되지 않습니다.
cocos2d-x lib가 외부 프로젝트로 되어있어서 임포트를 해야하는데요.
이클립스 File->Import에서 General-Existing Projects into Workspace로 다음의 프로젝트 경로를 임포트합니다.
cocos2d-x(cocos2d-x설치폴더) / cocos2dx / platform / android / java
임포트 후 이클립스 workspace에는 libcocos2dx 프로젝트가 생성되고, 정상적으로 실행이 가능합니다.


완성공!

주의 : R.java파일이 만들어지지 않거나 기타 에러들이 뜨는 상황.
res->drawable에 아이콘 이미지가 icon.png 가 아닌 다른 이름으로 되있는지 확인 (실제로 다른이름으로 생성됨)
Project -> Property -> java build path의 Order and Export 에서 Android 4.0.3등의 해당되는 라이브러리를 가장 위로 올림.
같은 프로퍼티의 java compiler -> compiler level이 1.6 인지 확인.
문제가 없는 것 같은데 계속 에러가 사라지지 않으면, 프로젝트 삭제 후 다시 생성.

12.7.19 : 2.0에서의 문제로 보이며, 2.0.1 버전에서 해결됨




7. xcode 프로젝트 생성

위에서 만든 cocos2dx프로젝트를 생성합니다.

이 때, android 와 iOS개발을 동시에 같은 프로젝트 폴더에서 진행하려면, 
아까 안드로이드 프로젝트 만들 때 지정했던 것과 같은 이름으로 작성합니다. 
cocos2dxTest였지요. (패키지명이 아니고 프로젝트 이름)
대신, desktop/cocos2d-x/안에 생성하려하면 안되겠죠. 이미 안드로이드용 프로젝트 폴더가 있을테니까요.

적당히 임시로 폴더를 지정하시고 Create !

완성공 !

8. android, iOS 같은 프로젝트 폴더에서 작업하기  (2012.09.05 수정되었습니다.)

8-1.  7번에서 만든 아이폰 프로젝트 폴더의 하위폴더들을 (cocos2dxTest의 하위폴더) 
        5번에서 만든 안드로이드 프로젝트 폴더(cocos2dxTest폴더) 아래로 복사합니다. (cocos2dxTest/android 가 아닙니다)
아이폰 프로젝트의 ios, libs 폴더를 복사해서 안드로이드 프로젝트로 넣으면 되겠죠
(Resources 폴더안에 있는 이미지들도 복사해주세요.)

8-2 . 7번에서 만든 아이폰 프로젝트의 프로젝트 파일(cocos2dxTest.xcodeproj)을 cocos2dx 설치 폴더로 복사합니다.
        (cocos2d 2.0부터 xcodeproj파일을 프로젝트 폴더에 넣습니다. cocos2dx-2/cocos2dxTest/cocos2dxTest.xcodeproj )
cocos2dxTest.xcodeproj 파일을 안드로이드 동일한 폴더로 복사.


젤 윗 스샷이 이번에 만든 iOS 프로젝트 폴더
두번째 스샷이 하위폴더들과 프로젝트 파일을 복사해서 cocos2d 설치폴더에 복사한 후
세번째는 프로젝트 폴더 최종 모습.

안드로이드와 아이폰 개발을 하나의 폴더에서 진행할 수 있게되었습니다.


9. 멀티플랫폼 개발 테스트.

xcode 프로젝트에서 간단하게 Hello World라는 텍스트를 수정하여 테스트.



아이폰 시뮬레이터 실행
이제 터미널에서 안드로이드 프로젝트 컴파일.
OhJung-Kwon-ui-MacBook:android coz$ ./build_native.sh
Using prebuilt externals
make: Entering directory `/Users/coz/Desktop/cocos2d-2/cocos2dxTest/android'
Compile++ thumb  : game_shared <= main.cpp

컴파일 완료 후
이클립스 프로젝트 Refresh 한번 해주고 실행!

완성공!!!

[2012.09.12 수정]
본 게시글은 cocos2d-1.0.1x-0.13버전에서 정리된 것입니다.
2.0으로 업데이트 되면서, 수정된 부분이 보이면 고치고 있는데요.

2.0에서 부터 안드로이드 시뮬레이터에서는 스샷의 저런 화면이 보이지 않고
액티비티만 출력됐다 내려가는 것으로 확인됐는데,
cocos2d-x 2.0부터 opengl es 2.0 이상만 지원하도록 되어 그런것으로 추정 하고 있습니다.

안드로이드 폰에 올려 확인해보시면 정상구동 보실 수 있습니다.






즐코딩하시기바랍니다


+ Recent posts