JNI Windows学习环境搭建

 

JNI Windows学习环境搭建
我是为了编写Android Native代码才研究JNI的,有些基本问题就不说了。
1.JNI是什么?在这里没有必要说,不了解可以看看我上次推荐的书。
2.JNI和Android的关系。百度一下Android NDK就知道了。

回归正题,学习JNI技术需要搭建一个开发环境.JNI可以搭建Windows和Linux运行环境.在Windows环境中Java调用.dll,在Linux环境中Java调用.so。

环境要求:
JDK;
VC6/VSS(Windows );
gcc cc(Linux);

如果就学习JNI本身,最方便还是在Windows环境编译成DLL库给Java调用。这里就简要的记录一下过程。

1.安装JDK,设置JAVA_HOME,CLASS_PATH等环境变量,java的bin目录加入到PATH环境变量中。

2.写一段Java代码,HelloWorld.java


a.到java源代码目录运行下面的命令,编译java文件为class文件。
javac HelloWorld.java
b.生成给c语言的头文件(注意,运行javah前要保证有.class文件)
javah HelloWorld
此时将生成:HelloWorld.h文件。
c.在VC6中用向导生成一个Win32的DLL项目。
   把刚生成的HelloWorld.h 复制到当前DLL项目目录,加入到项目组。
   把HelloWorld.h 中的函数说明复制到cpp文件中开始填空。
   在cpp的头部添加#include "HelloWorld.h" 
   因为编译的时候会用到jni.h和jni_md.h文件,说在DLL项目项目设置中增加需要包含的路径:%JAVA_HOME%\include;%JAVA_HOME%\include\win32
   编译DLL项目,把DLL复制到Java的源代码目录。运行java程序
   java HelloWorld

关于DLL的路径问题:
1.DLL可以copy到当前的Java源代码目录。
2.DLL可以copy到Windows\system32目录下。
3.可以通过 java -Djava.library.path=. HelloWorld 指定DLL路径。

java代码: 

HelloWorld.java
class HelloWorld {
    private native void print();
    public static void main(String[] args) {
new HelloWorld().print();
    }
    static {
      System.loadLibrary("HelloWorld");
    }
}

 

cpp代码:

#include "stdafx.h"
#include "HelloWorld.h"

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    return TRUE;
}

JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
	printf("Hello World!\n");
	return;
}


 

 

 

你可能感兴趣的:(java,android,windows,jni,dll,include)