0

Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE    := pacman
LOCAL_SRC_FILES := main.cpp \
        Pacman.cpp
LOCAL_CFLAGS := -DANDROID_NDK \
                -DDISABLE_IMPORTGL
LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog

include $(BUILD_SHARED_LIBRARY)

main.cpp で:

void Java_com_wiagames_pacman_PacmanRenderer_nativeInit(JNIEnv* env) {
...
}

パッケージは com.wiagames.pacman です。nativeInit メソッドを含む Java クラスは、com.wiagames.pacman パッケージの PacmanRenderer です。pacman.cpp を追加する前は問題なく動作していましたが、追加した後は次のようになりました。

E/AndroidRuntime( 2238): FATAL EXCEPTION: GLThread 1104
E/AndroidRuntime( 2238): java.lang.UnsatisfiedLinkError: Native method not found: com.wiagames.pacman.PacmanRenderer.nativeInit:()V
E/AndroidRuntime( 2238):    at com.wiagames.pacman.PacmanRenderer.nativeInit(Native Method)
E/AndroidRuntime( 2238):    at com.wiagames.pacman.PacmanRenderer.onSurfaceCreated(MainActivity.java:120)
E/AndroidRuntime( 2238):    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1494)
E/AndroidRuntime( 2238):    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
W/ActivityManager(  306):   Force finishing activity com.wiagames.pacman/.MainActivity

main.c: http://pastebin.com/GPexqwcv

MainActivity.java: http://pastebin.com/yWfWpyNb

4

1 に答える 1

2

適切なリンケージを取得するには、次のように JNI メソッドを宣言してみてください。

extern "C"                                                                                                              
JNIEXPORT void JNICALL Java_com_wiagames_pacman_PacmanRenderer_nativeInit(JNIEnv* env, jobject thiz)
{
    ...
}

(プロジェクトの導入時に C から C++ に変更した可能性もありますPacman.cppか? それが機能しなくなった理由を説明している可能性があります。)

于 2012-09-10T03:33:12.587 に答える