2017년 2월 12일 일요일

Cocos2d-x 안드로이드 포팅 (apk 만들기)

1. JDK 설치


오라클 홈페이지에서 JDK를 받아서 설치한다.
자신의 OS에 맞는 버전을 다운로드 받은 후 설치를 한다. Windows x64를 선택했다.
 

환경변수 설정
 사용자 변수에 [새로만들기] 클릭하여 JAVA_HOME 의 값을 JDK설치 경로(C:\Program Files\Java\jdk1.8.0_121)로 넣어준다.


밑의 시스템 변수에서 Path를 찾아 편집을 한다. 변수 값 뒤에 C:\Program Files\Java\jdk1.8.0_121\bin; 를 넣어준다.

그리고 시스템 변수에서 [새로만들기]를 클릭하여 시스템 변수를 하나 더 정의한다.
변수 이름 : CLASSPATH
변수 값 : .;%JAVA_HOME%\lib\tools.jar



2. NDK 설치

안드로이드 개발자 홈페이지에서 NDK를 다운로드 받아 압축을 풀기만 하면 된다.

파일을 실행하면 압축이 풀리며 적당한 위치로 옮겨 놓는다.
C:\android-ndk 에 두었다.


3. 안드로이드 SDK  & 안드로이드 스튜디오 설치

안드로이드 스튜디오와 같이 있는 것이 편할것 같아 SDK 포함버전으로 다운받았다.

아래쪽에 SDK만 따로 받을수도 있는 것 같다.



기본값으로 인스톨 중..


안드로이드 스튜디오에서 SDK를 다운받는다. 혹은 C:\Users\admin\AppData\Local\Android\sdk\SDK Manager.exe를 실행시켜도 가능하다.
기본 SDK 경로는 : C:\Users\admin\AppData\Local\Android\sdk



4. ANT 설치

안드로이드 SDK 컴파일과 NDK 컴파일을 한번에 하기 위해서 3.0 버전부터는 ANT를 추가로 설치해야 한다.

압축을 풀고 c:/apache-ant 에 두었다.


5. Cocos2d-x NDK, SDK, ANT 경로 설정



ANT의 경우 bin 폴더까지의 경로를 입력해야 한다.

다시 명령어를 입력하면 셋팅 결과를 확인 할 수 있다.



6. 안드로이드 컴파일

proj.android 이동 후 cocos compile -p android --android-studio 명령어를 입력하여 컴파일을 실행한다.

변경된 파일이 있다면
\proj.android\jni\Android.mk
\proj.android-studio\app\jni\Android.mk
를 수정하여 준다. 경로가 조금 다르므로 주의해서 넣어준다.
mk 파일 수정할때 오류가 발생하므로 띄어쓰기와 tab 에 주의한다.

컴퍼일러가 다르기 때문에 Visual Studio 에서 문제 없던 소스코드에서 오류가 발생할 수 있다.
메시지를 읽고 수정해주면 된다.

빌드툴의 22.0.1 버전이 없다는 메시지가 뜨므로..  SDK 메니저를 통하여 해당 버전의 빌드 툴을 다운받았다.


빌드 성공.







예전 방법 참고..

코코스2d-x 환경설정

코코스2d의 메인폴더에 setup.py파일을 실행하여 환경을 설정한다.
명령 프롬프트를 실행 후 코코스 2d-x 메인 폴더에서 다음과 같이 입력한다. python setup.py
setup이 실행되면 먼저 코코스 콘솔 루트의 경로가 추가되며
NDK의 경로와 안드로이드 SDK 경로를 입력할 때는 adt 폴더 하위에 있는 sdk 폴더까지 입력해야 하며
ANT의 경로를 입력할 떄도 apache-ant 폴더 하위에 있는 bin 폴더를 입력해야 한다.

모든 입력이 완료되면 pc를 재부팅하여 환경설정을 적용한다.

안드로이드 컴파일을 위해서 먼저 새로운 프로젝트를 만든다.
코코스2d-x 환경 설정으로 코코스 콘솔 루트 경로가 추가되었으므로 프로젝트를 만드록 싶은 경로에서 바로 cocos 배치 파일을 실행하면 된다.
이렇게 새로운 프로젝트를 생성한 후 명령 프롬프트를 실행하고 하위폴더인 proj.android로 이동한다.
이동한 후 다음과 같이 입력하여 안드로이드 컴파일을 실행한다.
cocos compile test -p android
컴파일 할 때도 프로젝트 만들때 사용하였던 cocos 배치파일을 사용하며 컴파일을 위하여 compile라고 입력 후 프로젝트 이름을 입력하고 -p 설정으로 플랫폼 종류를 입력한다.
컴파일이 성공하면 bin 폴더에 apk가 생성 된다.

안드로이드 컴파일 설정
test/proj.android/jni/Android.mk 파일을 보면
LOCAL_SRC_FILES
LOCAL_C_INCLUDES
항목에 cpp와 h파일을 각각 추가해아 한다. 
네트워크나 extensions 라이브러리를 사용한 경우 Library와 Call 부분도 수정을 해줘야한다. 사용하지 않는 box2d_static 같은 라이브러리는 삭제해도 된다.

안드리오드의 경우 시뮬레이터로 실행을 하면 시간도 오래걸리고 불편하기 때문에 일반적으로 단말기로 실행을 많이 한다고한다.
그러기 위해서는 단말기 드라이버가 설치되어있어야 한다.

단말기를 PC에 연결하고 다음과 같이 입력한다.
cocos run test -p android

안드로이드를 실행하면 단말기에서 자동으로 게임이 실행된다.

다양한 화면 사이즈 대응
안드로이드 단말기의 경우 다양한 화면 크기를 가지고 있기때문에 대응이 쉽지 않다.
그래서 cocos2d-x에서는 화면 크기를 알아서 확대 축소해주는 메소드를 제공한다. 제공하는 메소드는 AppDelegate.cpp 에서 구현하면 된다. (예제 15.3 참조)

glview->setDesignResolutionSize(480, 320, ResolutionPolicy::EXACT_FIT);
고정할 크기와 해상도 정책을 입력한다.


enum class ResolutionPolicy
{
    /** The entire application is visible in the specified area without trying to preserve the original aspect ratio.
     * Distortion can occur, and the application may appear stretched or compressed.
     */
    EXACT_FIT, 고정한 사이즈로 변경. 부적합함..
    /** The entire application fills the specified area, without distortion but possibly with some cropping,
     * while maintaining the original aspect ratio of the application.
     */
    NO_BORDER, 화면 비율을 고려하여 확대/축소. 비율에 따라 단말기에서 출력되지 않는 경우가 발생
    /** The entire application is visible in the specified area without distortion while maintaining the original
     * aspect ratio of the application. Borders can appear on two sides of the application.
     */
    SHOW_ALL, 화면 비율을 고려하여 확대/축소. 비율이 맞지 않는 부분은 검은색으로 출력
    /** The application takes the height of the design resolution size and modifies the width of the internal
     * canvas so that it fits the aspect ratio of the device.
     * No distortion will occur however you must make sure your application works on different
     * aspect ratios.
     */
    FIXED_HEIGHT, 높이를 고정하고 화면 비율에 따라 너비를 변경. 일반적으로 가로 게임을 만들때 사용
    /** The application takes the width of the design resolution size and modifies the height of the internal
     * canvas so that it fits the aspect ratio of the device.
     * No distortion will occur however you must make sure your application works on different
     * aspect ratios.
     */
    FIXED_WIDTH, 너비 고정.

    UNKNOWN,
};

 

끝.

댓글 없음:

댓글 쓰기