jni的使用

来源:互联网 发布:学编程用什么软件 编辑:程序博客网 时间:2024/06/17 01:31

一.什么是jni(what)

JNI : Java Native Interface java本地接口,实现让java和本地语言c/c++之间的相互调用。jni是一种协议,提供的一套编程框架。

二.为什么使用jni(why)

1.操作底层硬件,android手机上的传感器
2.程序的运行效率高,2d3d加速,音视频的解码
3.程序的安全性
4.复用本地开源项目,SQLite,OpenSSL,OpenGL,OpenCV,FFmpeg
5.复用公司之前本地项目

三如何使用jni

## jni开发流程 ##* 1.新建模块,native声明本地方法,调用本地方法    //native声明一个本地方法,具体是由c来实现    public native String helloFromC();    public void click(View view){        Toast.makeText(this, helloFromC(), Toast.LENGTH_SHORT).show();    }* 2.在module的build.gradle中defaultConfig 内添加ndk,写法如下.同步报错,点击setXXX 自动添加android.useDeprecatedNdk=true   defaultConfig {        applicationId "com.itheima.jnidemo"        minSdkVersion 15        targetSdkVersion 23        versionCode 1        versionName "1.0"        ndk{            moduleName "hello" //指定最终生成库名,最终生成的库文件名libhello.so        }    }* 3.在调用本地方法的类中加载动态库,指定库名来加载    static {        System.loadLibrary("hello");//指定库名加载动态库    }* 4.模块中new一个jni Folder文件夹,默认在main目录下* 5.在jni文件夹下新建hello.c源文件,hello.h头文件(可选)* 6.在hello.c源文件中按要求实现本地方法相应函数#include "hello.h"  //“”包含的头文件优先在当前目录下查找,如果没找到,再去系统头文件目录找#include <jni.h> //提供java和c的基本类型及引用类型对应,声明数据转换方法/** *  本地方法相应的函数名:Java_包名_类名_本地方法名 * 参数1 JNIEnv *env jni环境,调用转换数据方法 * 参数2 jobject obj 调用本地方法类的对象*/jstring Java_com_itheima_jnidemo_MainActivity_helloFromC(JNIEnv *env, jobject obj){    char buf[] = "hello from c!";    //env : JNIEnv * <=> struct JNINativeInterface* *    //JNIEnv : struct JNINativeInterface*    //jstring     (*NewStringUTF)(JNIEnv*, const char*);    return (*env)->NewStringUTF(env, buf);}* 7.gradle同步,make module* 8.运行应用程序## javah生成本地方法相应函数声明 ##* 在main/java文件夹和com的同层目录中执行D:\jni02\code\JniDemo\calc\src\main\java>javah -classpath . -d ../jni com.itheima.calc.MainActivity

源码下载


0 0
原创粉丝点击