Um simples exemplo de JNI (Java Native Interface)

1 minutos de leitura

Atualizado em:

[caption id="attachment_772" align="aligncenter" width="630"]Java Native Interfac Java Native Interfac[/caption]

Java Native Interface (JNI) é um padrão para escrever métodos nativos em Java. Neste exemplo mostro como chamar um método no Java, escrito em C.

Neste exemplo mostro como chamar um método que escreve "Olá Mundo" implementado no C e chamado na Java.

Utilizei o Linux, com o Debian para este exemplo.

Criando a classe em Java

Primeiramente vamos criar a classe em Java: HelloWorld.java

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

Compilando a Classe

Use normalmente o javac para compilar a classe HelloWorld

javac HelloWorld.java

Este comando irá gerar o arquivo HelloWorld.class no mesmo diretório

Gerando o Arquivo de Cabeçalho do método nativo

Aqui usamos o javah para gerar o cabeçalho que será usado em nossa classe em C

javah -jni HelloWorld

Ira gerá o arquivo HelloWorld.h no mesmo diretório. A parte mais importante deste arquivo, é o protótipo de função Java_HelloWorld_print, que indica a função que implementa o método HelloWorld().print();

JNIEXPORT void JNICALL
Java_HelloWorld_print (JNIEnv *, jobject);

Escrevendo a implementação nativa

Crie um arquivo HelloWorld.c:

 #include 
 #include 
 #include "HelloWorld.h"

 JNIEXPORT void JNICALL 
 Java_HelloWorld_print(JNIEnv *env, jobject obj)
 {
     printf("Olá Mundo\n");
     return;
 }

A função que você implementa está no padrão do arquivo de cabeçalho gerado Java_HelloWorld_print

Compilando o Código em C e criando uma bibliteca nativa

Em nossa classe em Java é chamada a biblioteca System.loadLibrary("HelloWorld"); geramos ela a partir da implementação em C.

Considerando que sua JDK está instalada em /opt/jdk1.6.0_31/, rode este comando:

gcc -shared -fpic -o libHelloWorld.so -I/opt/jdk1.6.0_31/include -I/opt/jdk1.6.0_31/include/linux HelloWorld.c

Ele irá gerar um arquivo libHelloWorld.so no mesmo diretório, copie para a pasta de bibliotecas do JDK:

sudo cp libHelloWorld.so /opt/jdk1.6.0_31/jre/lib/amd64/

Agora execute normalmente a classe em Java:

java HelloWorld

Se tudo der certo, aparecerá na tela: "Olá Mundo".

Parabens, você fez sua primeira aplicação com JNI.

Fiquem na Paz

Fontes

http://192.9.162.55/docs/books/jni/html/start.html
https://blogs.oracle.com/moonocean/entry/a_simple_example_of_jni
http://patriot.net/~tvalesky/jninative.html

Deixe um comentário