【发布时间】:2011-03-16 19:14:12
【问题描述】:
我是android ndk开发的新手。我已经通过了ndk android的文件系统。 在这里,解释我做了什么。 1) 我创建了一个名为“jni”的文件夹,然后创建了 2 个名为 Android.mk 和 ndkfoo.c 的文件。
在 Android.mk 中
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Here we give our module name and source file(s)
LOCAL_MODULE := ndkfoo
LOCAL_SRC_FILES := ndkfoo.c
include $(BUILD_SHARED_LIBRARY)
在 ndkfoo.c 中
#include <string.h>
#include <jni.h>
jstring Java_com_mindtherobot_samples_ndkfoo_NdkFooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) {
return (*env)->NewStringUTF(env, "Hello from native code!");
}
然后我创建了 NdkFooActivity 类,我在其中编写了
// load the library - name matches jni/Android.mk
static {
System.loadLibrary("ndkfoo");
}
但是现在当我在 xp 中从 cygwin 构建时,它会成功创建 .so 文件,然后我作为 android 应用程序运行。它给了我 LOGCAT 中的 java.lang.UnsatisfiedLinkError。
所以,请让我知道我错在哪里。
提前致谢,
【问题讨论】:
-
你确定你声明invokeNativeFunction()的类实际上是com.mindtherobot.samples.ndkfoo.NdkFooActivity吗?您可以发布所有代码
-
具体请在.java文件中包含native方法的声明。也显示“包”和“类”声明。此外,将 JNI_OnLoad 函数添加到您的共享库并在那里放置一些日志记录,以便您可以确保成功加载库。
-
在 ndkfoo.c Java_com_mindtherobot_samples_ndkfoo_NdkFooActivity_invokeNativeFunction 中检查此声明,这应该更改为您的包名称,例如 Java_com_your_package_ndkfoo_NdkFooActivity_invokeNativeFunction
标签: android-ndk