手把手将你如何使用JNI分析其背后原理

        先说几句废话,最近开始研究android框架了。一步步照着老罗的博客http://blog.csdn.net/luoshengyang进行。其中涉及到android框架层调用底层的c/c++代码。由于这种跨语言的操作的需要,那么随之而来就有了JNI的产生。

       什么是JNI及其用途

          JNI的英文名称叫做(java native interface)叫做java本地接口。专门进行跨语言操作使用。那么我们什么情况下就会有跨语言操作的需要呢?一方面:C/C++在性能上要比java效率高,因此对一些性能要求高的代码模块,我们就可以使用JNI;其次:假如说需要增加某项功能,Java中没有,恰巧C/C++中是有的。那么方便起见,我们就可以使用JNI了。

      运行机制

        我们要使用JNI方式的话,只需要经过六个步骤就ok了。先来张图,让我们了解个大概。

                          

      了解完大概的运行机制,我们来详细的进行说明并用代码加以实现,最后打印出”native“字样。

      步骤一:首先,我们需要编写含有native方法的java文件。

      在E:/Java/下面建立一个名叫Native.java 的类;

   

public class Native {

    static{
        System.loadLibrary("native.dll");
    }

        public native void show();

    public static void main(String[] args) {
        new Native().show();
    }
}

       这样就完成了我们的第一个步骤,接下来我们进行第二个步骤

   步骤二:

   这一步是将上述的java文件编译成class文件。我们在命令行中进行实现。打开cmd。切换到E:/Java 目录下,然后进行编译。

  简单介绍下,javac命令是java compile的缩写。compile是编译的意思。

 

编译完成之后的话,我们会再E:/Java 目录下看到一个Native.class 文件。这就是我们编译后的class文件。

   步骤三:获取java源码生成对应的c语言头文件。使用到的命令是我们的javah  。可以理解成是java head 的简写。在这一步容易出现一个问题。使用javah 命令之后很可能出现如下图所示情况:


出现这种情况的时候一定要淡定,你要知道其原因是我们的java环境变量配置有问题。 别不相信,可以对照这儿标准java环境变量配置进行比对。你会发现自己的配置肯定存在某些问题。好了,解决我们的环境变量配置的问题之后。使用命令 javah Native 或者 javah -classpath .  Native  进行获取,操作之后,我们会看到在E:\Java文件夹下面生成一个Native.h 文件。

  步骤四:编写对应的C语言实现代码;

  首先,我们得下载vc6++ http://pan.baidu.com/share/link?shareid=271506&uk=3626331472 。下载、安装完成之后呢,我们就可以使用了。

  接着,打开vc6++,新建如下图所示的工程区。工程名叫native

 

  接着下一步:选择一个简单的DLL工程

 接着切换左下角所示

然后的话

打开项目所在的文件目录,将步骤三中生成的Native.h文件复制到此目录。在Header Files上点击右键,选择Add Files to Folder…。选择Native.h文件,点击OK。

接着,打开StdAfx.h文件,再最后面添加:

#include <jni.h>

#include "Native.h"

接着打开Source Files文件夹下面的Native.cpp  文件 修改#include stdafx.h 为#include  StdAfx.h。而后,打开Native.h 文件。复制选中为黑色的部分到Native.cpp 文件的最后面

并且加以修改


 接着,我们之前看到在Native.h 中有jni.h 文件的引入。那么这个文件在什么地方呢。这个文件在我们的JDK安装目录下面。


我们通过菜单栏的工具、选项、目录将include 和win32文件夹引入进来。

 之后的话,点击组件菜单里面的组件子菜单。之后的进入工程所在文件夹下面打开Debug文件夹,会发现,其中有一个Native.dll文件。

   或者使用命令cl -LD jni_Native.cpp -Fe Native.dll,以上命令的参数中,-LD表示产生dll-Fe后面表示产生dll的名字,具体的参数可以自己用cl -help命令查看,

  步骤五:我们将其拷贝到编译好的class文件目录下面。

  步骤六:使用java  Native  命令执行,我们就会看到神奇的一幕出现了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值