JNI的初步介绍
来源:互联网 发布:淘宝网皮大衣 编辑:程序博客网 时间:2024/04/29 06:54
什么是jni
jni的全称是:java native interface, java本地接口
其实我们也可以将 JNI理解为一个协议 ,这个协议用来沟通java代码和外部的本地代码(c/c++)的,通过这个协议,java代码就可以调用外部的c/c++代码, 外部的c/c++代码也可以调用java代码,他就相当于是一个桥梁。
jni的开发流程
1、在java代码中声明一个native本地方法public native String test();
2、在项目目录里边创建一个jni文件夹
3、在jni文件夹里面创建c文件,然后 按照规范写代码,这个规范可以参考ndk目录下的jni.h
比如上边我们需要返回一个字符串,则规范代码为:
#include *jni.h //规范文件
代码解释:
Java_com_deeny_jniDemo_MainActivity_test:大写Jave开头,下划线,完整的包名,下划线,方法名
env:jni接口的指针的指针
jobject:谁调用的这个方法,就是谁,比如当前是MainActivity调用的,那么当前的obj就是MainActivity的对象
jstring Java_com_deeny_jniDemo_MainActivity_test(JNIEnv* env,jobject obj){ char* str=“test!!!”; //*env 是JNIEnv这个指针,需要拿到他里边的一个结构体对象,所以需要将其前边再加上一个*,具体可以参考jni.h return (*(*env)).NewStringUTF(env,str);}
4、ndk-builder 指令编译
编译前需要配置Android.mk文件
//制定编译的文件夹,指定当前目录 LOCAL_PATH := $(call my-dir) //编译器在编译的时候会生成很多临时变量,中间变量,最好是便宜之前先清空所有的临时变量 include $(CLEAR_VARS) //编译完成的模块名 LOCAL_MODULE := test //编译的源文件 LOCAL_SRC_FILES := test.c //编译一个动态库 //动态库:文件名.so 只包含运行的函数,不包含依赖,体积小,运行的时候会去系统寻找依赖 //静态库:文件名.a 包含所有的函数和函数运行的依赖,体积大,包含所有的api include $(BUILD_SHARED_LIBRARY)
5、生成一个so动态库 放到libs里边
6、引入依赖库,通过静态代码块的形式引入
7、调用本地方法,和java调用普通方法一致
使用jni的优缺点
优点:提高了程序的性能,能够使java和其他语言进行交互
缺点:破坏了java的可移植性,也给java的安全带来了隐患
1 0
- JNI的初步介绍
- JNI 的初步了解
- JNI的初步探索
- JNI的初步使用(一)
- JNI初步
- JNI初步
- JNI初步
- JNI初步
- JNI初步
- scilab 的初步介绍
- scilab 的初步介绍
- Weka的初步介绍
- Button的初步介绍
- Scilab的初步介绍
- Fresco的初步介绍
- JNI的基本介绍
- JNI 的相关介绍
- eclipse下JNI的初步实现
- android studio开发(android res和asset等特殊文件夹 )
- KeepAlived高可用Nginx
- 一行shell命令实现代码行数统计
- 数据转换
- DataTable作为数据源导出Excel
- JNI的初步介绍
- Windows下宽窄字节
- 学习笔记-包管理机制
- js 函数传值过长 防止字符串被数字化
- jquery给标签绑定事件
- lua 时间函数os.time()和os.date()
- LoadRunner脚本函数(二)
- HDOJ题目分类
- 日期、时间选择器