해당 포스트는 "안드로이드 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");
'안드로이드 > 기본' 카테고리의 다른 글
NDK(5) - 네이티브 스레드 (0) | 2017.07.02 |
---|---|
NDK(4) - JNI_OnLoad 예제, 한글처리 (0) | 2017.07.02 |
NDK(2) - 안드로이드 스튜디오 NDK JNI 기본 예제 (2) | 2017.07.01 |
NDK(1) - JNI, Android.mk (0) | 2017.06.30 |
안드로이드 mvp (0) | 2017.06.15 |