NDK是Native Developement Kit的缩写,顾名思义,NDK是Google提供的一套原生Java代码与本地C/C++代码“交互”的开发工具集。而Android是运行在Dalvik虚拟机之上,支持通过JNI的方式调用本地C/C++动态链接库。C/C++有着较高的性能和移植性,通过这种调用机制就可以实现多平台开发、多语言混编的Android应用了。当然,这些都是基于JNI实现的。在游戏开发中,这种需求更是必不可少。
作者:AlphaGL。版权所有,欢迎保留原文链接进行转载 :)
1、认识JNI
JNI是Java Native Interface的缩写,也称为Java本地接口。是JVM规范中的一部分,因此,我们可以将任何实现了JVM规范的JNI程序在Java虚拟机中运行。这里的本地接口,主要指的是C/C++所现实的接口。因此,也使得我们可以通过这种方式重用C/C++开发的代码或模块。
具体关于JNI的详细介绍,可以参见JNI的官方文档。
Java Native Interface Specification:
http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html
2、JNI的类型和数据结构
实现原生Java代码与本地C/C++代码,一个重要的环节是将原生Java的类型和数据结构映射成本地C/C++支持的相应的类型和数据结构。
(1)Java基本数据类型与原生C/C++类型对应关系如下:(由于博客编辑器对markdown表格语法支持不友好,所以统一替换为图片了)
(2)Java引用数据类型与原生C/C++类型对应关系如下:(由于博客编辑器对markdown表格语法支持不友好,所以统一替换为图片了)