我正在尝试使用本机代码创建一个 android 项目来调用 OpenGL 函数。
我正在按照本指南来启动该项目:http://www.learnopengles.com/calling-opengl-from-android-using-the-ndk/ http://www.learnopengles.com/calling-opengl-from-android-using-the-ndk/
根据本指南,我必须“右键单击 Package Explorer 中的项目,从下拉菜单中选择 Android Tools,然后选择 Add Native Support...”。但是,此选项在我的 eclipse 版本(来自与 sdk 捆绑的 android 站点的最新 osx 版本)中不可见。
为了解决这个问题,我使用以下命令手动将项目转换为 C/C++ 项目:
文件 -> 新建 -> 其他 -> 转换为 C/C++ 项目(添加 C/C++ 支持)。
然后,我将 PATH 变量添加到项目属性 -> C/C++ 构建 -> 环境下找到的环境变量中。我将 ndk 的路径添加到这个变量中。
此外,我制作了必要的 make 文件并生成了 jni 文件。
该项目确实编译并在 libs 目录中生成一个 .so 文件。
但是,当我尝试在设备上运行该项目时,出现以下运行时错误:
异常 java/lang/UnsatisfiedLinkError;初始化 nl/blaat/project_name/JNIWrapper 时抛出;
java.lang.UnsatisfiedLinkError:无法从加载器 dalvik.system.PathClassLoader[dexPath=/data/app/nl.blaat.project_name 加载 GLCore。
当我在线搜索时,问题的通常答案是本机代码未编译,但就我而言,它可以编译。 NDK 提供的示例项目也存在同样的问题。
编辑:一些可能有助于识别问题的额外信息。
- 该问题在 osx 和 windows 上都会出现。
- 该问题出现在我的三星 Galaxy s2 和 s5 上,因此它可能不是特定于设备的。
- SDK附带的示例也出现该问题。
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := OpenGLCore
LOCAL_CFLAGS := -Wall -Wextra
LOCAL_SRC_FILES := OpenGLCore.c jni.c
LOCAL_LDLIBS := -lGLESv2
include $(BUILD_SHARED_LIBRARY)
应用程序.mk
APP_PLATFORM := android-10
APP_ABI := all