Soy nuevo en el desarrollo de ndk en Android. He pasado por el sistema de archivos de ndk android. Aquí, explicando lo que hice. 1) he creado una carpeta llamada "jni" y luego creo 2 archivos llamados Android.mk y ndkfoo.c.¿Cómo resolver el java.lang.UnsatisfiedLinkError en NDK en Android?
En Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Here we give our module name and source file(s)
LOCAL_MODULE := ndkfoo
LOCAL_SRC_FILES := ndkfoo.c
include $(BUILD_SHARED_LIBRARY)
y en ndkfoo.c
#include <string.h>
#include <jni.h>
jstring Java_com_mindtherobot_samples_ndkfoo_NdkFooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) {
return (*env)->NewStringUTF(env, "Hello from native code!");
}
continuación, he creado clase NdkFooActivity, en la que he escrito
// load the library - name matches jni/Android.mk
static {
System.loadLibrary("ndkfoo");
}
pero ahora cuando construir desde cygwin en xp crea archivo .so con éxito luego ejecuto como aplicación de Android. Me da java.lang.UnsatisfiedLinkError en LOGCAT.
Por lo tanto, hágamelo saber dónde estoy equivocado.
Gracias de antemano,
¿Estás seguro de que la clase en la que declaraste invokeNativeFunction() es realmente com.mindtherobot.samples.ndkfoo.NdkFooActivity? Puede publicar todo el código – ognian
Específicamente, incluya la declaración del método nativo en el archivo .java. Muestra las declaraciones de "paquete" y "clase" también. Además, agregue una función JNI_OnLoad a su biblioteca compartida y coloque algunos registros allí para asegurarse de que la biblioteca se esté cargando correctamente. – fadden
Compruebe esta declaración en la ndkfoo.c Java_com_mindtherobot_samples_ndkfoo_NdkFooActivity_invokeNativeFunction, esto debería cambiar a su nombre de paquete como Java_com_your_package_ndkfoo_NdkFooActivity_invokeNativeFunction – pradeep