2012-08-03 22 views
7

He recibido este mensaje durante el último día y hasta ahora no ha causado ningún problema. Conseguí mi código para ejecutar con mi biblioteca nativa antes, pero hoy agregué algunas funciones nuevas y nuevamente no funcionará.No se ha encontrado JNI_OnLoad en ... omitiendo init

No se muestran errores en LogCat, pero mi programa simplemente se abre y se cierra al instante en mi dispositivo. No hay ningún mensaje que indique que la aplicación se detuvo inesperadamente, solo un destello negro en la pantalla.

He buscado en Google y SO, pero hay MUCHOS motivos diferentes para que aparezca este mensaje. Aquí está mi LogCat:

08-03 10:44:50.186: D/dalvikvm(2143): Trying to load lib /data/data/my.eti.commander/lib/libRelayAPI.so 0x40514f58 
08-03 10:44:50.186: D/dalvikvm(2143): Added shared lib /data/data/my.eti.commander/lib/libRelayAPI.so 0x40514f58 
08-03 10:44:50.186: D/dalvikvm(2143): No JNI_OnLoad found in /data/data/my.eti.commander/lib/libRelayAPI.so 0x40514f58, skipping init 
08-03 10:44:50.288: I/DEBUG(1058): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
08-03 10:44:50.288: I/DEBUG(1058): Build fingerprint: 'LENOVO/IdeaPad_Tablet_A1_07/A1_07:2.3.4/GRJ22/eng.user.20120209.100319:user/release-keys' 

Lo que me gustaría saber es:

1) ¿Es este mensaje No JNI_OnLoad haciendo que mi programa para no abre?

2) Si es así, sé que tengo ninguno de mi código publicado, pero podría alguien explicar la idea general de este mensaje. Incluyendo lo que init se está saltando.

EDIT:

Las nuevas funciones que se han añadido hoy comentadas cuando esto sucedió. Originalmente recibí un error diferente y quería asegurarme de que mi código anterior aún funcionaba.

Respuesta

13

La función JNI_OnLoad no es esencial. Por lo tanto, si no ha proporcionado esta función, su programa debería ejecutarse normalmente.

Su problema proviene de otra parte de su código. Intenta usar ndk-gdb para arreglarlo.

+0

Gracias, encontré algunas cosas con ndk-gdb. – JuiCe

0

Aquí, como @djedge mencionado JNI_OnLoad es sólo una advertencia. Lo más probable es que haya dos razones principales para esto. El primero es algo malo con su archivo Android.mk. Normalmente debería ser parezca

LOCAL_PATH := $(call my-dir) 
    include $(CLEAR_VARS) 
    OPENCV_CAMERA_MODULES:=on 
    OPENCV_INSTALL_MODULES:=on 
    #OPENCV_LIB_TYPE:=SHARED 
    include D:\NDK\MyApplication3\libraries\native\jni\OpenCV.mk 
    LOCAL_SRC_FILES := DetectionBasedTracker_jni.cpp 
    LOCAL_C_INCLUDES += $(LOCAL_PATH) 
    LOCAL_LDLIBS  += -llog -ldl 
    LOCAL_MODULE  := detection_based_tracker 
    include $(BUILD_SHARED_LIBRARY) 

aquí, por favor dar un poco de atención en LOCAL_SRC_FILES si se proporciona archivo de C/C++ fuente correcta.

El problema de jerarquía estaría en sus firmas de funciones. Si generó archivos de encabezado y esas firmas de función deberían coincidir con las definiciones de función/método de su archivo c/C++.

Aquí hay un ejemplo. encabezado del archivo

JNIEXPORT jlong JNICALL Java_com_example_jobs_myapplication_DetectionBasedTracker_nativeCreateObject 

(JNIEnv *, jclass, jstring, jint);

C++ archivo

JNIEXPORT jlong JNICALL Java_com_example_jobs_myapplication_DetectionBasedTracker_nativeCreateObject 
(JNIEnv * jenv, jclass, jstring jFileName, jint faceSize) 
    { 

    //code goes here... 
    } 

Aquí com_example_jobs_myapplication podría estar equivocado.

Cuestiones relacionadas