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;
}
本文详细介绍了如何在Windows环境下搭建JNI开发环境,通过编写Java代码并将其编译为DLL库,实现Java与C语言之间的交互。重点阐述了JNI与Android的关联,以及如何在实际项目中应用这一技术进行高效开发。
618

被折叠的 条评论
为什么被折叠?



