2013-08-28 56 views
0

我正在開發一個具有一些本機代碼的Android應用程序。我也有一些本地的預編譯庫,應該包含在項目中。首先,我將預先構建的庫放在項目的libs/armeabi文件夾中。但問題是這些文件在構建時被刪除。許多預建庫之一是不包括在ndk構建

所以我搜索了一下,發現你必須在你的Android.mk文件中包含這些預建庫以複製到libs/armeabi文件夾。

這裏是我的Android.mk的一部分:

[...] 
include $(CLEAR_VARS) 

LOCAL_MODULE := libavcodec 
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libavcodec.so 

include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 

LOCAL_MODULE := libavdevice 
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libavdevice.so 

include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 

LOCAL_MODULE := libavfilter 
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libavfilter.so 

include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 

LOCAL_MODULE := libavformat 
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libavformat.so 

include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 

LOCAL_MODULE := libavutil 
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libavutil.so 

include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 

LOCAL_MODULE := libmetaiosdk 
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libmetaiosdk.so 

include $(PREBUILT_SHARED_LIBRARY) 


include $(CLEAR_VARS) 
LOCAL_MODULE := libswscale 
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libswscale.so 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 

LOCAL_MODULE := libswresample 
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libswresample.so 

include $(PREBUILT_SHARED_LIBRARY) 
[EOF] 

的問題是: 所有這些文件都在同一個目錄和所有這些文件被複制到庫/ armeabi文件夾。除了一個文件! libswscale.so不會被複制。我不知道這裏有什麼問題。我絕對沒有文件名中的拼寫錯誤。

我錯過了什麼。也許有人有類似的問題?

在此先感謝!

回答

0

我不知道該Android.mk文件是處理無序。最後一個缺失的lib沒有被複制,因爲它們之間存在錯誤。所以錯誤在於我預計Android.mk文件將按照從上到下的線性順序進行處理。但這種情況並非如此。缺少的庫在構建結束時被複制,可能是因爲LOCAL_MODULE命名(除libswscale外,所有庫都以libav開頭)。

希望這可以節省其他人一段時間(我花了一段時間才意識到這一點)。

+0

你可以接受你的答案來標記這個問題已解決:) – krsteeve

+1

只有兩天後它說。 :-) – Alex

0

可能libswresample未在Android.mk文件中加入LOCAL_SHARED_LIBRARIES

這對我有效。