JNI:全称Java Native Interface。是java平台的一部分
JNI允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机(VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作。类似于.Net
Framework上的p/invoke,可以让C#或Visual Basic.Net可以调用C/C++的API,所以说JNI和Android没有关系,在PC上开发Java的应用,如果运行在Windows平台使用 JNI是是经常的。比如一些算法的实现。
JNI的副作用:
请记住,一旦使用JNI,JAVA程序就缺少了JAVA平台的两个优点:
1、 程序不再跨平台。要想跨平台,必须在不同的系统环境下重新编译本地语言部分。
2、 程序不再是绝对安全的,本地代码的不当使用可能导致整个程序崩溃。
一个通用规则是,你应该让本地方法集中在少数几个类当中。这样就降低了JAVA和C之间的耦合性。
NDK:全称Native Development Kit。是android平台的一部分。
提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。
比较简单的说,NDK是一套交叉编译工具,它可以帮你把你用C或C++书写的代码,编译为.so(类似与win下的.dll)格式的文件,
使你可以在你的Android程序当中用Java语言(JNI)调用这些代码。
什么时候使用NDK:
1、当你想在Java中调用你的C、C++代码时你就可以用它(废话?),那么什么时候你可能考虑使用C、C++代码呢?比如说,你原来用C、C++写过一个游戏程序,里边有你大量的封装好的游戏业务逻辑、算法等代码,你现在想把这个游戏移植到Android上去,怎么办?难道这些业务逻辑、算法要全部用Java重写一遍嘛?现在有了NDK,不用了,你可以直接编译移植这代码了,所以说如果你有代码复用需求的时候,你就可以用它。
2、再举一个例子,比如说你现在用Android手机的摄像头采集图片信息,采集后的图片你使用Java书写了一个压缩算法进行压缩操作,这个算法非常的耗时,耗费CPU,效果很不理想。这时你就可以尝试采用C来书写这个压缩算法,这时你就可能发现,改用C代码执行后,效率提高了几倍乃至十几倍。当你的客户对程序的性能、速度要求比较高的时候,你也可以考虑用C、C++代码编写部分代码,以满足客户要求。
3、使用NDK,我们可以将需要保密的应用逻辑使用C开发。毕竟,Java包都是可以反编译的。
所以说如果没有NDK编译的话,你的这些代码在Android上是跑不起来的。
分享到:
相关推荐
android NDK 自动生成jni头文件 要所java 类自动生成jni调用头文件。
事隔3年,把JNI的规范重新整理了一下。希望能给大家带来帮助
自己在android studio 环境下集成ndk 、 cmake 、LLDB 等插件 开发的一个demo ; 可以直接debug到c端代码,eclipse一般追踪不到,遇到c端出问题手机直接一个crash,,,想要了解android studio 下如何进行c 开发的...
Native C函数调用Java函数,如何活用JNI和 NDK 来让 Native C函数顺利呼叫Java函数
Android studio下配置NDK环境,在Java中调用C的代码,在C中调用Java中的代码
Android Java代码与JNI交互 JNI访问Java类方法 (七)
本书顺应Android软/硬件、云计算整合潮流,详细剖析了NDK开发中涉及的各类问题和解决方案:搭建Android NDK开发环境的每一步细节,开发第一个Android NDK程序,Android NDK中Java与C/C++代码的互相调用,Facade设计...
Android NDK jni使用,包括java调用,脚本编写,和C++代码实现
Android Java代码与JNI交互 JNI访问Java构造方法(九).zip
Android Java代码与JNI交互 (三)
在Android平台下实现java调用c++代码的精短小案例
安卓app开发之NDK入门教程,JAVA代码通过JNI接口调用NDK代码(C语言编写的linux android功能).zip
android-aes-jni, 用于 jni& Java的Android AES示例 android-aes-jni git clone https://github.com/panxw/android-aes-jni.git cd android-aes-jni ndk-build
Android NDK Game Development Cookbook A systematic guide consisting of over 70 recipes which focus on helping you build portable mobile games and aims to enhance your game development skills with ...
在Native C函数中创建Java Object:如何由C 模块來创建Java Object
由更底层的C++ Object來调用Java层的函数:如何让底层的C++ Object能调用Java层的函数
Android JNI中C++层与Java层的对象交互实例代码详细介绍。Android JNI中C++层与Java层的对象交互实例代码详细介绍。Android JNI中C++层与Java层的对象交互实例代码详细介绍。Android JNI中C++层与Java层的对象交互...
JNI 是Java Native Inteface的缩写,是Java中定义的一种用于连接Java和C/C++接口的一种实现方式。 NDK NDK 是 Native Developmentit的缩写,是Google在Android开发中提供的一套用于快速创建native工程的一个工具。 ...
详情请参考我的博客 http://blog.csdn.net/allen315410/article/details/41862479