Hi,欢迎来到中国优发娱乐手机版高端品牌 - 华清远见嵌入式学院<北京总部官网>,专注嵌入式工程师培养13年!
  • 全国咨询热线:400-611-6270
  • 新浪微博
  • 微信
  • 北京
    校区
  • 上海
    校区
  • 深圳
    校区
  • 成都
    校区
  • 南京
    校区
  • 武汉
    校区
  • 西安
    校区
  • 广州
    校区
  • 沈阳
    校区
  • 济南
    校区
  • 重庆
    校区
  • 长沙
    校区
  • 研发
    中心
  • 当前位置: > 嵌入式学院 > 嵌入式学习 > 讲师博文 > JNI开发原理及实例
    JNI开发原理及实例
    时间:2017-08-29作者:华清远见
    JNI(Java Native Interface)是指Java平台和本地C代码进行相互操作的API接口,称为Java本地代码接口。当Java程序需要访问系统的各个特性和设备时,或者一些要求效率和速度的场合时,此时应该采用JNI调用本地C或C++代码,来完成。如下图所示: 图一  JNI模型图 关于JNI函数的注册可以分为静态注册和动态注册。本文主要讲解静态注册之Java调用C语言,具体步骤如图二所示: 1)在java类中使用native声明一个本地方法,使用javac命令编译java类 2)运行javah获得头文件,包括这个本地方法的声明格式 3)用C实现本地方法 4)生成.so文件,并将其放入到共享类库中 5)在java文件中加载该类库,调用本地方法。 图二  JNI开发步骤图 具体实例演示如下所示: (一) 首先创建MyJNI.java类,在本类中使用native生命一个方法cSayHello(),代码如下所示: package com.farsight.demo; public class MyJNI { public static native void cSayHello(); } 在Linux环境下,进入到java类所在目录,例如MyJNI.java存储在Desktop目录里,执行命令如下: 编译MyJNI.java文件,执行之后在Desktop目录里可以看到文件夹com/farsight/demo里的MyJNI.class文件。执行命令如下: (二) 执行javah命令,生成.h文件。执行命令如下: 执行之后,可以看到在Desktop目录下新生成的com_farsight_demo_MyJNI.h文件,该文件中自动生成,无需修改。代码中JNIEXPORT后面就是我们在C语言里需要实现的方法。代码如下所示: /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_farsight_demo_MyJNI */   #ifndef _Included_com_farsight_demo_MyJNI #define _Included_com_farsight_demo_MyJNI #ifdef __cplusplus extern "C" { #endif /*  * Class:     com_farsight_demo_MyJNI  * Method:    cSayHello  * Signature: ()V  */ JNIEXPORT void JNICALL Java_com_farsight_demo_MyJNI_cSayHello   (JNIEnv *, jclass);   #ifdef __cplusplus } #endif #endif   (三) 用C实现本地方法,在方法中输出一句话。MyJNI.c代码如下: #include "com_farsight_demo_MyJNI.h" #include <jni.h> #include <stdio.h>   J NIEXPORT void JNICALL Java_com_farsight_demo_MyJNI_cSayHello(JNIEnv * env ,jclass cl) { printf("hello in c called by java"); } (四) 生成.so文件,并将其放入到共享类库中。执行之后可以看到新生成的libMyJNI.so文件。执行代码如下: (五) 在java测试文件中加载该类库,调用本地方法。MyJNITest.java代码如下: import com.farsight.demo.MyJNI; public class MyJNITest { public static void main(String args[]) { MyJNI.cSayHello(); }   static { System.loadLibrary("MyJNI"); } } 编译并运行MyJNITest.java文件,执行之后可以看到在MyJNI.c文件中输出的一句话。执行代码如下所示:

    发表评论
    全国咨询电话:400-611-6270,双休日及节假日请致电值班手机:15010390966 在线咨询: 曹老师QQ(3337544669), 徐老师QQ(1462495461), 刘老师 QQ(3108687497) 企业培训洽谈专线:010-82600901,院校合作洽谈专线:010-82600350,在线咨询:QQ(248856300) Copyright 2004-2017 华清远见教育集团 版权所有 ,京ICP备16055225号,京公海网安备110108001117号

    优发娱乐手机版

    百度360搜索搜狗搜索

    优发娱乐手机版

    百度360搜索搜狗搜索