2025-05-17

最近在搞android上的rtmp協議的播放,將ffmpeg編譯成幾個.so動態鏈接庫之後(後面再說如何在android下編譯ffmpeg源代碼),就可以引用頭文件並直接寫自己的jni接口瞭,做完這些,就可以寫android下的make文件瞭下面就介紹一下androidmake文件的寫法。
首先最簡單的mk文件可以參照ndk目錄下samples目錄中的hello-jni工程,這裡講講如何在mk文件中引用第三方的動態和靜態庫以及如何引用系統庫
(其實我是linux小白,有說錯的地方請指教)
LOCAL_PATH := $(call my-dir)//標準mk語句,指編譯路徑,所有mk文件第一句都是這個

/**這個模塊表示引用瞭一個本地的靜態庫
include $(CLEAR_VARS) //清除各種變量,因為這些變量是靜態全局的,如果清除,下次編譯時又會用到這些變量造成出錯
LOCAL_MODULE    := libopencore-amrnb  //本地靜態庫模塊的名字,這個名字在下面編譯jni時需要引用
LOCAL_SRC_FILES := lib/libopencore-amrnb.a //本地靜態庫文件地址
include $(PREBUILT_STATIC_LIBRARY)  //PREBUILT_STATIC_LIBRARY表示先build一個靜態庫
**/

/**這個模塊表示引用瞭一個本地的動態鏈接庫
include $(CLEAR_VARS) //同上 www.aiwalls.com
LOCAL_MODULE    := libswscale  //本地動態庫模塊的名字
LOCAL_SRC_FILES := lib/libswscale.so //本地動態庫文件位置
include $(PREBUILT_SHARED_LIBRARY) //表示先build這個動態鏈接庫
**/

include $(CLEAR_VARS)
LOCAL_MODULE    := libavutil
LOCAL_SRC_FILES := lib/libavutil.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := libavcore
LOCAL_SRC_FILES := lib/libavcore.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := libavcodec
LOCAL_SRC_FILES := lib/libavcodec.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := libavformat
LOCAL_SRC_FILES := lib/libavformat.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := libopenal
LOCAL_SRC_FILES := lib/libopenal.so
include $(PREBUILT_SHARED_LIBRARY)

/**此模塊編譯自己寫的jni文件
include $(CLEAR_VARS)
LOCAL_MODULE    := ffmpeg-jni  模塊名字
LOCAL_C_INCLUDES:= $(LOCAL_PATH)/include  //我將所有頭文件都放到瞭jni目錄的include目錄下,這句表示所有引用頭文件都到這個目錄下去找
LOCAL_SRC_FILES := ../../test-ffmpeg-jni/ffmpeg-jni.c \  //這句表示jni文件的位置,因為我裝瞭一個CDT插件去開發c代碼,所以將jni文件都放在瞭另一個test-ffmpeg-jni工
                                                                                                     //程下,其中../表示上級目錄
                ../../test-ffmpeg-jni/openal.c \
                ../../test-ffmpeg-jni/opengl.cpp
LOCAL_SHARED_LIBRARIES := libavformat libavcodec libavutil libswscale openal  //這個表示編譯本模塊需要用到的其它庫,這幾個名字都是前面定義的模塊名
LOCAL_STATIC_LIBRARIES := libopencore-amrnb  //同上
LOCAL_LDLIBS :=  -L$(SYSROOT)/usr/lib -llog -lGLESv2//表示使用瞭系統的log庫和GLESv2庫
include $(BUILD_SHARED_LIBRARY)   //註意與前面的不同之處
**/ 

摘自  落埃無蒂的專欄 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *