Android NDK,我使用以下命令生成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
问题是 即使我设置好一切,我也会收到以下错误
找不到原生Lc / google / facedetect / FaceDetect的实现; .decodeYUV([I [BII] V
threadid = 1:线程退出,未捕获异常(group = 0x40018578)
FATAL EXCEPTION:main java.lang.UnsatisfiedLinkError:decodeYUV
我试着找错了,我发现在c_google_facedetect_FaceDetect.h jni头文件中,我实际上有语法错误(即使它已生成)
/* 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
“JNIEXPORT void JNICALL ....”行有语法错误,也许是导致所有错误的原因?
我的Android.mk文件如下:
LOCAL_PATH:= $(致电my-dir)
包括$(CLEAR_VARS)
LOCAL_MODULE:= face-detect
LOCAL_SRC_FILES:= face-detect.c
包括$(BUILD_SHARED_LIBRARY)
更新 我唯一的java文件名为FaceDetect.java,包含以下代码
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);
}
此外,Eclipse没有说明语法错误是什么,它只是强调JNIExport行并说出语法错误
回答问题的另一个更新 我确实检查过要加载的库,这里是logcat
07-16 13:31:43.257:D / mytag(25188):before_lib
07-16 13:31:43.281:D / dalvikvm(25188):尝试加载lib /data/data/c.google.facedetect/lib/libface-detect.so 0x40517808
07-16 13:31:43.281:D / dalvikvm(25188):添加了共享库/data/data/c.google.facedetect/lib/libface-detect.so 0x40517808
07-16 13:31:43.281:D / dalvikvm(25188):在/data/data/c.google.facedetect/lib/libface-detect.so 0x40517808中找不到JNI_OnLoad,跳过初始化
07-16 13:31:43.281:D / mytag(25188):after_lib
答案 0 :(得分:1)
没有语法错误。检查您是否正在加载本机库并且已成功加载。