Android NDK編譯本地文件以及引用第三方so文件

在需要引入第三方的so文件的情況下,怎樣使用NDK編譯本地代碼?

1.新建jni文件夾,將你要編譯源碼的文件以及需要引入的so文件復(fù)制到j(luò)ni文件目錄下
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.單獨(dú)引入
我們也可以為每一個第三方庫,寫一個.mk文件,然后在主的.mk文件中進(jìn)行引入

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文件導(dǎo)入到armeabi文件夾下,那么編譯后你將只會看見libyour_module_name.so文件。

3.單獨(dú)引用(推薦)
首先可以為每一個第三方庫,寫一個.mk文件,然后在主的.mk文件中進(jìn)行調(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)用當(dāng)前所有子目錄的mk文件)
include $(call all-subdir-makefiles)
目錄結(jié)構(gòu)示意圖.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容