一、NDK概述
NDK是基于系统原生的C/C++的开发,但是它不是一种主流,而是Android SDK开发的有益补充,因为NDK没有提供界面,也没有提供生命周期管理这一类环境。
1、NDK和JNI的关系
NDK是一系列的工具包,使用这些工具包能够让我们很方便的进行JNI的开发
2、什么是JNI
Java native interface,JNI就是java和C/C++相互调用的接口
JNI的定位在于C和Java的接口,而不是要你专注去做C的开发
JNI起源于JVM虚拟机(java虚拟机的作用屏蔽掉java语言的不同,让java能在不同的操作系统上运行)
3、JNI应用的场合
a、需要与操作系统底层交互的时候,因为操作系统的底层全部都是用C编写的代码,应用层如果需要调用操作系统底层的代码时,就需要用JNI。
b、对于运算速度有要求的时候,我们会把这一部分代码用C实现,再用Java去调用,这样子就可以获取更高的性能。如:音频视频的解码、Android上游戏的核心算法,大部分游戏都会把核心算法用C来实现然后在游戏引擎上层调用这些核心算法
C、已经有现成的C的代码实现的时候,如:openGl、ffmpeg
4、JNI的问题
a、JNI的代码比较复杂,使用不方便
b、容易导致内存的泄露,严重的时候可能导致虚拟机的崩溃(所以JNI开发需要慎重)
c、用JNI开发导致应用程序不能跨平台
d、JNI是由虚拟机来底层实现的,所以没有虚拟机就不能运行JNI
二、JNI第一个实例
用Java调用C的代码,C的代码必须要封装成动态链接库的形式,动态链接库在windows上的后缀名是dll,而在linux上是so
(所有java调用C的代码都用native标识)
1.在java代码用native标示C中需要被调用的方法
2.编译java源文件,形成class文件;
3.用javah -jni处理class文件形成头文件
4.创建C的工程,将生成的头文件拷贝过来
5.根据头文件里的方法声明写方法实现
6.到jdk的include目录下,将jni.h和jni-md.h两个文件拷贝到工程下;
7.编译生成dll或so
8.将生成的dll或so加入到环境变量中
9.在java源代码中通过system.loadlibrary加载dll或so,且dll名称后面 不需要后缀名
10.加载完毕之后,重新启动eclipse
三、深入学习NDK
1、创建HelloJni.java
a、加载库(静态库、动态库)
b、声明原生函数
c、调用该原生函数
2、使用javah-jni命令生成C语言头文件
分享到:
相关推荐
AndroidNDK学习笔记.pdf
Android NDK 学习 JavaString转C++String
安卓视频转换中一些耗时操作可以采用调用C++so库的方式进行,则需要ndk编译了,Android JNI 函数注册。从NDK下载到jni编写,ndk编译,C++文件编写,安卓demo运行
NULL 博文链接:https://iaiai.iteye.com/blog/1175012
android ndk开发笔记 你懂的 介绍了ndk开发的过程
希望这些提示对于想要构建一些实用项目而不是玩具项目来学习NDK的人来说非常有用。因此,目标读者是中型或高级 Android开发人员。本文包含两部分: 第1部分:ndk-build 在这一部分中,我们将讨论如何灵活地使用ndk...
Android NDK 高手开发学习笔记,非常实用,保证物有所值哈~
入门的NDK学习文档,很适合刚学android的同学
Windows下Android NDK环境配置 一、什么是NDK? NDK(Native Development Kit)是一款提供了一系列工具帮助开发者快速开发C(或C++)动态库,并能自动将.so和Java应用一起打包成apk的开发工具。这些工具对开发者的...
Android NDK入门学习类视频大牛视频分享
一个Android NDK开发Demo完整源码,运行生成so文件,下载就可以运行在Android Studio IDE 可以更好的学习NDK JNI开发,有详细注释
基于 Android NDK 的学习之旅-----JNI LOG 打印 eclipse工程文件
Android NDK调用C++实现双进程守卫 本例是从博客http://blog.csdn.net/ztemt_sw2/article/details/27101681中整理出来,分享给大家参考学习。试了一下这种方法,可以实现重启进程,但用不同的机器和不同的软件杀,...
Android NDK开发示例,用于学习Android的本地开发,对于初学者来说是很好的例子!
Android NDK Beginne's Guide,学习NDK开发的好书,非常有用!
利用NDK实现简单加减乘除功能,为作业学习。 简单的native方法结合实现
这个是Android NDK上调用第三方的动态库的实例,而且代码简单容易理解,非常适合新手学习参考,因为网上很多资源是C2C(Copy to Copy)的,有些还不能运行,容易误导新手,并且还要设置积分,我免积分提供给网友下载...
android ndk 开发入门。看代码学习android ndk是怎么回事!希望对大家有用!
学习Android_NDK入门很简单学习Android_NDK入门很简单学习Android_NDK入门很简单学习Android_NDK入门很简单