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

更多相关文章

  1. Android(安卓)js交互 与 Html启动App
  2. Android开发菜单布局之表格布局示例
  3. Android代码混淆配置(Proguard文件解析)
  4. android之wifi开发(一)
  5. Android代码里或者XML设置android:clickable="false"无效。点击
  6. 使用android快速开发框架afinal的FinalDb操作android sqlite数据
  7. Android高手进阶教程(八)之----Android(安卓)Widget开发案例(世
  8. VisionMobile:生态环境的游戏:破坏Android的盛会
  9. Android(安卓)开发论坛

随机推荐

  1. android获取解析GPS数据
  2. Android自定义view二Banner
  3. [Android] Android(安卓)Sutdio on Surfa
  4. android Volley 使用
  5. Android获取手机信息
  6. Android资源
  7. android均衡器
  8. android使用wifi实例
  9. android 4.03在ubuntu12 上编译
  10. Android遍历获取正在运行的服务(ActivityM