【发布时间】:2014-08-15 09:20:21
【问题描述】:
我正在尝试使用本机代码制作一个 android 项目来调用 OpenGl 函数。
我正在按照本指南来完成这个项目: 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-files 并生成了 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)
Application.mk
APP_PLATFORM := android-10
APP_ABI := all
【问题讨论】:
标签: java android c android-ndk unsatisfiedlinkerror