studio - javah jni header generado tiene error de sintaxis-Android NDK-eclipse
ndk r13 (1)
Android NDK, usé el siguiente comando para generar el encabezado jni,
C:/eclipse_workspace/C_Google_FaceDetect/bin>javah -jni -verbose -classpath C:/Android_SDK/platforms/android-10;C:/eclipse_workspace/C_Google_FaceDetect/src;. -d C:/eclipse_workspace/C_Google_FaceDetect/jni c.google.facedetect.FaceDetect
El problema es que aunque configuré todo bien, recibo el siguiente error
No se encontró ninguna implementación para Lc / google / facedetect / FaceDetect nativo; .decodeYUV ([I [BII) V
threadid = 1: el hilo sale con excepción no detectada (group = 0x40018578)
EXCEPCIÓN FATAL: main java.lang.UnsatisfiedLinkError: decodeYUV
Intenté buscar lo que estaba mal, y encontré que en el archivo de encabezado c_google_facedetect_FaceDetect.h jni, en realidad tengo un error de sintaxis (aunque se haya generado)
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h> /* Header for class c_google_facedetect_FaceDetect */
#ifndef _Included_c_google_facedetect_FaceDetect
#define _Included_c_google_facedetect_FaceDetect
#ifdef __cplusplus extern "C" {
#endif
#undef c_google_facedetect_FaceDetect_CAMERA_WIDTH
#define c_google_facedetect_FaceDetect_CAMERA_WIDTH 480L
#undef c_google_facedetect_FaceDetect_CAMERA_HEIGHT
#define c_google_facedetect_FaceDetect_CAMERA_HEIGHT 320L
/*
* Class: c_google_facedetect_FaceDetect
* Method: decodeYUV
* Signature: ([I[BII)V
*/
JNIEXPORT void JNICALL Java_c_google_facedetect_FaceDetect_decodeYUV(JNIEnv *, jobject, jintArray, jbyteArray, jint, jint);
#ifdef __cplusplus }
#endif
#endif
La línea "JNIEXPORT void JNICALL ...." tiene un error de sintaxis, ¿quizás eso es lo que causa todos los errores?
Mi archivo Android.mk es el siguiente:
LOCAL_PATH: = $ (llamar a my-dir)
incluye $ (CLEAR_VARS)
LOCAL_MODULE: = detección facial
LOCAL_SRC_FILES: = face-detect.c
incluye $ (BUILD_SHARED_LIBRARY)
ACTUALIZAR Mi único archivo java se llama FaceDetect.java e incluye el siguiente código
public class FaceDetect extends Activity implements SurfaceHolder.Callback, Camera.PreviewCallback
{
static
{
Log.d("mytag", "before_lib");
System.loadLibrary("face-detect");
Log.d("mytag", "after_lib");
}
public static native void decodeYUV(int[] out, byte[] fg, int width, int height);
}
Además, Eclipse no dice cuál es el error de sintaxis, solo subraya la línea JNIExport y dice que el error de sintaxis
Otra ACTUALIZACIÓN para responder a la pregunta , sí he comprobado que la biblioteca se está cargando, aquí está el logcat
07-16 13: 31: 43.257: D / mytag (25188): before_lib
07-16 13: 31: 43.281: D / dalvikvm (25188): intentando cargar lib /data/data/c.google.facedetect/lib/libface-detect.so 0x40517808
07-16 13: 31: 43.281: D / dalvikvm (25188): se agregó lib compartida /data/data/c.google.facedetect/lib/libface-detect.so 0x40517808
07-16 13: 31: 43.281: D / dalvikvm (25188): No se encontró JNI_OnLoad en /data/data/c.google.facedetect/lib/libface-detect.so 0x40517808, omitiendo init
07-16 13: 31: 43.281: D / mytag (25188): after_lib
No hay error de sintaxis Compruebe que está cargando su biblioteca nativa y que se ha cargado satisfactoriamente.