JNI深度探索:Android开发中的C/C++交互指南

需积分: 3 2 下载量 128 浏览量 更新于2024-06-19 收藏 573KB PDF 举报
"Android开发书籍 - JNI详解-导航版" JNI(Java Native Interface)是Java平台中用于实现Java代码与本地(C/C++)代码交互的一组接口和规范。由SUN公司定义,如今已被Oracle公司继承,并在各种Java虚拟机如Dalvik(Android系统早期的虚拟机)和OpenJDK等中实现。JNI使得开发者可以在Java应用中利用C/C++的性能优势,处理一些Java不擅长或者效率低下的任务,同时也可以在C/C++项目中嵌入JavaVM来利用Java丰富的库和工具。 本书主要涵盖以下几个核心知识点: 1. **JNI在项目中的应用**: - **集成C/C++库**:通过JNI,Java应用可以调用已有的C/C++库,使开发者能够利用现有的本地代码资源,例如使用高性能的数学计算库、图形处理库等。 - **嵌入JavaVM于C/C++项目**:在C/C++程序中启动和控制Java虚拟机,使得非Java环境的应用也能调用Java代码,充分利用Java的高级特性。 2. **实现JavaVM**: - JNI不仅提供了调用接口,还涉及到JavaVM(Virtual Machine)的实现细节,读者将了解如何在C/C++环境中创建和管理JavaVM实例。 3. **语言互操作性**: - **垃圾回收和并发编程**:JNI编程中需要考虑Java的自动内存管理(垃圾回收)以及在多线程环境下的正确同步,避免出现内存泄漏或竞态条件。 - **数据类型转换**:学习如何在Java对象和C/C++的数据结构之间进行转换,理解和处理不同类型之间的兼容性和转换规则。 4. **JNI设计原理**: - 本书深入讲解JNI的设计思想,帮助开发者理解其内在工作机制,这不仅对学术研究有价值,也有助于提高实际开发中的效率和可靠性。 5. **实践指导**: - 书中包含丰富的示例和实战指导,帮助读者快速上手JNI开发,了解如何编写本地方法,如何调用Java方法,以及如何处理异常和线程同步等问题。 6. **性能优化**: - 通过详细的叙述,书中给出很多关于如何高效使用JNI的技巧和最佳实践,帮助开发者避免常见陷阱,提升应用性能。 7. **社区经验分享**: - 作者分享了Sun工程师和Java社区在使用JNI过程中积累的经验,这些都是实践中的宝贵财富。 这本书是Android开发者,尤其是需要进行本地化调用或性能优化的开发者,深入理解并掌握JNI技术的重要参考资料。通过学习,开发者不仅可以熟练运用JNI,还能对Java与C/C++的结合有更深入的理解,从而在项目中发挥更大的效能。
2018-04-06 上传
Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 Chap 3:javah命令帮助信息... 16 Chap 4:用javah产生一个.h文件... 17 Chap5:jni教程(very very good) 19 Chap6: JNI传递返回值... 26 15.2.2.3 传递字符串... 28 15.2.2.4 传递整型数组... 29 15.2.2.5 传递字符串数组... 30 15.2.2.6 传递对象数组... 31 Chap7:Jni中C++和Java的参数传递... 33 Chap8:如何将java传递过来的jbyteArray转换成C/C++中的BYTE数组... 47 Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载)... 55 1、实例一:在jni中调用标准c中自带的函数printf(): 57 2、实例二、调用c 语言用户定义的函数... 58 3、实例三、在jni函数中访问java类中的对象实例域... 58 4、实例四:在jni函数中访问类的静态实例域... 60 5、实例五:在jni函数中调用java对象的方法... 60 6、实例六:在jni函数中调用java类的静态方法... 61 7、实例七:jni函数中传递基本数据类型参数... 62 8、实例八:在jni函数中传递对象类型参数... 62 9、实例九:在jni函数中处理字符串... 63 10、实例十:在jni函数中处理数组... 64 11、实例十一:在jni中的返回值问题... 65 12、实例十二:在jni中创建java类对象:... 66 Chap10:在 Windows 中实现 Java 本地方法... 66 1.Java 调用 C. 67 2.调试... 76 3.其他信息... 79 Chap11:如何在C/C++中调用Java. 80 1.环境搭建... 81 2.初始化虚拟机... 83 3.访问类方法... 85 4访问类属性... 87 5.访问构造函数... 88 6.数组处理... 89 7.中文处理... 89 8.异常... 91 9.线程和同步访问... 91 10.时间... 92 Chap12:基本JNI调用技术(c/c++与java互调) 93 Chap13:JNI的c代码中,另外一个线程获取 JNIEnv. 96 chap 14:当JNI遇到多线程--java对象如何被C++中的多个线程访问?. 97 chap 15:JNI在多线程中的应用... 101 chap 16:JNI限制(多线程)... 105 chap 17:使用 Java Native Interface 的最佳实践... 106 1.性能缺陷... 107 2.正确性缺陷... 117 3.避免常见缺陷... 121 4.结束语... 128 Chap18:JNI设计实践之路... 129 一、 前言... 129 二、 JNI基础知识简介... 130 三、 Java程序调用非Java程序... 131 四、 C/C++访问Java成员变量和成员方法... 138 五、 异常处理... 140 六、 MFC程序中嵌入Java虚拟机... 142 Chap19:JNI编程系列之基础篇... 148 System.loadLibrary("HelloWorld"); 149 JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *, jobject); 150 Chap20:JNI编程系列之中级篇(上)... 151 1. Java基本类型的传递... 151 2. String参数的传递... 151 3. 数组类型的传递... 153 4. 二维数组和String数组... 154 Chap21:JNI编程系列之高级篇... 155 1. 在一般的Java类中定义native方法... 156 2. 访问Java类的域和方法... 156 3. 在native方法中使用用户定义的类... 157 4. 异常处理... 158