最近在搞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.2cto.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) //注意與前面的不同之處
**/
摘自 落埃無蒂的專欄