我正在尝试使用本机代码创建一个Android项目来调用OpenGl函数。
我正在按照本指南来实现这个项目: http://www.learnopengles.com/calling-opengl-from-android-using-the-ndk/
根据本指南,我必须在Package Explorer中右键单击项目,从下拉菜单中选择Android Tools,然后选择Add Native Support ...."。但是,这个选项在我的eclipse版本中不可见(最新的osx版本来自与sdk捆绑在一起的android站点)。
要解决此问题,我使用以下方法手动将项目转换为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提供的示例项目也存在同样的问题。
编辑:一些可能有助于识别问题的额外信息。
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)
Application.mk
APP_PLATFORM := android-10
APP_ABI := all
答案 0 :(得分:1)
如果来自NDK的示例项目给出了相同的错误,您确定它是为正确的架构构建的吗?大多数Android设备运行ARM处理器,但有些运行在x86和mips上,默认情况下许多NDK样本仅为ARM构建。
要为所有体系结构构建,请将“APP_ABI:= all”添加到jni / Application.mk。
另外,为确保调整后的构建过程确实有效,请尝试在项目根目录中手动在终端中运行ndk-build,以获取NDK样本。 (在此之后,您可能需要刷新eclipse中的文件夹结构,以确保找到并包含新构建的库。)