在网上查了一些关于jni的资料终于解决了写一些对自己有用的同时也总结一些别人出现的错误希望对大家有所帮助。
工程已传到我的资源下面;
首先写java
package com.org;
publicclassmypro
{
/**
* @param args
*/
static
{
System.loadLibrary("gre");
}
publicnativevoid fun();
publicstaticvoid main(String[] args)
{
//TODO Auto-generated method stub
new mypro().fun();
}
}
开始菜单
cmd
G:
Cd Android
Cd mypro
Cd bin
之后用javah–jni cpm.org.MyClass
生成头文件 com_org_MyClass.h
如果找不到文件的话那么
Javah –help 可以自己看看
Javah –classpath . –jnicpm.org.MyClass
注意 –classpath后面有个点 代表当前路径。
打开头文件看到以下内容
/* DO NOT EDIT THIS FILE -it is machine generated */
#include <jni.h>
/* Header for classcom_org_MyClass */
#ifndef _Included_com_org_MyClass
#define _Included_com_org_MyClass
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_org_MyClass
* Method: fun
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_org_MyClass_fun
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
好下面来写关于C的部分
首先将C:\Program Files\Java\jdk1.7.0_04\include 下面的jni.h
与C:\Program Files\Java\jdk1.7.0_04\include\win32 下面的 jni_md.h
jawt_md.h
或者全都拷贝的C的include目录下面
D:\Program Files\Microsoft Visual Studio9.0\VC\include
然后就是新建c项目
点击finish 就可以了
这里说明一下由于之前网上很多介绍都是选的Empty project但是我这边那样写dll没有方法;使用dllexp.exe (我资源里面有)看不到函数。
接着就是将com_org_MyClass.h拷贝到HeadFiles下面
#include "stdafx.h"
#include "com_org_MyClass.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_com_org_MyClass_fun
(JNIEnv*, jobject)
{
printf("greatto see you ");
return;
};
gre.cpp文件的内容如下
#include "stdafx.h"
#include "com_org_MyClass.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_com_org_MyClass_fun
(JNIEnv*, jobject)
{
printf("greatto see you ");
return;
};
然后将G:\cProjects\gre\Debug 下面的 gre.dll拷贝到java mypro 工程的bin下面
cmd 到bin目录下面 java com_org_MyClass就会出现结果了。
补充你可以用dllexp先看一下里面的信息
下面当到了eclipse里面运行的时候就会报错
右击项目名à选择属性propertiesà在左边列表内选择“Java Build Path”à在右边选项卡用选择“source”à点开项目名前的“+”号,选择“Nativelibrary location”,“Edit”选择路径 (dll所在目录)。(当然如果将dll拷贝到workspace下也可以用相对路径。也可右击“src”设定其properties内Native Library项。)
.
也可在环境变量里面加这条路径
又或在run configration 下面 arguments
VM arguments
写入下面一句
-Djava.library.path=G:\Android\mypro\bin
或者直接将gre.dll拷贝到c\window\system32下面;
开发时released版本是内存优化的版本;