Проблемы вызова C ++ из кода Java (Android)

Я пытаюсь вызвать нативные функции из кода Android, используя ndk, и сталкиваюсь с некоторыми проблемами. Приложение будет работать в течение короткого промежутка времени, затем появится сообщение об ошибке «неожиданно остановлено». Logcat показывает, что это происходит из-за UnsatisfiedLinkError: surfaceCreated.

Logcat:

02-12 00:09:33.918: E/AndroidRuntime(25900): FATAL EXCEPTION: GLThread 10
02-12 00:09:33.918: E/AndroidRuntime(25900): java.lang.UnsatisfiedLinkError: surfaceCreated
02-12 00:09:33.918: E/AndroidRuntime(25900):    at com.example.lesnaH.gameengine.GameRenderer.surfaceCreated(Native Method)
02-12 00:09:33.918: E/AndroidRuntime(25900):    at com.example.lesnaH.gameengine.GameRenderer.onSurfaceCreated(GameSurfaceView.java:23)
02-12 00:09:33.918: E/AndroidRuntime(25900):    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1373)
02-12 00:09:33.918: E/AndroidRuntime(25900):    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1138)

Вот где я пытаюсь вызвать функции из Java:

package com.example.lesnaH.gameengine;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.content.Context;
import android.opengl.GLSurfaceView;

public class GameSurfaceView extends GLSurfaceView {
private GameRenderer renderer;

public GameSurfaceView(Context context)
{
super(context);
renderer = new GameRenderer();
setRenderer(renderer);
}
}

class GameRenderer implements GLSurfaceView.Renderer {

public void onSurfaceCreated(GL10 gl, EGLConfig config) {
surfaceCreated();
}

public void onSurfaceChanged(GL10 gl, int width, int height) {
surfaceChanged(width, height);
}

public void onDrawFrame(GL10 gl) {
drawFrame();
}

public native void surfaceCreated();
public native void surfaceChanged(int w, int h);
public native void drawFrame();
}

Вот реализация этих функций в C ++:

#include <jni.h>
void initializeOpenGL();
void resizeViewport(int newWidth, int newHeight);
void renderFrame();

JNIEXPORT void JNICALL Java_com_example_lesnaH_gameengine_GameRenderer_surfaceCreated(JNIEnv*, jobject)
{
initializeOpenGL();
}

JNIEXPORT void JNICALL Java_com_example_lesnaH_gameengine_GameRenderer_surfaceChanged(JNIEnv*, jobject, jint width, jint height)
{
resizeViewport(width, height);
}

JNIEXPORT void JNICALL Java_com_example_lesnaH_gameengine_GameRenderer_drawFrame(JNIEnv*, jobject)
{
renderFrame();
}

А вот и мой Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := gameengine
LOCAL_SRC_FILES := graphics.cc \
graphicsExports.cc
LOCAL_LDLIBS := -lGLESv2

include $(BUILD_SHARED_LIBRARY)

Если кто-то захочет, чтобы я что-то опубликовал / предоставил больше информации, я был бы рад сделать это. Большое спасибо за любую помощь, которую вы можете оказать мне!

1

Решение

Я думаю, что вы пропали без вести System.loadLibrary(),

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]