0

Java Native Interface

Java Native Interface (JNI) merupakan framework yang mengizinkan kode Java untuk memanggil native language seperti C, C+, maupun asemby. JNI dibutuhkan untuk mengoptimalkan performa pada Java.

Install terlebih dahulu tools yang diperlukan:

  1. JDK dan JRE
  2. Java IDE, pada kali ini digunakan Netbeans IDE 11.2.
  3. C++ IDE, pada kali ini digunakan Qt.

Langkah pertama, buat project pada Netbeans.

Buat Java class dengan nama file HelloJNI.java

Buat kode sebagai berikut:

public class HelloJNI {
    
    static {
        System.loadLibrary("HelloJNI");
    }
    
    private native void haii();
    
    public static void main(String[] args) {
      new HelloJNI().haii(); 
   }
    
}

Static initialer dibutuhkan untuk mengambil library native, menggunakan System.loadLibrary(). Selanjutnya adalah menghubungkan native method yang terdapat pada native library ke Java. Pada contoh di atas dibuat method dengan nama haii(). Untuk mencobanya dibuat fungsi utama main pada kelas di atas.

Langkah selanjutkan adalah compile program Java tersebut.

Jika berhasil dicompile, selanjutnya membuat header file untuk C/C++ dengan menggunakan bantuan command javah.

javah -classpath target/classes org.akhal.example.hellojni.HelloJNI

Jika berhasil, maka akan dihasilkan file dengan nama org_akhal_example_hellojni_HelloJNI.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_akhal_example_hellojni_HelloJNI */

#ifndef _Included_org_akhal_example_hellojni_HelloJNI
#define _Included_org_akhal_example_hellojni_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     org_akhal_example_hellojni_HelloJNI
 * Method:    haii
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_org_akhal_example_hellojni_HelloJNI_haii
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

Selanjutnya buat program C/C++. Pada contoh ini digunakan Qt Creater.

Tambahkan QMAKE_LFLAGS pada file .pro

QMAKE_LFLAGS += -Wl,--add-stdcall-alias

Tambahkan juga include path untuk Java pada file .pro

INCLUDEPATH += "C:/Program Files (x86)/Java/jdk1.8.0_251/include/"
INCLUDEPATH += "C:/Program Files (x86)/Java/jdk1.8.0_251/include/win32"

Replace isi file org_akhal_example_hellojni_hellojni.h dengan kode hasil generate dari javah. Kemudian buat isi program untuk method haii() pada file org_akhal_example_hellojni_hellojni.cpp

#include "org_akhal_example_hellojni_hellojni.h"

JNIEXPORT void JNICALL Java_org_akhal_example_hellojni_HelloJNI_haii(JNIEnv *env, jobject thisObj) {
   printf("Hello World!\n");
   return;
}

Kemudian build program sehingga dihasilkan file HelloJNI.dll. Copy file tersebut ke folder project Netbeans.

Langkah terakhir tes dengan cara menjalankan program Java. Akah diperoleh output seperti pada gambar di bawah ini: