- 10
- 0
- 约2.27万字
- 约 16页
- 2016-12-06 发布于重庆
- 举报
JNI基礎知识
JNI基础知识NI是在学习Android HAL时必须要面临一个知识点,如果你不了解它的机制,不了解它的使用方式,你会被本地代码绕的晕头转向,JNI作为一个中间语言的翻译官在运行Java代码的Android中有着重要的意义,这儿的内容比较多,也是最基本的,如果想彻底了解JNI的机制,请查看:JNI概念JNI是本地语言编程接口。它允许运行在JVM中的Java代码和用C、C++或汇编写的本地代码相互操作。在以下几种情况下需要使用到JNI:l 应用程序依赖于特定平台,平**立的Java类库代码不能满足需要l 你已经有一个其它语言写的一个库,并且这个库需要通过JNI来访问Java代码l 需要执行速度要求的代码实现功能,比如低级的汇编代码通过JNI编程,你可以使用本地方法来:l 创建、访问、更新Java对象l 调用Java方法l 捕获及抛出异常l 加载并获得类信息l 执行运行时类型检查 JNI的原理JVM将JNI接口指针传递给本地方法,本地方法只能在当前线程中访问该接口指针,不能将接口指针传递给其它线程使用。在VM中 JNI接口指针指向的区域用来分配和存储线程本地数据。当Java代码调用本地方法时,VM将JNI接口指针作为参数传递给本地方法,当同一个Java线程调用本地方法时VM保证传递给本地方法的参数是相同的。不过,不同的Java线程调用本地方法时,本地方法接收到的JNI接口指针是不同的。加载和链接本地方法在Java里通过System.loadLibrary()来加载动态库,但是,动态库只能被加载一次,因此,通常动态库的加载放在静态初始化语句块中。[cpp] view plain copy 1.package pkg;2.class Cls {3. native double f(int i, String s); // 声明为本地方法 4. static {5. System.loadLibrary(“pkg_Cls”); // 通过静态初始化语句块来加载动态库 6. }7.} 通常在动态库中声明大量的函数,这些函数被Java调用,这些本地函数由VM维护在一张函数指针数组中,在本地方法里通过调用JNI方法RegisterNatives()来注册本地方法和Java方法的映射关系。 本地方法可以由C或C++来实现,C语言版本:jdouble native_fun (1. JNIEnv *env, /* interface pointer */2. jobject obj, /* this pointer */3. jint i, /* argument #1 */4. jstring s) /* argument #2 */5.{6. /* Obtain a C-copy of the Java string */7. const char *str = (*env)-GetStringUTFChars(env, s, 0);8. 9. /* process the string */10. ...11. 12. /* Now we are done with str */13. (*env)-ReleaseStringUTFChars(env, s, str);14. return ...15.} C++语言版本:1.extern C /* specify the C calling convention */2.jdouble native_fun (3. JNIEnv *env, /* interface pointer */4. jobject obj, /* this pointer */5. jint i, /* argument #1 */6. jstring s) /* argument #2 */7.{8. const char *str = env-GetStringUTFChars(s, 0);9. ...10. env-ReleaseStringUTFChars(s, str);11. return ...12.}由上面两段代码对比可知,本地代码使用C++来实现更简洁。两段本地代码第一个参数都是JNIEnv*env,它代表了VM里的环境,本地代码可以通过这个env指针对Java代码进行操作,例如:创建Java类对象,调用Java对象方法,获取Java对象属性等。jobject obj相当于Java中的Object类型,它代表调用这个本地方法的对象,例如:如果有new
您可能关注的文档
最近下载
- 专题09 圆中的最值模型之阿氏圆模型(解析版).docx VIP
- 云南回忆中阮分谱 简谱 高清打印版.pdf VIP
- 中国肠梗阻诊治专家共识(2025年版).docx VIP
- 2025年金融风险管理师对冲策略的情景模拟与回测分析专题试卷及解析.pdf VIP
- 2025年无人机驾驶员执照无人机飞行中的力与力矩平衡专题试卷及解析.pdf VIP
- 2025年特许金融分析师资本市场线与跨境资本流动专题试卷及解析.pdf VIP
- 2025年演出经纪人艺人市场价值评估与商业定位专题试卷及解析.pdf VIP
- 2025年项目管理专业项目资源获取与资源分配专题试卷及解析.pdf VIP
- 山西省农村信用社(农村商业银行合作银行)个人网上银行.pdf VIP
- 常用3500汉字频率表.xls VIP
原创力文档

文档评论(0)