# JNI 原生代码简介

来源:互联网 发布:mac taupe亚洲人试色 编辑:程序博客网 时间:2024/04/28 06:23
仍然从hello-jni开始。JNI (Java  Native Interface)Java原生接口技术实现java应用程序和原生代码间的通信   声明原生方法 : `public native String stringFromJNI();`  在共享库中载入原生模块: java.lang.System类提供了两个静态方法,load和loadlibrary用于在运行时加载共享库```static{    System.loadLibrary("hello-jni");}```Android上的Java库路径包含/vendor/lib和/system/lib,loadLibrary在扫描库路径时,一旦发现同名的库,立即加载共享库。因为Java库路径的第一组目录是Android系统目录,为了避免与系统库命名冲突,建议为每个共享库选唯一的名字。在C/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!");      }      Java_com_example_hellojni_HelloJni_stringFromJNI包括包名+类名+函数名      这么复杂的名字可以由javah工具来自动生成
方法声明  Jstring  Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv * env,                                                  jobject thiz)  第一个参数JNIEnv是指向可用JNI函数表的接口指针;第二个参数jobject是HelloJni  类实例的java对象引用。


-- JNI标准规范: 遵守JNI标准规函数命名方式, JNI中方法命名为 Java_包
名_类名_方法名 , 可以使用javah生成签名头文件, 靠这种方式实现
Native方法 与 JNI方法之间的映射关系, 即应用直接与框架层进行交互,
这种规范常用与应用开发;
C语言方法命名JNI接口规则 : Java_完整包名类名_方法名(JNIEnv *env, jobject thiz), 注意完整的类名包名中包名的点要用 _ 代替;

1 0
原创粉丝点击