我正在使用一些本机代码开发一个Android应用程序。我还有一些应该包含在项目中的原生预建库。首先,我将预构建的lib放在项目的libs / armeabi文件夹中。但问题是这些文件在构建时被删除了。
所以我google了一下,发现你必须在你的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]
问题是: 所有这些文件都在同一目录中,所有这些文件都被复制到libs / armeabi文件夹中。除了一个文件! libswscale.so不会被复制。我不知道这里有什么问题。我绝对没有文件名中的拼写错误。
我错过了什么。也许有人有类似的问题吗?
提前致谢!
答案 0 :(得分:0)
我不知道Android.mk文件的执行是无序。最后丢失的lib未被复制,因为中间存在错误。所以错误的是我期望Android.mk文件从上到下以线性顺序进行处理。但这种情况并非如此。在构建结束时复制了缺少的库,可能是因为LOCAL_MODULE命名(所有libs都以libavwscale开头的libav开头)。
希望这能节省一些时间(我花了一些时间才意识到这一点)。
答案 1 :(得分:0)
libswresample
下的Android.mk
文件中可能未添加LOCAL_SHARED_LIBRARIES
。
这对我有用。