2016년 4월 1일 금요일

cocos2d-x 3.10 안드로이드 빌드

cocos2d-x  3.10 버전에서 안드로이드로 빌드를 하는 도중 겪었던 문제들을 정리해보려고 합니다.

제가 사용한 방법은 이클립스를 사용하지 않고 터미널에서 빌드하여 USB로 연결된 핸드폰에서 게임을 실행시키는 것입니다.

먼저 제가 사용한 개발 환경 입니다. ( 작성일 16년 4월 1일 )
  • Cocos2d-x 3.10
  • SDK: Android 5.0.1(API 21)
  • NDK: android-ndk-r10e
  • ANT: apache-ant-1.9.6
  • OS: windows 10


기본적인 설치 방법은 cocos 공식 홈페이지의 문서를 참조합니다.

http://www.cocos2d-x.org/docs/installation/B/



다음은 공식 홈페이지의 설치 방법을 요약 및 제가 한 방법을 추가한 전체적인 설치 흐름입니다. 각 단계를 반드시 순서대로 실행해야하며, 위 단계 중 완료가 안 된 부분이 있다면 다음 단계로 넘어가지 않습니다.

* 표시된 항목은 자세한 설명을 하단에 추가하였습니다.
  1. coco2d-x 3.10 다운로드 및 압축 해제 및 환경변수 등록
  2. JDK 설치(경로 C:\Android\sdk)
  3. *NDK 설치(경로 C:\Android\ndk)
  4. ANT 설치(경로 C:\Android\ant)
  5. Python 2.7 설치
  6. ANT와 Python의 경로를 윈도우 환경변수 Path에 추가합니다.
  7. JAVA_HOME 환경변수를 새로 만듭니다.
  8. 커맨드 창을 다시 시작한 뒤 ant와 python 을 각각 쳐봐서 잘 설치됬는지 확인합니다.
  9. **잘 동작한다면 커맨드 창에서 cocos2d를 설치한 폴더로 이동하여 python setup.py를 입력하여 환경변수 설정을 마저 진행합니다.
  10. ***cocos를 환경변수에 등록하고 새로운 cocos 프로젝트를 생성합니다.
  11. ****새 프로젝트의 proj.android 폴더의 안드로이드 빌드 정보를 수정합니다.
  12. 커맨드 창에서 새 프로젝트의 루트 폴더로 이동한 뒤 cocos compile -p android 을 입력하여 빌드합니다.
  13. 핸드폰을 USB로 연결하고 디버그 모드를 실행합니다( 설정에서 개발자 부분 확인 ). 삼성 핸드폰의 경우 삼성 통합 드라이버를 설치해야 작동할 수 있습니다.
  14. 커맨드 창에서 cocos run -p android 를 입력하여 결과를 확인합니다.


* NDK를 공식 홈페이지에서 다운받으려고 하면 가장 최신 버전 밖에 제공하지 않습니다. 그런데 현재 최신 버전 r11b를 사용하면 안드로이드 빌드가 되지 않습니다. 에러 메세지를 보면 Widget.o 같은 목적코드 파일을 찾을 수 없다고 나오는데, 아예 정상적인 빌드 자체가 되지 않는 것 같습니다. 따라서 그 이전 버전 ( 저의 경우 r10e를 사용하였습니다 )을 사용해주셔야 합니다.

아래의 링크는 버전별로 NDK를 받을 수 있게 링크를 걸어놓은 외국 블로그 입니다. 참고하셔서 필요하신 버전을 받으시면 될 것 같습니다. 혹시 몰라서 r10e 버전의 링크는 그 아래 추가적으로 포함하였습니다.

http://pnsurez.blogspot.kr/2015/07/download-android-ndk-tools.html
http://dl.google.com/android/ndk/android-ndk-r10e-windows-x86_64.exe



