我正在尝试在Android上使用FFMpeg。首先,我尝试在我的Mac上构建FFMpeg,但我无法做到这一点。我在互联网上检查了很多解决方案但没有工作我试图在Ubuntu 12.04上构建FFMpeg。我尝试了很多解决方案,最后我找到this示例,然后我成功构建了它。然后我得到头文件和.so文件。然后我将所有这些复制到我的Mac上并尝试在我的项目中使用它。我将这些文件复制到我的项目中。现在我的项目树看起来像这样:
这是我的Android.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := avformat
LOCAL_SRC_FILES := libavformat.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include/libavformat
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := ndksetup
LOCAL_SRC_FILES := native.c
LOCAL_LDLIBS := -llog
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
include $(BUILD_SHARED_LIBRARY)
这是我的Application.mk文件:
APP_MODULES := ndksetup
APP_PLATFORM := android-8
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libavformat.so
这是我的natice.c文件:
#include <jni.h>
#include <string.h>
#include <android/log.h>
#include "include/libavcodec/avcodec.h"
#include "include/libavformat/avformat.h"
#define DEBUG_TAG "NDKSetupActivity"
void Java_com_example_ndksetup_MainActivity_printLog(JNIEnv *env, jobject this,
jstring logString) {
av_register_all();
jboolean isCopy;
const char * szLogString = (*env)->GetStringUTFChars(env, logString,
&isCopy);
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK: %s", szLogString);
(*env)->ReleaseStringUTFChars(env, logString, szLogString);
}
jint Java_com_example_ndksetup_MainActivity_fibonacci(JNIEnv * env,
jobject this, jint value) {
if (value <= 1)
return value;
return Java_com_example_ndksetup_MainActivity_fibonacci(env, this,
value - 1)
+ Java_com_example_ndksetup_MainActivity_fibonacci(env, this,
value - 2);
}
我收到错误
[armeabi] SharedLibrary : libndksetup.so
/Applications/adt-bundle-mac-x86_64-20140321/sdk/ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /Users/michal/Desktop/NDKSetup/obj/local/armeabi/objs/ndksetup/native.o: in function Java_com_example_ndksetup_MainActivity_printLog:/Users/michal/Desktop/NDKSetup/jni/native.c:11: error: undefined reference to 'av_register_all'
collect2: ld returned 1 exit status
make: *** [/Users/michal/Desktop/NDKSetup/obj/local/armeabi/libndksetup.so] Error 1
我真的不知道如何处理它。你能告诉我我做错了什么,我该如何解决?或者也许还有另一种方法可以在Android中使用.so库
答案 0 :(得分:0)
LOCAL_SRC_FILES
不执行任何操作。但你应该添加
LOCAL_SHARED_LIBRARIES += avformat
Android.mk 的 ndksetup 标记。