Похоже, это популярная проблема,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
Люди, которые знают, как решить эту проблему,
Скажите, пожалуйста,
Благодарности
UPDATE Follow @dextor ответ. Извините, потому что я ошибаюсь. Единственное, что мне нужно для этого вопроса, - это изменение от public native int getString()
до public native String getString()
.
Это работает сейчас.
Опубликовать достаточно трассировки стека, чтобы включить сообщения, созданные при попытке загрузить библиотеку, и ** полную ** неудовлетворенную ошибку ссылки. Также укажите имя файла Java, в котором определяется собственный метод. –
И не забудьте включить e.printStackTrace() в свои блоки catch, чтобы вы получали значимые отчеты об ошибках. –
try-catch 'System.loadLibrary (" ffmpeg ");' не запускается. Все нормально. –