`
jjchen_lian
  • 浏览: 86143 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JNI入门一

    博客分类:
  • java
 
阅读更多

JNI是什么,这里就不在都说了。使用JNI的好处就是可以在java中调用本地代码C/C++,可以方便java与其他语言进行调用,加快java的效率。坏处就是使用了JNI就不能跨平台了。

这里直接进入JNI。

java代码


package zsc.edu.lian;

public class Mainclass {
	
	static{
		System.loadLibrary("Test");
	}
	public native void printHello();
	
	public native static void main(String[] args) ;
}




 javah zsc.ed.lian.Mainclass一下,这时生成.h头文件。

然后启动vs2010,建立一个win32空项目,把.h文件,还有jdk中的include目录下的jni.h和jni_md.h复制到工程目录下。

把生产的.h文件中#include<jni.h>改成#include"jn.h"

然后开始写我们的cpp文件

下面是我的cpp.cpp文件的实现:


#include "zsc_edu_lian_Mainclass.h"
#include <iostream>
using namespace std;

JNIEXPORT void JNICALL Java_zsc_edu_lian_Mainclass_printHello(JNIEnv *env, jobject object)
{
	cout << "hello world" <<endl;
}

JNIEXPORT void JNICALL Java_zsc_edu_lian_Mainclass_main(JNIEnv *env, jclass clazz, jobjectArray objctaarray)
{	
	jmethodID mid = env->GetMethodID(clazz,"<init>","()V");//第二个参数
        方法名,第三个参数是方法的参数和返回值,这个可以使用javap -s classname
        进行查看。
        jobject me = env->NewObject(clazz,mid,NULL);
	mid = env->GetMethodID(clazz,"printHello","()V");
	env->CallVoidMethod(me,mid,NULL);
}


javap -s Mainclass
Compiled from "Mainclass.java"
public class zsc.edu.lian.Mainclass {
  static {};
    Signature: ()V

  public zsc.edu.lian.Mainclass();
    Signature: ()V

  public native void printHello();
    Signature: ()V

  public static native void main(java.lang.String[]);
    Signature: ([Ljava/lang/String;)V
}
 

 这里的JNIEnv *env可以想象成是JNI的一个运行的上下文环境,这里面定义了许多可以访问方法函数的方法,而jclass clazz虽然是一个类型,但是我把它理解成类似java中的Class,表示字节码,那么我们就可以通过调用env->GetMethodID(clazz,"<init>","()V");可以得到构造函数,这里有点类似java中的反射,我给了你一份字节
码信息,那么我就可以通过对字节码信息进行查询中的<init>信息,接着就可以调用该方法,这是比较形象化的理解。
下面的方法就应该比较好理解的吧,
jobject me = env->NewObject(clazz,mid,NULL);知道了clazz和方法的jmethodID,那么就可以创建出对象出来
了。

然后低该cpp.cpp 进行编译,然后在工程的DEBUG目录下就会有.dll文件,把这个文件的路径添加到系统环境变量中,
例如C:\Users\Administrator\Documents\Visual Studio 2010\Projects\Test\Debug
接着就重启ecplise,就可以运行了!

分享到:
评论

相关推荐

    JNI入门Demo3.0

    本教程“JNI入门Demo3.0”主要针对的是JNI的动态注册Native函数这一核心概念。 首先,我们需要理解什么是JNI。JNI是一种接口,让Java应用程序能够调用本地(非Java)代码,同时也允许本地代码调用Java方法。在早期...

    JNI入门知识介绍

    JNI(Java native interface)入门知识

    JNI入门之HelloWorld(一)

    ### JNI入门之HelloWorld(一)详解 #### 一、引言 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码与其他语言写的代码进行交互。JNI接口提供了若干公共服务,并为Java虚拟机和本机应用程序或...

    JNI入门教程之HelloWorld篇(详细版).doc

    ### JNI入门教程详解:HelloWorld篇 #### 一、引言与背景 Java Native Interface (JNI) 是Java语言与本地代码交互的桥梁,允许Java应用调用C或C++等本地语言编写的代码,这对于扩展Java功能、提高性能或集成已有非...

    Android Studio JNI开发入门教程

    Android Studio的JNI(Java Native Interface)开发入门教程 JNI,全称为Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在Android开发中扮演着重要角色,尤其当...

    Android JNI入门Demo

    这个"Android JNI入门Demo"是一个适合初学者了解和学习JNI基础操作的实践项目。 在Android开发中,JNI的应用场景广泛,例如:提升性能的关键算法实现、调用系统库、访问硬件设备、游戏开发中的图形渲染等。下面将...

    JNI 入门初级教程

    ### JNI入门初级教程知识点概述 本教程旨在为初学者提供JNI(Java Native Interface)的基础知识与实践指导。JNI是Java平台的一部分,它允许Java代码与其他语言编写的代码进行交互,尤其是C和C++。这对于利用现有C...

    JNI入门demo

    Java Native Interface的入门级学习demo,完美的解决了java.library.path中找不到动态库的问题,并解决了windows和linxu的兼容问题,使得这个项目打包成jar包后,能够直接在windows或Linux的java代码中调用

    JNI入门Demo1.0

    通过学习和实践这个JNI入门Demo1.0,你可以掌握JNI的基本用法,包括声明`native`方法、生成头文件、编写C++代码以及构建和加载动态库。这将为你进一步探索Android的原生开发打下基础,比如使用C++提升性能、接入第三...

    JNI入门Demo2.0

    通过"JNI入门Demo2.0",你可以动手实践上述步骤,创建一个简单的Java类,声明一个native方法,然后在C/C++代码中实现并反调用Java方法,从而掌握JNI的基本用法。这个过程将帮助你更好地理解和运用JNI技术,提升...

    JNI入门与编程实现.zip

    JNI入门与编程实现

    Android下JNI入门详解

    ### Android下JNI入门详解 #### 一、JNI与VM简介 JNI(Java Native Interface)作为Android平台上连接Java层与C/C++层的关键桥梁,在开发过程中起着至关重要的作用。通过JNI,开发人员能够实现Java与C/C++代码之间...

    java jni从入门到精通

    1. **JNI基础知识** - **JNI概述**:JNI提供了一种安全、高效的方式,让Java应用程序能够调用本地方法(非Java语言编写),如C、C++等,同时也允许本地代码调用Java方法。这对于跨平台应用开发,尤其是需要高性能...

    JNI入门教程之HelloWorld篇.doc

    这篇“JNI入门教程之HelloWorld篇”文档将引导我们了解如何使用JNI来开发一个简单的应用程序。 首先,我们需要明白JNI的核心概念:本地方法接口。它提供了一种方式,让Java虚拟机(JVM)能够调用非Java语言编写的...

    NDK基础之JNI入门案例

    本教程将通过一个基础的JNI入门案例来介绍如何在Android应用中使用NDK和JNI。 首先,我们需要了解JNI的基本结构。JNI主要包含以下几个部分: 1. **本地方法声明**:在Java代码中,我们需要声明一个本地方法,这个...

    JNI入门 pdf

    ### JNI入门知识点详解 #### 一、JNI简介与应用场景 JNI (Java Native Interface) 是 Java 平台标准的一部分,它允许 Java 代码和其他语言写的代码进行交互。JNI 主要用于以下场景: - **性能优化**:某些算法或...

    JNI开发入门1

    ### JNI开发入门1 #### 一、概述 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码与其他语言写的代码进行交互。JNI的主要作用是让Java程序能够调用本地应用程序或者库(通常指C/C++语言编写...

    Android Studio JNI编程入门实例

    通过以上步骤,你已经成功实现了Android Studio中的JNI编程入门。然而,这只是基础,实际开发中可能需要处理更复杂的情况,如多线程、内存管理、错误处理等。同时,CMakeLists.txt作为现代的构建系统,提供了更多...

    jni入门demo。java调c,c调java

    本教程将带你入门JNI,了解如何在Java中调用C代码,以及C代码如何回调Java。 首先,我们要创建一个Java类,声明一些本地方法(native methods)。本地方法是Java方法,但其实现是在C或C++中完成的。例如: ```java...

Global site tag (gtag.js) - Google Analytics