Mar*_*rth 5 c java android android-ndk unsatisfiedlinkerror
我正在尝试使用本机代码创建一个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++项目:file - > new - > other - > Convert to a C/C++ Project(添加C/C++支持).
然后我将PATH变量添加到项目属性 - > C/C++ build - > Environment下找到的Environment变量.我将ndk的路径添加到此变量中.
我做了更多必要的make文件并生成了jni文件.该项目确实在libs目录中编译并生成.so文件.但是,当我尝试在设备上运行项目时,我收到以下运行时错误:
异常java/lang/UnsatisfiedLinkError; 初始化nl/blaat/project_name/JNIWrapper时抛出; java.lang.UnsatisfiedLinkError:无法从loader 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)
Run Code Online (Sandbox Code Playgroud)
Application.mk
APP_PLATFORM := android-10
APP_ABI := all
Run Code Online (Sandbox Code Playgroud)
如果 NDK 中的示例项目给出相同的错误,您确定它是为正确的架构构建的吗?大多数 Android 设备都运行 ARM 处理器,但有些设备运行在 x86 和 mips 上,并且许多 NDK 示例默认情况下仅针对 ARM 构建。
要针对所有架构进行构建,请将“APP_ABI := all”添加到 jni/Application.mk。
另外,为了确保调整后的构建过程确实有效,请首先尝试通过在项目根目录中的终端中手动运行 ndk-build 来构建 .so,以获取 NDK 示例。(此后您可能需要刷新 eclipse 中的文件夹结构,以确保找到并包含新构建的库。)