ndk开发 jni基础知识准备

来源:互联网 发布:java 虚函数 编辑:程序博客网 时间:2024/05/21 23:15

JNI
java native interface
java 连接windows或者linux系统的功能的连接器的作用
jni为了java而生的


Host environment 操作系统环境,有自己的本地库和cpu指令集
全部都是由本地程序c++和c编译的,编译成本低可识别的二
进制代码。因此本地程序和本地库通常依赖于操作系统环境


jni其实是java虚拟机的一个部分,使得java可以访问本地库
和接口,使得java和本地库和本地接口可以双向交互
通俗的讲,就是java事件和c语言c++沟通的桥梁


jni使用环境:
java api不能满足我们程序需要的时候

性能:某些算法计算和某些图像渲染对语言效率非常高,

此时需要jni交给c处理

需要访问一些已经有的本地库时:例如,第三方软件打包成so
文件供调用


什么是ndk:
一系列的工具集合,帮助开发者快速开发c或者cpp动态库的工具
打包工具
.so文件是使用C语言或c++开发的工具库
将c的包和java文件一起打包,就是ndk


流程:
用通用接口和C进行连接,再生成.so。用ndk进行打包




怎样开发jni:
步骤:
编写native方法
用javah命令生成.h文件
  或者自己手写
  
3.复制.h 头文件到cpp 工程
4.复制jni.h 和jni_md.h
5.实现.h 头文件中的声明函数
6.生成一个dll 动态库
7.在java中加载动态库
8.触发native函数




静态库和动态库:
都是函数库
函数库:
将这些够用的函数,构成的一个库
静态库:

在编译时连接到目标代码中,运行时不需要调用 .a,.lib,.h

例如:

stdio.h


动态库1:不会自动链接到目标代码中去,是独立的
运行时动态加载在程序运行时加载进去的,
独立存在的的,因此运行时需要.dll文件存在 .dll,.so
例如:static{
System.loadLibrary("JNI_DEMO")
}


原创粉丝点击