Android NDK开发学习

来源:互联网 发布:淘宝女装上新文案 编辑:程序博客网 时间:2024/04/29 14:32

1.JNI简介:JNI全称为Java Native Interface(JAVA本地调用)。从Java1.1开始,JNI成为java平台的一部分,它允许Java代码和其他语言写的代码(如C&C++)进行交互。并非从Android发布才引入JNI的概念的。而Android NDK开发就是用到这个技术了,从而支持C/C++来开发Android app。

 

2.NDK简介:简单来说,Android的NDK提供了一些交叉编译工具链和Android自带的库,这些Android的库可以让开发者在编写本地语言的程序时调用。而NDK提供的交叉编译工具链就对已经编写好的C&C++代码进行编译,生成库。当然了,你也可以自己搭建交叉编译环境,而不用NDK的工具和库。然后生成库,只要规范操作,一样可以生成能让JAVA层成功调用的库文件的。

 

3.众所周知,Android的应用层的类都是以Java写的,这些Java类编译为Dex文件之后,必须靠Dalvik虚拟机( Virtual Machine)来执行。假如在执行java程序时,需要载入C&C++函数时,Dalvik虚拟机就会去加载C&C++的库,(System.loadLibrary("libName");)让java层能顺利地调用这些本地函数。需要清楚一点,这些C&C++的函数并不是在Dalvik虚拟机中运行的,所以效率和速度要比在Dalvik虚拟机中运行得快很多。

 

4.Android NDK与Android SDK:

简单来说,Android NDK是Android SDK的一种补充,NDK全称为native development kit本地语言(C&C++)开发包。而对应的是经常接触的Android-SDK(software development kit)软件开发包(只支持java语言开发)。简单来说利用NDK,可以开发纯C&C++的代码,然后编译成库,让利用Android-SDK开发的Java程序调用。NDK开发的可以称之为底层开发或者JNI层开发,SDK开发可以称为上层开发。


5.为何会出现Android NDK

       a)利用SDK编写的代码,生成的APK,很容易就可以反编译了,安全性极为不高,而利用NDK开发的库,不容易被反编译,保密性,安全性都提高了。

       b)很多开源工程和大型工程都是C&C++代码,把它们转换为纯java语言显然是不可能的。
       c)C&C++的代码运行速度和效率都比java快很多。

 

学习文稿来源url:http://m.blog.csdn.net/blog/han_jiang_xue/9186843