android — UnsatisfiedLinkError при вызове метода C ++ в файле C ++ из файла Java

Похоже, это популярная проблема,

И я до сих пор не могу найти решение.

package name : app.cloudstringers

Java file : Completed.java

static {
try {
System.loadLibrary("ffmpeg");
} catch (UnsatisfiedLinkError e) {
Log.d("", "Error : " + e.toString());
}

}

// Define native method
public native int getString();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.page_completed);

// Call native method
Log.d("", "" + getString());

C++ file : ffmpeg.cpp

#include <jni.h>
#include <android/log.h>
#include <string.h>

#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT jstring JNICALL Java_app_cloudstringers_Completed_getString(JNIEnv* env, jobject thiz)
{
jstring strRet = env->NewStringUTF("HelloWorld from JNI !");
return strRet;
}

#ifdef __cplusplus
}
#endif

Android.mk file

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := ffmpeg
LOCAL_SRC_FILES := ffmpeg.cpp
include $(BUILD_SHARED_LIBRARY)

Я запускаю приложение, но все равно получаю исключение ошибки UnsatisfiedLinkError : getString

Люди, которые знают, как решить эту проблему,

Пожалуйста, скажите мне,

Спасибо

ОБНОВИТЬ
Следуйте @dextor ответ. Извините, потому что я понял ошибку. Единственное, что мне нужно для этого вопроса, это изменение от public native int getString() в public native String getString(),

Это работает сейчас.

1

Решение

Не уверен (на самом деле не пытался), но единственная неправильная вещь, которую я заметил, — это тип возврата объявлений вашего метода.

Java-сторона

public native int getString()

НДК сторона

JNIEXPORT jstring JNICALL Java_app_cloudstringers_Completed_getString(JNIEnv* env, jobject thiz)

В Java у вас есть int, На С-стороне у вас есть jstring,

2

Другие решения

Других решений пока нет …