Saya yakin, yang kesulitan menggunakan JNI bukanlah saya seorang. JNI teh naon nya? Bagi anda yang belum tahu teori apa itu JNI, silakan browsing-browsing dulu. Bila anda sudah tahu teorinya, dan udah gak sabar pengen nyoba di linux, semoga tulisan ini bisa jadi panduan.
Oke, sebelum mulai, pastikan sesajen berikut ini sudah terinstall di linux anda:
1. JDK, untuk compile kode java anda
2. gcc, beserta libc6 untuk compile kode C anda
3. Eclipse (optional), sebagai editor
Yak, cukup itu sajen yang diperlukan dalam ritual ini. Sebagain informasi saja, sajen yang terakhir sifatnya sunah. Anda boleh menggunakan editor lainnya.
Untuk mulai mencoba JNI, buat dulu source java anda sebagai berikut (file: NevNat.java):
package com.uki.coba;
public class NevNat {
static {
System.loadLibrary(“nevnative”);
}
public native void display() ;
public static void main(String[] args) {
NevNat nat = new NevNat();
nat.display();
}
}
Setelah jadi, simpan dan compile source java tersebut.
gue@linux:~$ javac com/uki/coba/NevNat.java
Hasil komipilasi file tersebut menghasilkan file NevNat.class. Abis itu, dari file NevNat.class dibikin file C headernya, caranya:
gue@linux:~$ javah com.uki.coba.NevNat
Hasilnya adalah file com_uki_coba_NevNat.h. Isinya:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_uki_coba_NevNat */
#ifndef _Included_com_uki_coba_NevNat
#define _Included_com_uki_coba_NevNat
#ifdef __cplusplus
extern “C” {
#endif
/*
* Class: com_uki_coba_NevNat
* Method: display
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_uki_coba_NevNat_display
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
Nah, langkah selanjutnya adalah membuat source C yang mengimplementasi header tersebut.
Isinya sebagai berikut:
#include <jni.h>
#include "com_uki_coba_NevNat.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_com_uki_coba_NevNat_display
(JNIEnv *env, jobject obj) {
printf(“Hello dab!\n”);
return;
}
Kalo udah dibuat, tinggal compile
gcc -shared -I $JAVA_HOME/include/ -I $JAVA_HOME/include/linux/ NevNatImpl.c -o libnevnative.so
Trus, kalo udah kelas java tadi dijalankan aja
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
gue@linux:~$ java com/uki/coba/NevNat
Hasilnya:
Hello dab!
http://www.devarticles.com/c/a/Java/Interacting-With-C-From-Java-With-JNI-Part-1/1/