簡體   English   中英

Android本機方法對Java不可見

[英]Android native method is invisible for Java

我在代碼中遇到非常煩人的錯誤。 我一次又一次出現此錯誤:

    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代碼,然后將Java本機方法聲明更改為static而不重新運行javah

或者,您根本不運行它,而是嘗試對其進行控制。 不要那樣做

正確的簽名具有用於第二個參數的jclass ,但請不要jclass :重新運行javah並相應地調整.c文件。

注意:您的.c文件應#include您的.h文件。

您忘了加載圖書館嗎?

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

  ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM