2010-12-30 3 views
7

제 3 자의 네이티브 라이브러리를 사용하는 Android apk를 구축하고 있습니다.이 라이브러리는 Static Object Code Library (.a 파일)에 있으며 JNI를 작성해야합니다. 자바에서 이러한 함수에 액세스하는 래퍼.thirdparty libs (libs.a)를 NDK로 연결

이러한 라이브러리는 크로스 컴파일러로 컴파일되었으며 기본적으로 Android입니다.

.a libs 파일의 함수에 링크 된 JNI 소스를 어떻게 컴파일합니까?

이 내 Android.mk 내가 컴파일

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_LDLIBS := -llog 

LOCAL_MODULE := ndk1 
LOCAL_SRC_FILES := native.c 

include $(BUILD_SHARED_LIBRARY) 

, 나는 단지 native.c 파일을 컴파일 할 수있다.

답변

10

이렇게하십시오.

이 라이브러리를 모듈로 선언해야합니다. 다음과 같이. 이 Android.mk 파일과 동일한 폴더에 파일을 libcurl.a

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := curl 
LOCAL_SRC_FILES := libcurl.a 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include 

include $(PREBUILT_STATIC_LIBRARY) 

및 /를 fodler 헤더를 포함한다.

이제 메인 모듈에서 lib를 선언하면 Android NDK가 나머지 부분을 처리합니다.

LOCAL_PATH := $(call my-dir) 

include $(call all-subdir-makefiles) 
include $(CLEAR_VARS) 

LOCAL_LDLIBS := -llog -ldl 
LOCAL_MODULE := rmsdk 
LOCAL_SRC_FILES := curlnetprovider.cpp native.c 
LOCAL_STATIC_LIBRARIES := curl 

include $(BUILD_SHARED_LIBRARY) 

참고 .. 모듈을 사용하기 전에 Android.mk 파일을 포함해야합니다. 나는 all-subdir-makefiles라고 부르면된다.

+2

공유 라이브러리 (* .so)에서도 작동합니다. 예를 들어 나는 sbite에 링크하기 위해 "adb pull /system/lib/libsqlite.so"를 사용한다. –

+0

나는 다른 방법을 시도하지만 나는 대답을 찾지 못한다. http://stackoverflow.com/questions/7332679/cant-create-shared-library-with-static-inside –

+0

@Marcos 첫 번째는 별도의 메이크 파일인가? 만약 당신이 그것을 추가하고 내가 두 번째 부분에있는 첫 번째 메이크 파일에 아닐린을 볼 수 없다면 ?? – jxgn

1

귀하의 특정 타겟 (암)에 맞게 라이브러리를 컴파일해야합니다. docs/STANDALONE-TOOLCHAIN.html (ndk-r5 폴더)에 설명 된대로 툴체인을 사용해야한다고 생각합니다.

+2

라이브러리는 이미 교차 컴파일러 툴체인을 사용하여 특정 팔로 컴파일되어 있습니다. –

관련 문제