Android JNI学习笔记2

来源:互联网 发布:编程求解一元二次方程 编辑:程序博客网 时间:2024/05/29 15:35

1. JNI

Java本地接口,Java Native Interface, 它是一个协议, 该协议用来沟通Java代码和外部的本地C/C++代码, 通过该协议 Java代码可以调用外部的本地代码, 外部的C/C++ 代码可以调用Java代码;

也就是说JNI提供了一个桥梁, 打通了C语言和Java语言之间的障碍;JNI提供了一种规范; 可以让我们在C代码中找到Java代码class中的方法, 并且调用该方法; 也可以在Java代码中, 将一个C语言的方法映射到Java的某个方法上;

NDK与JNI区别 :

– NDK: NDK是Google开发的一套开发和编译工具集, 主要用于Android的JNI开发;

– JNI : JNI是一套编程接口, 用来实现Java代码与本地的C/C++代码进行交互;

2、JNI方法命名规则

JNI实现的方法 与 Java中Native方法的映射关系 : 使用方法名进行映射, 可以使用 javah 工具进入 bin/classes 目录下执行命令, 即可生成头文件;

JNI方法名规范 :

返回值 + Java前缀 + 全路径类名 + 方法名 + 参数( JNIEnv + 参数 ; jobject + 其它参数);

注意分隔符 : Java前缀 与 类名 以及类名之间的包名 和 方法名之间 使用 “_” 进行分割;

例如:

package com.example.hellojni;class HelloJni {     public native String stringFromJNI();}JNIEXPORT jstring JNICALL Java_com_example_hellojni_HelloJni_stringFromJNI  (JNIEnv *env, jobject obj);

上面可以看到java层native方法stringFromJNI对应的本地方法为Java_com_example_hellojni_HelloJni_stringFromJNI。

JNI方法参数介绍:
第一个参数是JNI接口指针 JNIEnv;

如果Native方法是非静态的, 那么第二个参数就是对Java对象的引用, 如果Native方法是静态的, 那么第二个参数就是对Java类的Class对象的引用;

3、 JNIEnv

JNIEnv作用 : JNIEnv 是一个指针,指向了一组JNI函数, 这些函数可以在jni.h中查询到,通过这些函数可以实现 Java层 与 JNI层的交互 , 通过JNIEnv 调用JNI函数 可以访问java虚拟机, 操作java对象;

4、JNI数据类型

Java数据类型 C数据类型 JNI数据类型对比 :

这里写图片描述

5、C语言代码回调Java方法

C代码回调Java方法的流程

(1) 找到java对应的Class

创建一个char*数组, 然后使用jni.h中提供的FindClass方法获取jclass返回值;

char* classname = "com/example/hellojni/HelloJni";  jclass dpclazz = (*env)->FindClass(env, classname);  

(2) 找到要调用的方法的methodID

使用jni.h中提供的GetMethodID方法, 获取jmethodID, 传入参数 ①JNIEnv指针 ②Class对象 ③ 方法名 ④方法签名, 在这里方法名和方法签名确定一个方法, 方法签名就是方法的返回值 与 参数的唯一标示;如果方法是静态的, 就使用GetStaticMethod方法获取

(3) 在C语言中调用相应方法

普通方法 : CallTypeMethod , 其中的Type随着返回值类型的不同而改变;
静态方法 : CallStaticTypeMethod, 其中的Type随着返回值类型不同而改变;

参考文章:

http://blog.csdn.net/shulianghan/article/details/18964835

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq支付密码忘了怎么办? 扣扣上转账错了怎么办 qq绑卡存在异常怎么办 微信没绑银行卡忘记支付密码怎么办 微信的自动扣费怎么办 不小心把钱充到微信财付通该怎么办 财付通用什么充值卡充值话费怎么办 苹果手机灯坏了怎么办 手机电灯不亮了怎么办? 苹果手机相机坏了怎么办 苹果5s手机背光灯不亮怎么办 苹果5s灯控坏了怎么办 微信q币冲错号码怎么办 支付宝转账到之前号码怎么办 qq红包收不了钱怎么办 qq抢红包要实名认证怎么办 支付宝被骗冲q币怎么办 qq发红包发错了怎么办 qq红包发不出来怎么办 qq红包发多了怎么办 qq发红包要短信验证怎么办 不是qq好友发了红包怎么办 苹果手机升级后支付宝打不开怎么办 qqq币充了没进帐怎么办 怎么办q币换成qq余额 支付宝qb冲多了怎么办 微信没钱怎么办怎么赚 忘记微信支付密码怎么办 手机设备注册达上限怎么办 在新手机上登微信需要验证怎么办 手机号被限制注册qq号怎么办 手机互换了微信怎么办 微信申诉只有一位好友怎么办 微信申诉没有好友怎么办 四川电信多余的话费怎么办 四川电信话费多了怎么办 固话冲q币要密码怎么办 手机卡怎么突然没了怎么办 联通话费冲错了怎么办 王卡高额半停机 怎么办 计算机报考在手机上网上支付怎么办