接触Android应用开发也有一两年了,之前一直没用Android NDK进行开发,都是基于Android SDK,兴冲冲地搭建好环境(教程我的博客也有),成功运行了NDK中示例代码之后,突然觉得有点懵,完全不知道其中的原理,于是理了理思路,决定先弄清楚什么是Android NDK?什么是JNI?
首先,在维基百科的Android词条中,介绍了“开发者亦可以通过在Android NDK(Android Native开发包)中使用C语言或者C++语言来作为编程语言开发应用程序”,跟通过在Android SDK中使用Java语言来开发应用程序是一个道理。在NDK词条中介绍了:原生开发工具包(英语:native development kit,简称NDK)是一种基于原生程序接口的软件开发工具。
JNI是什么呢?Java本地接口 (JNI)是一个编程框架,使得运行在Java虚拟机上的Java程序调用或者被调用特定于本机硬件与操作系统的用其它语言(C、C++或汇编语言等)编写的程序。JNI由Oracle开发,适用于所有Java虚拟机
这样就明确了Android NDK是基于JNI的一套开发Android应用的工具。Just Like the SDK!
参考的文档:
维基百科的Android词条:http://zh.wikipedia.org/wiki/Android#.E7.A8.8B.E5.BA.8F.E9.96.8B.E7.99.BC
维基百科的NDK词条:http://zh.wikipedia.org/wiki/%E5%8E%9F%E7%94%9F%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7%E5%8C%85
维基百科的JNI词条:http://zh.wikipedia.org/wiki/Java%E6%9C%AC%E5%9C%B0%E6%8E%A5%E5%8F%A3
较详细的介绍JNI:http://blog.csdn.net/skywalker256/article/details/4677644
ORACLE官方JNI文档:http://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/intro.html
Introduction to Android NDK:http://elekslabs.com/2013/12/introduction-into-android-ndk.html
上面文档的中文翻译:http://www.importnew.com/8038.html