您的位置:首页 > 其它

JNI基本概念

2015-11-21 23:13 246 查看

一、简介

java是跨平台,C与平台有关,但是C与底层交互性能好

Java Native Interface:Java本地接口,实现java和本地语言c/C++相互调用



二、为什么需要jni

C/C++作为本地语言,效率有保证,所以应用场景有如下方面:

1. 操作底层硬件,android设备上的传感器,距离传感器

2. 应用程序要求效率高,图形渲染,音视频解码

3. 应用程序要求比较高,金融相关,军工产品 ,关键逻辑用C/C++;

4. 复用C/C++开源软件

5. 利用公司之前代码

三、使用JNI的四个前提

熟练使用java

了解C基础语法

熟悉JNI规范

掌握开发工具NDK

四、jni.h文件内容

typedef struct JNINativeInterface* JNIEnv;

struct JNINativeInterface {
...
jclass      (*FindClass)(JNIEnv*, const char*);

...

JNIEnv *env;
// env <=> JNIEnv * <=> struct JNINativeInterface**

// (**env).FindClass();

// (*env)->FindClass();


五、jni相关概念

交叉编译

在一个平台上为另一个平台编译程序。不同的操作系统windows Mac OS X Linux;不同处理器架构 x86 ARM Mips

工具链

编译本地代码过程依次使用工具,顺序使用形成链条arm-linux-gcc

函数库

实现某类功能函数二进制代码集合.使用库需要两个文件 .h头文件 还有库文件(.a .so), stdio string

静态链接库 .a 只用在链接过程拷贝库中代码,运行程序不需要静态库支持

动态链接库 (共享库) .so 用在链接过程记录用到什么库的什么函数,运行程序之前需加载动态库到内存。

六、 jni开发使用的工具

NDK : Native Development kit 本地开发工具集 构建和编译本地c/c++代码一套工具

CDT : C/C++ Development Tools 编辑本地源文件,语法检查,编译工具调用

CygWin : windows下提供类unix模拟环境
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jni