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

伙计们,

在我的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.

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

预先感谢您的帮助.

问候,
彼得

解决方法

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

相关文章

ADB Remote ATV Android TV 的遥控器,基于 ADB Shell 命令 ...
使用Flutter自带的SearchDelegate组件实现搜索界面,通过魔改...
上篇文章讲解了怎么使用Kotlin的协程配合Retrofit发起网络请...
安卓开发——WebView+Recyclerview文章详情页,解决高度...
Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...