我想在android上使用FFMpeg。我对这个话题很陌生。我使用本教程1构建库。现在我有.so和.h文件,但我不知道如何在我的项目中使用它们。我可能需要在我的Android.mk文件中链接它。这是我项目中的.mk和.c文件:
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS := -llog
LOCAL_MODULE := ndksetup
LOCAL_SRC_FILES := native.c
include $(BUILD_SHARED_LIBRARY)
native.c
#include <jni.h>
#include <string.h>
#include <android/log.h>
#define DEBUG_TAG "NDKSetupActivity"
void Java_com_example_ndksetup_MainActivity_printLog(JNIEnv *env, jobject this, jstring logString)
{
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);
}
有人能告诉我如何在native.c文件中使用.so和.h文件吗?
答案 0 :(得分:1)
这将如何从您的本机C文件中调用JNI文件夹中的lib文件
JNIEXPORT jstring JNICALL Java_*(JNIEnv *pEnv, jobject pObj) {
char* lCodecName = gVideoCodecCtx->codec->name;
return (*pEnv)->NewStringUTF(pEnv, lCodecName);
}
这就是你如何链接Java代码中的本机库
static {
System.loadLibrary("<native jni lib file name>");
}