** setup.py를 실행하면 환경 변수를 입력하라고 나옵니다. NDK, SDK, ANT 의 경로를 입력하라고 나오는데, 압축 해제한 폴더의 경로를 드래그 하셔서 입력하시면 됩니다. 경로 뒤에 공백이 오지 않도록 주의해주세요.

모든 경로가 성공적으로 잘 입력되면( cocos가 저희 대신 사용자 환경변수에 등록해주는겁니다. 만약 버전이 틀리거나 해서 경로를 고쳐야 된다면 사용자 환경변수에서 수정해주세요) 아래의 그림처럼 나올껍니다.




*** 아래 그림과 같이 cocos를 사용자 환경 변수 또는 시스템 환경 변수에 등록해서 콘솔에서 cocos 명령을 사용할 수 있도록 합니다.



그 후 아래의 명령을 사용하여 원하는 위치에 새로운 cocos 프로젝트를 생성해줍니다. 밑에서 MyGame은 Visual Studio에서 사용할 project 명이고, com.Mycompany.MyGame은 안드로이드에서 사용할 프로젝트 이름입니다. 이 이름은 구글 플레이스토어에서 고유한 이름이니 중복되지 않을만한 이름을 지어주세요. 주의하실 점은 .(dot)이 2 개 이상 들어가야 합니다. 보통 위와 같이 회사구분.회사명.프로젝트명 으로 적어준다고 합니다. -l은 사용언어, cpp를 적고 -d는 새 프로젝트를 생성할 타겟 폴더입니다.
cocos new MyGame -p com.MyCompany.MyGame -l cpp -d ~/MyCompany



**** 저는 이 부분에서 제일 헤맸습니다. AndroidManifest.xml의 정보는 수정하지 않았습니다. 저의 경우 초기 값이 <uses-sdk android:minSdkVersion="9"/> 였는데, 그냥 냅둬도 빌드가 가능합니다. 나중에 릴리즈 할 때 수정해주면 될 것 같습니다.

먼저 수정할 것은 새 프로젝트DIR\proj.android\project.properties 파일입니다.
target=android-21 으로 설정하였습니다. 저의 경우 가장 최신 버전은 android-23 인데 android-23 부터는 http 라이브러리가 포함되어있지 않다고 합니다. 빌드 시 import 실패 에러가 떠서 android-21로 변경하였습니다.

그 밑에 android.library.reference.1=../cocos2d/cocos/platform/android/java 를 적어줍니다. 사용할 안드로이드 자바 라이브러리의 위치를 지정해주는 것입니다.

SDK를 설치한 폴더에서 SDK_MANAGER.exe를 실행하여 android-21가 설치되어있는지 확인하고, 없다면 다운받아서 설치합니다.

그 결과 아래의 그림과 같은 코드가 project.properties에 들어있게 됩니다.


같은 이름의 파일이 또 있습니다. 위에서 지정해준 reference의 위치로 가시면 그 안에서 또 빌드가 이루어지는 모양입니다.

../cocos2d/cocos/platform/android/java/project.properties의 파일도 수정합니다. 여기서는 라이브러리의 경로를 다시 지정할 필요는 없고 target=android-21 으로 수정만 해줍니다.

마지막으로 새 프로젝트DIR\proj.android\jni\Application.mk 파일을 수정합니다. 아래의 그림처럼 APP_STL 을 c++_static 으로 변경하고 그 아래 두 줄을 추가해줍니다. NDK_TOOLCHAIN을 clang 지정하고 그 버전을 정해줍니다.


만약 처음 자동으로 생성된 프로젝트에서 새 파일을 추가하거나 했다면 Android.mk 파일에서 LOCAL_SRC_FILES 에 값을 더해주시고, 추가로 사용된 라이브러리 등도 지정해줘야 합니다.



처음 해 보는 안드로이드 빌드이기도 하고, 문서의 부족과 검색능력의 부족으로 많은 시간을 허비해서.. 저장 겸 혹시 다른분들에게 참고가 될 수 있을까 해서 정리했습니다.

감사합니다.