В настоящее время я использую SWIG / jni для вызова функций C ++ из java для приложения Android. Тем не менее, у меня возникают трудности всякий раз, когда функция возвращает jstring. Я получаю следующие ошибки в LogCat при запуске приложения ...
ОШИБКА : не удается найти decl для собственного Lcom / example / swigJNI; .plugin_name: L () java / lang / String
ОШИБКА : невозможно найти decl для собственного Lcom / example / swigJNI; .plugin_description: L () java / lang / String
Вот код, который может быть полезен для изучения ...
Код оболочки, сгенерированный SWIG:
SWIGEXPORT jstring JNICALL Java_swigJNI_1plugin_1name(JNIEnv *jenv, jclass jcls) {
jstring jresult = 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
result = (char *)plugin_name();
if (result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
SWIGEXPORT jstring JNICALL Java_swigJNI_1plugin_1description(JNIEnv *jenv, jclass jcls) {
jstring jresult = 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
result = (char *)plugin_description();
if (result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
Декларация JNI Родные методы:
static const JNINativeMethod methods[] = {
{"plugin_name", "()Ljava/lang/String", (void*) Java_swigJNI_1plugin_1name},
{"plugin_description", "()Ljava/lang/String", (void*) Java_swigJNI_1plugin_1description}
};
Я успешно выполнил JNI_onLoad () и RegisterNatives (), когда функции возвращают int, однако строки для меня были довольно проблематичными. Я не совсем понимаю, как эти функции не найдены. Я что-то упускаю?