2015-11-02 127 views
1

我有一个具有以下本机api签名的java文件。 (First.java)在注册中注册本地层调用失败

public static native int nativePreview(int id, Surface surface); 
public static native int nativetest(int id); 

和JNI文件,

static JNINativeMethod methods [] = { 
     { "nativetest", "(I)I", (void *)nativetest}, 

     { "nativePreview", "(IJLandroid/view/Surface;)I", (void *) nativePreview}, 

}, 

在JNI文件所属。定义。

static jint nativetest(JNIEnv *env, jobject thiz, jint myid) 
{ 
    // code.. 
} 


static jint nativePreview(JNIEnv *env, jobject thiz, jint myid, jobject surface) 
{ 
    // code 
} 

对于本地注册我用

下面呼叫
env->RegisterNatives(javaConsumerClass, methods, sizeof(methods)/sizeof(methods[0])); 

问题:

有趣的是,具有接收下面的错误:

java.lang.NoSuchMethodError:没有静态或非静态方法“Lcom/fd/sample/First; .nativePreview(IJLandroid/view/Surface;)I”

我已经删除nativePreview()调用,注册成功完成。

问:

,我是用经过表面的方法正确的话,还是有什么,我都忽略了?请帮帮我。

回答

1

在这里,您是说,你的函数需要一个int,一个longandroid.view.Surface,并返回一个int

(IJLandroid/view/Surface;)I

但是,这并不与你的nativePreview定义相匹配:

static jint nativePreview(JNIEnv *env, jobject thiz, jint myid, jobject surface) 

这里没有你的参数列表中的jlong

+0

谢谢迈克尔,我想通了。你是对的。再次感谢。 – DrunkenMaster