从Java代码调用C++的问题(Android)
Issues calling C++ from Java code (Android)
我正试图使用ndk从android代码中调用本机函数,但遇到了一些问题。该应用程序将运行一小段时间,然后出现一个错误,表明它"已意外停止"。Logcat显示这是由于不满意的链接错误: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)
如果有人想让我发布其他内容/提供更多信息,我很乐意。非常感谢你能给我的任何帮助!
我想您缺少System.loadLibrary()
。
相关文章:
- 使用蓝牙组件将数据从Android手机传输到串行设备时出现问题
- 在 Android Studio 中使用 C++ 共享对象时出现问题
- 从文件问题加载纹理 Android NDK 和 OpenGL
- Android因为权限问题而杀死Qt应用程序
- exteranl原生构建问题,构建命令失败,android工作室
- build命令失败,外部原生问题android工作室
- InterlockedCompareExchange Android 崩溃问题
- 在Android Studio项目中使用tensorflow lite C++API的问题
- Android Studio Canary 3.0 中的 NDK 问题
- Android OpenCV 应用程序的内存问题
- 不触摸屏幕时的Android(Juce)性能问题
- 编译C 源的问题将.OFF文件转换为XML Android OpenGL ES可读取的问题
- 针对 android 编译的问题..."未在此范围内声明"错误
- 64位Android编译,但在运行时出现问题
- Android NDK套接字连接问题
- Android 的 c++11 多线程问题,其中某些线程未正确调度
- Android NDK / General JNI 问题:将对象/jobject 转换为 c++ 用户 defiend
- 为什么 fopen 由于来自 Android-NDK 应用程序的权限问题而在本机方法中失败
- 无法解析导入 com.android.internal.util.BuildInfo 的问题
- 从Java代码调用C++的问题(Android)