Android NDK编译中在libs\armeabi中加入第三方so库文件的方法
假设要加入库文件的名字为libffmpeg.so文件
1.要在project\jni目录下新建一目录prebuilt,把libffmpeg.so文件copy到project\jni\prebuilt中,并在目录project\jni\prebuilt中添加文件Android.mk,内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg
LOCAL_SRC_FILES := libffmpeg.so
include $(PREBUILT_SHARED_LIBRARY)
2.在project\jni目录下的Android.mk文件中加入
LOCAL_SHARED_LIBRARIES := ffmpeg
并在末尾加入
include $(LOCAL_PATH)/prebuilt/Android.mk
一般模板的写法如下:
A:Static library
文件Android.mk:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := hello-jniLOCAL_SRC_FILES := hello-jni.cinclude $(BUILD_STATIC_LIBRARY)
文件Application.mk:
APP_MODULES :=hello-jni
B: Share library
文件Android.mk:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := hello-jniLOCAL_SRC_FILES := hello-jni.cinclude $(BUILD_SHARED_LIBRARY)
C: Static library+Share library
文件Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)LOCAL_MODULE := mylib_staticLOCAL_SRC_FILES := src.cinclude $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)LOCAL_MODULE := mylib_sharedLOCAL_SRC_FILES := src2.c
LOCAL_STATIC_LIBRARIES := mylib_static
include $(BUILD_SHARED_LIBRARY)
D:Using 3rd party library
文件Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)LOCAL_MODULE := thirdlib1 # name it whateverLOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libthird1.a # or $(so_path)/libthird1.so#LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/includeinclude $(PREBUILT_STATIC_LIBRARY) #or PREBUILT_SHARED_LIBRARY
include $(CLEAR_VARS)LOCAL_MODULE := mylib_use_thirdlibLOCAL_SRC_FILES := src.c
LOCAL_STATIC_LIBRARIES := thirdlib1 #or LOCAL_SHARED_LIBRARY
include $(BUILD_SHARED_LIBRARY) #if static lib,need Application.mk(needn't,I have cheked!)
When I use the static library ,I always got the undefined reference to** error no matter what I do.After a whole tough day,I found that it's not the problem of the mk file,it's the library!Holy Shit!!
My static library was built in cygwin of windows.Of course it can't be used in Linux!!!!Then I built it with android ndk tool and it runs perfectly!!!
a. check your library's mode (whethe