JNI学习1

本地代码访问Java代码
在被调用的C/C++函数中也可以反过来访问java程序中的类。
Javah工具生成的c/c++函数声明中,可以看到有两个参数。

JNIEnv类型
JNIEnv类型实际上代表了Java环境,通过这个JNIEnv*指针,可以对Java端的代码进行操作。例如,创建

Java类的对象,调用Java对象的方法,获取Java对象的属性等等。JNIEnv的指针会被JNI传入导本地方法

的实现函数中来对Java端的代码进行操作。

JNIEnv类中有很多函数可以用:
NewObject/NewString/New<TYPE>Array
Get/Set<TYPE>Field
Get/SetStatic<TYPE>Field
Call<TYPE>Method/CallStatic<TYPE>Method等许许多多的函数

Java类型在C/C++中的映射关系
java类型  本地类型  JNI定义的别名
int       long      jint/jsize


jclass的取得
为了能够在C/C++中使用Java类。JNI.h头文件中专门定义了jclass类型来表示Java中的Class类。
JNIEnv类中有如下几个简单的函数可以取得jclass:
jclass FindClass(const char* clsName);
jclass GetObjectClass(jobject obj);
jclass GetSuperClass(jclass obj);

FindClass会在classpath系统环境变量下寻找类。传入完整类名,注意包与包之间是用‘/’而不是‘.’来分

隔。
jclass cls_string = env->FindClass("java/lang/String");

访问Java类中的属性与方法
在C/C++本地代码中访问Java端的代码,一个常见的应用就是获取类的属性和调用类的方法。为了再C/C++

中表示属性和方法,JNI在Jni.h中定义了jfieldID,jmethodID类型来分别代表Java端的属性和方法。

我们在访问或是设置Java属性的时候,首先就要再本地代码取得代表该Java属性的jfieldID,然后才能再

本地代码进行Java属性操作。同样的,我们需要呼叫Java端的方法时,也是需要取的代表该方法的

jmethodID才能进行Java方法调用。

使用JNIEnv的GetFieldID/GetMethodID
GetStaticFieldID/GetStaticMethodID
来取得相应的jfieldID和jmethodID

Android JNI学习路线可以按照以下步骤进行: 1. 了解JNI的基本概念和作用:JNIJava Native Interface)是Java提供的一种机制,用于实现Java与其他编程语言(如C、C++)之间的交互。它允许在Java代码中调用本地代码(Native Code),并且可以在本地代码中调用Java代码。 2. 学习JNI的基本语法和规则:JNI使用一组特定的函数和数据类型来实现Java与本地代码之间的交互。你需要学习如何声明本地方法、如何在Java代码中调用本地方法、如何在本地代码中调用Java方法等。 3. 学习JNI的数据类型映射:JNI提供了一套数据类型映射规则,用于将Java数据类型映射到本地代码中的数据类型。你需要学习如何处理基本数据类型、对象类型、数组类型等。 4. 学习JNI的异常处理:在JNI中,Java代码和本地代码之间的异常处理是非常重要的。你需要学习如何在本地代码中抛出异常、如何在Java代码中捕获异常等。 5. 学习JNI的线程处理:JNI允许在本地代码中创建和操作线程。你需要学习如何创建和销毁线程、如何在线程之间进行通信等。 6. 学习JNI的性能优化:JNI涉及到Java代码和本地代码之间的频繁切换,因此性能优化是非常重要的。你需要学习如何减少JNI调用的次数、如何避免不必要的数据拷贝等。 7. 学习JNI的调试和测试:在开发JNI程序时,调试和测试是非常重要的。你需要学习如何使用调试器调试本地代码、如何进行单元测试等。 8. 学习JNI的进阶主题:一旦掌握了基本的JNI知识,你可以进一步学习JNI的进阶主题,如JNIJava虚拟机的交互、JNI与动态链接库的交互、JNI与多线程的交互等。 总结起来,Android JNI学习路线包括了基本概念、基本语法、数据类型映射、异常处理、线程处理、性能优化、调试和测试以及进阶主题等内容。通过系统地学习这些知识,你将能够更好地理解和应用JNI技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值