[英]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.