adsense



cocos2d-x 3.x Android에서 외부 .so 추가하기

3.x 이상 버전에서는 안드로이드 빌드 시 build_native.py 파일을 통해 ndk 부분을 빌드하는데,
이때 build_native.py 안에서 assets폴더와 libs 폴더를 삭제하고 assets에는 Resources 폴더의 내용을,
libs에 armeabi/libcocos2dcpp.so 를 각각 생성합니다.

확장 라이브러리 중에는 티스토어 결제 모듈처럼(지금도 그러는지는 확인 안해봤는데) libs폴더에 .so 파일을 복사하는 식으로 사용하는 경우가 있는데, build_native.py에서 libs 폴더를 지워버리기 때문에
외부 .so를 남기기 위해서 build_native.py를 수정할 필요가 있습니다.

수정할 부분은
def build(ndk_build_param,android_platform,build_mode):
로 선언된 함수의 맨 마지막
do_build(cocos_root, ndk_root, app_android_root,ndk_build_param,sdk_root,android_platform,build_mode)
아래에 다음 코드를 추가해줍니다.

  1.     lib_path = os.path.dirname(os.path.realpath(__file__))
  2.     lib_path = os.path.join(lib_path, "lib/armeabi-v7a")
  3.     target_path = os.path.dirname(os.path.realpath(__file__))
  4.     target_path = os.path.join(target_path, "libs/armeabi")
  5.    if os.path.isdir(target_path):
  6.         copy_files(lib_path, target_path)
  7.  
※위 코드는 do_build 다음에 수행되도록 do_build와 같은 블럭에 맞춥니다.

2.라인에서 추가할 .so 파일이 있는 폴더를 지정해주고 (이 경우는 /프로젝트폴더/proj.android/lib/armeabi-v7a 이므로 lib/armeabi-v7a을 넣어줬습니다. 이 폴더에 추가할 .so 파일을 카피해 둡니다.)

4.라인이 .so를 복사해 넣을 폴더 지정, .so파일에 따라 다른 폴더명을 요구할 수 있습니다.
6.라인의 copy_files는 build_native.py 내에 정의되어 있습니다.

이제 빌드하면 지정한 폴더에 외부 .so가 추가된 상태로 빌드됩니다.

파이썬을 몰라서 엄청 헤매다 간신히 추가했으니 코드가 왜 이따위냐..하는 것은 양해 바랍니다.




덧글

  • 펭귄대왕 2015/09/23 14:53 # 답글

    ※현재 3.3 버전까지에서만 동작을 확인했고, 3.6 이상에서는 build_native.py 파일이 변경되어 (3.4, 3.5는 미확인) 이 방법이 적용되지 않습니다.
    그런데, 3.6의 build_native.py를 3.3버전의 build_native.py로 대치해서 해 봐도 잘 동작합니다..
댓글 입력 영역


Books

Geek라이프

메가 드라이브 퍼펙트 카탈로그
마에다 히로유키 저/조기현 역

미소녀 일러스트 테크닉
B-은하, pen스케, 카와이 저/정유진 역

핵심강좌! Cocos2d-x
이재환 저

피규어의 교과서 레진 키트 & 도색 입문 편
후지타 시게토시 저/김정규 역
예스24 | 애드온2
일본서적 전문사이트 NEPIC