Android JNI方法 - 是第二个参数jclass还是jobject?

时间:2013-09-18 00:00:19

标签: android-ndk

民间,

在我的Android Java代码中,我的声明如下:

public class SurfacePanelNative extends SurfaceView implements SurfaceHolder.Callback {
   ...
   private static native void native_render();
}

在我的本机代码中,我将函数声明为:

void native_render(JNIEnv *env, jobject javaSurface) {
   ANativeWindow* window = ANativeWindow_fromSurface(env, javaSurface);
   ...
}

查看网络上的一些示例,似乎该函数应声明为:

void native_render(JNIEnv *env, jclass clazz) {
   ...
}

我想知道哪个声明是正确的。

我认为第一个是正确的。否则,我没有足够的信息来获取javaSurface。

如果有人能对此有所了解,我将不胜感激。

提前感谢您的帮助。

的问候,
彼得

1 个答案:

答案 0 :(得分:10)

如果方法为jclass,则为static,否则为jobject。如果您使用javah,正如JNI设计师所期望的那样,您将始终得到正确的答案。