# JNI 原生代码简介

8 篇文章 0 订阅
仍然从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), 注意完整的类名包名中包名的点要用 _ 代替;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值