我是在android.nd中開發的ndk新手,我經歷了ndk android的文件系統。 在這裏,解釋我做了什麼。 1)我創建了一個名爲「jni」的文件夾,然後創建2個名爲Android.mk和ndkfoo.c的文件。如何在Android中解決NDK中的java.lang.UnsatisfiedLinkError?
在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?您可以發佈所有代碼 – ognian 2010-07-17 19:14:11
具體而言,請在.java文件中包含本地方法的聲明。也顯示「包」和「類」聲明。另外,將JNI_OnLoad函數添加到共享庫中,並在其中放入一些日誌記錄,以便確保該庫成功加載。 – fadden 2010-07-19 17:47:53
在ndkfoo.c中檢查此聲明Java_com_mindtherobot_samples_ndkfoo_NdkFooActivity_invokeNativeFunction,這應該更改爲您的軟件包名稱,如Java_com_your_package_ndkfoo_NdkFooActivity_invokeNativeFunction – pradeep 2011-04-30 11:31:49