您不能只使用公共本機usb_init();然後像這樣加載一個本地庫,JNI沒有這樣實現。
您使用javah創建一個.h文件,可以使用該文件創建一個實現該類中特定本機函數的庫。
javac USBManager
創建一個類文件,那你JAVAH使用:
javah USBManager
這就產生了一個文件,在該位置被稱爲「USBManager.h」,其中規定了功能於一身的.so實現/ .dll實現相關的本機功能。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class USBManager */
#ifndef _Included_USBManager
#define _Included_USBManager
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: USBManager
* Method: usb_init
* Signature:()V
*/
JNIEXPORT void JNICALL Java_USBManager_usb_1init
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
所以你需要導出一個名爲「Java_USBManager_usb_1init」功能,即取到指定的參數。
該函數可以不外乎:
JNIEXPORT void JNICALL Java_USBManager_usb_1init (JNIEnv *, jobject) {
usb_init();
}
有上a blog by a Sun developer一個很好的簡單的例子,但也有很多其他的例子在那裏。
這是贏,而不是linux。在linux上,共享庫名爲「libabc.so」被「abc」引用,在win上,「libabc.dll」被「libabc」引用。 – Daniel 2011-01-30 09:02:19
贏?你的意思是Windows?啊,對不起,不支持遺留系統:) – 2011-01-30 16:43:43