在網上查了一些關於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版本是內存優化的版本;