1. 라이브러리 만들기

NDK로 개발중 자주 사용하는 부분만 따로 라이브러리화 시키기 위해서 정적 라이브러리 파일 .a를 만드는 방법입니다.

라이브러리화 시킬 소스파일이 있는 폴더에 android.mk 파일을 아래와 같이 작성합니다.

LOCAL_PATH := $(call my-dir)

# 제작될 라이브러리(.a) 소스
include $(CLEAR_VARS)

# 라이브러리 이름
LOCAL_MODULE    := berabue

# 라이브러리에 포함될 소스 파일명
LOCAL_SRC_FILES := main.c\
				math.c\
				struct.c\

include $(BUILD_STATIC_LIBRARY)


# 쓰레기 .so 파일로 필수로 작성되어야 합니다
include $(CLEAR_VARS)

# 아무것이나 적습니다
LOCAL_MODULE    := garbege

# 위에 작성한 정적 라이브러리 이름
LOCAL_STATIC_LIBRARIES := berabue
include $(BUILD_SHARED_LIBRARY)

android.mk 파일을 위와같이 작성한 뒤 해당 폴더를 빌드(ndk-build)하

obj -> local -> armeabi 폴더에 '라이브러리이름.a' 파일이 생성됩니다.

해당 라이브러리파일과 소스에 사용되는 헤더파일(.h)을 같이 사용할 프로젝트에 넣으면 됩니다.


2. 라이브러리 링크 후 사용하기

먼저 준비된 라이브러리 파일(.a)과 헤더파일(.h)을 jni 폴더에 복사합니다.

Android.mk 파일을 열어 아래와 같이 수정합니다.

LOCAL_PATH := $(call my-dir)

# 미리 준비한 라이브러리 파일 관련
include $(CLEAR_VARS)
LOCAL_MODULE := static_berabue			# 대충 적으시면 됩니다.
LOCAL_SRC_FILES = ./libberabue.a		# 준비된 라이브러리 파일명
include $(PREBUILT_STATIC_LIBRARY)


include $(CLEAR_VARS)

# 현재 프로젝트 관련
# 제작될 so 파일명
LOCAL_MODULE := curlib

# 현재 프로젝트에 사용중인 소스파일명
LOCAL_SRC_FILES := jni-ndk.c\
				GLGameRenderer.c\

# 사용하는 라이브러리가 있다면.. 없으면 제거
LOCAL_LDLIBS := -lGLESv1_CM\
				-llog\
				-ljnigraphics\

# 위에서 적은 모듈명
LOCAL_STATIC_LIBRARIES := static_berabue

include $(BUILD_SHARED_LIBRARY)


작성이 완료되었으면 ndk-build를 해봅니다.

오류가 없다면 so 파일이 생성되어있습니다.