Integração Java e C++ com JNI

JNI (Java Native Interface)

Java Native Interface

A Java Native Interface JNI define um padrão de nomes e convenções de funções que só a Máquina Virtual Java pode localizar e invocar nos métodos nativos de uma DLL gerada em C/C++ ou Assemble.

O JNI habilita programadores a escrever métodos nativos para tratar situações em que uma aplicação não pode ser escrita inteiramente na linguagem Java. A Java Native Interface define um padrão de nomes e convenções de funções que só a Máquina Virtual Java pode localizar e invocar nos métodos nativos.

Através do uso do padrão JNI podemos integrar nossos projetos Java com DLLs geradas e compiladas em C++

Padrão JNI

O Aplicativo javah

O aplicativo javah essencial para a criação da interface nativa é fornecido pela JDK. Utilizamos este aplicativo para gerar um arquivo .h que define os protótipos dos métodos de uma classe Java em forma de interface C/C++. Esta interface contém as declarações necessárias para compilarmos corretamente os módulos nativos que interagem com a JNI.

O aplicativo javah tem como vantagem reduzir os erros de programação na hora de integração de módulos nativos com a nossa JNI.

Para gerar um arquivo .h com o aplicativo javah devemos seguir com os seguintes passos:

1 – Compilação da Classe Java

javac MinhaClasse.java

2 – Criação da Interface Nativa JNI

javah -jni MinhaClass

Compilação via linha de comando, o ambiente de desenvolvimento deve estar configurado com a JDK e suas respectivas variáveis de ambiente.

Após a criação da Interface Nativa será gerado um arquivo uma estrutura semelhante a:

#include <jni.h>
#ifndef _Included_nomeClasse
#define _Included_nomeClasse
#ifdef __cplusplus

extern "C" {
#endif
/*
* Comentários sobre o método nativo aqui...
*/
JNIEXPORT tipoRetorno JNICALL Java_nomeClasse_nomeMétodo

(JNIEnv *, jobject[, tipo-parâmetro[...]]);
...
#ifdef __cplusplus
}
#endif
#endif

Last updated

Was this helpful?