Introducción a la interfaz nativa de Java (JNI)

Getting Started With Java Native Interface



Java Native Interface, abreviado JNI, es una interfaz de programación que permite a los desarrolladores de Java ejecutar códigos y fragmentos de otros lenguajes de programación en Java. Viene junto con el kit de desarrollo de software Java esencial, o SDK (lo cubriremos en un tutorial diferente).

JNI también es venerado por su función de llamar a la API para colarse en una máquina virtual Java en aplicaciones Java. Esto permite a los desarrolladores invocar el código java dentro del código de la aplicación nativa.







Si ha pasado algún tiempo trabajando con Java, probablemente ya se haya encontrado con los muchos problemas de rendimiento que inevitablemente se le presentan. Esto no es un problema cuando ejecuta el mismo código en el idioma nativo, que puede funcionar hasta dieciocho veces más rápido cuando se lee en un modelo compilado. Además de eso, también puede utilizar rutinas de hardware obsoletas / incompatibles con códigos nativos en otros idiomas.



Este tutorial demostrará cómo se puede invocar el código C / C ++ de la máquina desde una aplicación Java.



Prerrequisitos

Necesitará algunas cosas para seguir correctamente con esta guía. Estos incluyen el compilador de Java, o Javac.exe, junto con la JVM, así como el generador de método nativo C (javah.exe). Los tres vienen integrados en el kit de desarrollo de software, por lo que todo está bien si lo tiene. Además de estos tres, también necesitará los archivos que definen JNI, incluidos los archivos de encabezado nativo y los archivos de biblioteca completos.





Y, por supuesto, en un tutorial sobre cómo ejecutar los códigos C y C ++, también usaremos el compilador C para crear una biblioteca compartida.

Componentes JNI

JNI está impulsado principalmente por dos componentes, a saber, hy javah. H es el componente del archivo de encabezado que reemplaza los códigos nativos con código java, mientras que Javah lo hace para que este archivo se pueda cargar en los archivos de encabezado de la aplicación por sí mismo.



Invocar C / C ++ desde código Java

Paso 1: escribir el código en Java

El código se escribe primero en Java y cumple con tres condiciones. Primero, está escrito con el método nativo que se invocará más adelante. En segundo lugar, debe cargar la biblioteca compartida de la que forma parte el código nativo y, por último, debe invocar los métodos nativos.

Usemos este código para ilustrar más:

Note las líneas 3 y 6; estas son las líneas donde se incluyen los métodos nativos. El código que carga las bibliotecas compartidas se encuentra en la línea 10, lo que hace que el método se invoque entre las líneas 12 a 15.

Paso 2: compilar el código java en bytecode

El segundo paso tiene que ver con la compilación del código java. El compilador javac puede hacer el trabajo aquí por nosotros; simplemente emita el comando a continuación:

$ javac Example1.Java

Paso 3: crear archivos de encabezado C / C ++

A continuación, se deben crear los archivos de encabezado del idioma nativo. Estos archivos de encabezado alimentan las firmas de los códigos nativos.

Estos archivos de encabezado se pueden crear con la herramienta nativa javah, un generador de código auxiliar de C incluido con el SDK, usando el siguiente comando:

javah Example1

Debería devolver el siguiente resultado:

Paso 4: escribir el código nativo

Aquí es donde escribiremos el código C / C ++. Debe anotar todas las firmas que deben parecerse a las declaraciones que hicimos en el paso 1.

A continuación se muestra una implementación escrita en lenguaje C:

Paso 5: crea una biblioteca compartida

Se puede crear una biblioteca compartida con cualquier compilador. Debido a que la biblioteca compartida contiene el código nativo, tendremos que crear una.

Paso 6: inicie su programa

Este paso implica evaluar el código e identificar cualquier problema con el programa. Esto involucrará el entorno de ejecución de Java porque el código se ejecutará principalmente en JVM.

Emita el siguiente comando:

Java Example1

Debería regresar:

Esa fue nuestra breve guía para principiantes sobre el uso de la interfaz nativa de Java. Esperamos que te haya resultado útil.

Aprender a trabajar con JNI es esencial para cualquier persona que quiera desarrollar aplicaciones Java, especialmente aplicaciones de Android para teléfonos inteligentes.