public native usb_init(); だけを使用することはできません。そのようなネイティブ ライブラリをロードすると、JNI はそのように実装されません。
javah を使用して、クラス内の特定のネイティブ関数を実装するライブラリを作成するために使用できる .h ファイルを作成します。
javac USBManager
javah で使用するクラス ファイルを作成します。
javah USBManager
これにより、関連するネイティブ関数を実装する .so/.dll に実装する関数を指定する「USBManager.h」という名前のファイルがその場所に作成されます。
/* 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();
}
Sun の開発者によるブログに非常に簡単な例がありますが、他にもたくさんの例があります。