Android原生方法对Java是不可见的

Android native method is invisible for Java

本文关键字:Java 原生 方法 Android      更新时间:2023-10-16

我正在努力解决我的代码中非常恼人的错误。这个错误一遍又一遍地出现:

    No implementation found for long com.oculus.gles3jni.GLES3JNILib.onCreate(android.app.Activity) 
(tried Java_com_oculus_gles3jni_GLES3JNILib_onCreate and 
Java_com_oculus_gles3jni_GLES3JNILib_onCreate__Landroid_app_Activity_2)

但是在我的GLES3JNILib.java文件中我有这个:

package com.oculus.gles3jni;
import android.app.Activity;
import android.view.Surface;
// Wrapper for native library
public class GLES3JNILib
{
    // Activity lifecycle
    public static native long onCreate( Activity obj );
    public static native void onStart( long handle );
    public static native void onResume( long handle );
    public static native void onPause( long handle );
    public static native void onStop( long handle );
    public static native void onDestroy( long handle );
    // Surface lifecycle
    public static native void onSurfaceCreated( long handle, Surface s );
    public static native void onSurfaceChanged( long handle, Surface s );
    public static native void onSurfaceDestroyed( long handle );
    // Input
    public static native void onKeyEvent( long handle, int keyCode, int action );
    public static native void onTouchEvent( long handle, int action, float x, float y );
}

所以我不确定是什么错了。它在那里,但我仍然无法启动我的应用程序。在我的cpp代码的实现是:

jlong Java_com_oculus_gles3jni_GLES3JNILib_onCreate( JNIEnv * env, jobject obj, jobject activity )
{
...
}

有人看到我错过了什么,或者做错了吗?这是否可能是因为我的cpp没有h文件?

必须生成C代码,然后在不重新运行javah的情况下将Java本机方法声明更改为static

或者你根本没有运行它,而是试着随机应变。别那样做。

第二个参数的正确签名是jclass,但不要相信我的话:重新运行javah并相应地调整您的。c文件。

注意:你的。c文件应该#包含你的。h文件。

您忘记加载库了吗?

public class GLES3JNILib
{
   static {
      try {
        System.loadLibrary("libGLES3JNILib");
      } catch (UnsatisfiedLinkError e) {
          // do something helpful here
      }
  }
  ...
}