해당 포스트는 "안드로이드 ndk의 모든 것", "안드로이드 NDK 네이티브 프로그래밍" 책의 내용을 요약한 것이다.



다음은 특정 프로그램의 Android.mk 파일이다. 

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := libtwolib-first
LOCAL_SRC_FILES := first.c

include $(BUILD_STATIC_LIBRARY)



include $(CLEAR_VARS)


LOCAL_MODULE := libtwolib-second

LOCAL_SRC_FILES := second.c


LOCAL_STATIC_LIBRARY := libtwolib-first


include $(BUILD_SHARED_LIBRARY)

위 Android.mk 파일은 라이브러리를 두 개 생성한다. first.c는 BUILD_STATIC_LIBRARY로 되어 있어 정적 라이브러리로 생성되고 second.c에서 first.c 정적 라이브러리에 접근해서 기존 라이브러리를 재활용한다. second.c에서는 first.c에 정의된 함수를 호출할 수 있게 된다.


자바 코드에서는 System.loadLibrary("twolib-second"); 코드를 통해서 second.c에 정의되어 있는 네이티브 함수에 접근할 수 있게 된다.


만약 다음과 같이 Android.mk 파일이 구성되 있다고 해보자.

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := libtwolib-first
LOCAL_SRC_FILES := first.c

#include $(BUILD_STATIC_LIBRARY)

include $(BUILD_SHARED_LIBRARY) ---------


include $(CLEAR_VARS)


LOCAL_MODULE := libtwolib-second

LOCAL_SRC_FILES := second.c


#LOCAL_STATIC_LIBRARY := libtwolib-first

LOCAL_SHARED_LIBRARY := libtwolib-first


include $(BUILD_SHARED_LIBRARY)

위 Android.mk 파일을 통해서 공유 라이브러리가 2 개가 생긴다. 그리고 자바 클래스에 로딩을 한다. 다음 로딩 코드이다.

System.loadLibrary("twolib-second");
System.loadLibrary("twolib-first");

위와 같이 로딩을 하게 되면 오류가 발생하게 된다. 왜냐하면 'twolib-second' 라이브러리에서 'twolib-first' 라이브러리를 사용하기 때문에 즉, 의존하기 때문이다. 따라서 다음과 같이 바꿔야 한다.

System.loadLibrary("twolib-first");
System.loadLibrary("twolib-second");


+ Recent posts