您的位置:首页 > 移动开发 > Android开发

android ubuntu jni so 报错Java_com_gcx_ndkjni_HelloNdkJni_stringFromNDKJNI

2012-12-11 16:22 567 查看
关键在于:hello-jni.c

hello-jni.c文件内容如下:

#include
<string.h>
#include
<jni.h>
jstring
Java_com_gcx_ndkjni_HelloNdkJni_stringFromNDKJNI(JNIEnv*
env,jobject
thiz
)
{
return (*env)->NewStringUTF(env,"Hello
from NDK JNI !");
}

要注意Java_com_gcx_ndkjni_HelloNdkJni_stringFromNDKJNI这段语句的意思。

在你的so库里面定义的方法需要跟你java工程中的包类名一致才行的。

例如你在so库中定义的native方法为:

Java_com_example_test_hellojni_HelloJni_stringFromJNI( JNIEnv*env,jobject thiz )

则你需要定义一个HelloJni的类,包名为com.example.test.hellojni,然后在HelloJni类中定义native方法tringFromJNI。这样都会找到相应的函数。

也就是说:比如如果是这样的xxx_xxx_xxx_stringFromJNI()

那么你的J***A工程里,应该有xxx_xxx这个Packeage,Packeage中有xxx这个类,类中调用。

然后打开命令行,这么搞一下:

root@hjm-H61M-DS2:~/workspace/HelloNDKJNI# $NDK/ndk-build

Compile thumb : hello-ndk-jni <=hello-jni.c

SharedLibrary : libhello-ndk-jni.so

Install :
libhello-ndk-jni.so =>libs/armeabi/libhello-ndk-jni.so

$NDK这个命令因人而异,要看在.basrch当中的环境变量设计,可以看我的前几篇当中,有介绍。

然后在项目中会多出两个文件夹。不用去管它。

最后在

static{
System.loadLibrary("libhello-ndk-jni");
}
这里确定包的名称,就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