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)
아래에 다음 코드를 추가해줍니다.
- lib_path = os.path.dirname(os.path.realpath(__file__))
- lib_path = os.path.join(lib_path, "lib/armeabi-v7a")
- target_path = os.path.dirname(os.path.realpath(__file__))
- target_path = os.path.join(target_path, "libs/armeabi")
- if os.path.isdir(target_path):
- copy_files(lib_path, target_path)
※위 코드는 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가 추가된 상태로 빌드됩니다.
파이썬을 몰라서 엄청 헤매다 간신히 추가했으니 코드가 왜 이따위냐..하는 것은 양해 바랍니다.
at 2015/06/12 08:03












덧글
그런데, 3.6의 build_native.py를 3.3버전의 build_native.py로 대치해서 해 봐도 잘 동작합니다..