我正在尝试在c中运行一个简单的Android ndk应用程序,但我得到stringFromJNI()函数的UnsatisfiedLink Error。
任何帮助将不胜感激。我对C非常流利,但我的java有点生疏。我一直在尝试网上有很多关于命名的技巧,但到目前为止还没有运气。这是我的文件:
你好-jni.c:
#include <string.h>
#include <jni.h>
jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
我用ndk-build编译它,一切顺利,它为我提供了一个libnative.so,它位于项目目录中。我用剩下的eclipse。
NdkFooActivity.java:
package com.narola.Testndk;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
public class NdkFooActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ndk_foo);
Log.i("comes at point","hay...");
Log.d("value is : ",""+stringFromJNI());
}
public native String stringFromJNI();
public native String unimplementedStringFromJNI();
static {
System.loadLibrary("hello-jni");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_ndk_foo, menu);
return true;
}
}
感谢您提出任何建议,现在正在寻找几个小时!
答案 0 :(得分:3)
问题出在hello-jni.c
文件中。
c文件中的方法签名为Java_com_example_hellojni_HelloJni_stringFromJNI
,在您的活动中,包名称为com.narola.Testndk
。
方法签名的格式类似于Java_packagename_activityname_methodname
(在包名称(。)中,Dot将替换为下划线)。
在您的情况下,请尝试Java_com_narola_Testndk_NdkFooActivity_stringFromJNI