在需要引入第三方的so文件的情況下橙凳,怎樣使用NDK編譯本地代碼?
1.新建jni文件夾蕾殴,將你要編譯源碼的文件以及需要引入的so文件復制到jni文件目錄下
2.編寫android.mk文件,首先將你的將你的本地代碼文件的android.mk部分的代碼寫好岛啸,然后在這部分后面添加需要引入的so文件的代碼
參考格式如下:
1.全部寫在一個文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libyour_module_name
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_SRC_FILES := your_module_src.cpp
include $(BUILD_SHARED_LIBRARY)
#下面為第三方的庫
include $(CLEAR_VARS)
LOCAL_MODULE := liblocSDK3
LOCAL_SRC_FILES := liblocSDK3.so
include $(PREBUILT_SHARED_LIBRARY)
2.單獨引入
我們也可以為每一個第三方庫钓觉,寫一個.mk文件,然后在主的.mk文件中進行引入
Android_ffmpeg.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg
LOCAL_SRC_FILES := libffmpeg.so
include $(PREBUILT_SHARED_LIBRARY)
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg_jni
LOCAL_SRC_FILES := ffmpeg_jni.c
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include/ $(LOCAL_PATH)/include/libavutil/ $(LOCAL_PATH)/include/libavcodec/ $(LOCAL_PATH)/include/libavformat/ $(LOCAL_PATH)/include/libavcodec/ $(LOCAL_PATH)/include/libswscale/
LOCAL_LDLIBS += -L$(LOCAL_PATH)/prebuilt/ -lffmpeg -llog
include $(BUILD_SHARED_LIBRARY)
include $(LOCAL_PATH)/prebuilt/Android_ffmpeg.mk
以上部分就是百度定位sdk的so文件引入時的android.mk部分的編寫坚踩,如果你還需要其他的so文件呢荡灾,你只需要在這部分的后面再加上這樣的代碼,然后將名字替換成那個so文件的名即可瞬铸。
編寫好了之后批幌,我們編譯工程,最后我們會在armeabi等文件夾中嗓节,看到兩個so文件荧缘,libyour_module_name.so以及l(fā)iblocSDK3.so文件,如果你是直接將需要引入的so文件導入到armeabi文件夾下拦宣,那么編譯后你將只會看見libyour_module_name.so文件截粗。
3.單獨引用(推薦)
首先可以為每一個第三方庫,寫一個.mk文件鸵隧,然后在主的.mk文件中進行調(diào)用
Android.mk (第三方庫)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg
LOCAL_SRC_FILES := libffmpeg.so
include $(PREBUILT_SHARED_LIBRARY)
Android.mk (自己寫的jni wrapper)
#added by rx 150425
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := player
SDL_PATH := ../SDL2
FFMPEG_PATH := ../ffmpeg
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(SDL_PATH)/include
LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_PATH)/include
# Add your application source files here...
LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c
#LOCAL_SRC_FILES += SDLtest.c
#LOCAL_SRC_FILES += SDLTestAudio.c
LOCAL_SRC_FILES += sdl2Lesson.c
#添加本地共享庫
LOCAL_SHARED_LIBRARIES := SDL2
LOCAL_SHARED_LIBRARIES += ffmpeg
LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog
include $(BUILD_SHARED_LIBRARY)
Android.mk (最外層的mk文件調(diào)用當前所有子目錄的mk文件)
include $(call all-subdir-makefiles)
目錄結(jié)構(gòu)示意圖.png