1. Introducción a JNI
JNI es la abreviatura inglesa de la interfaz nativa de Java, que significa interfaz local Java.
Fuente del problema: dado que es difícil implementar la aplicación subyacente de la escritura de Java, Java es difícil de manejar en algunas partes con requisitos en tiempo real muy altos (todavía no hay áreas con altos requisitos en tiempo real, y los temas como en tiempo real deben investigarse).
Solución: Java usa JNI para llamar a las bibliotecas locales existentes (C/C ++ para desarrollar cualquier programa y bibliotecas de clase relacionados con el sistema), que desarrollan de manera muy flexible Java.
2. JNI Tutorial de aprendizaje rápido
2.1 Pregunta:
Escriba una pieza de código usando JNI, implementa la función String_Java_Test_Helloworld (JNienv *Env, JClass CLS, JString J_STR), implementa la adición de Hello frente a la cadena J_STR ("Mundo") y return.
2.2 Proceso de resolución de problemas:
I. Escribe la clase Test.Java:
Prueba de clase pública {// Interfaz nativa Public String nativo HelloWorld (texto de cadena); public static void main (String [] args) {// Cargue el sistema de biblioteca dinámica.loadLibrary ("test2"); Prueba ts = nuevo test (); Text de cadena = ts.helloworld ("mundo"); System.out.println (texto); }}Observación:
1. Cargar biblioteca de clases dinámicas: system.loadLibrary ("test2"); [El que se carga en Windows es test2.dll, y el que se carga en Linux es test2.so]
II. Compilar el archivo test.java
Ingrese CMD para ingresar el comando> Javac test.java
Iii. Generar el archivo test.h
Ingrese el comando de entrada CMD> Prueba de Javah
El contenido del archivo test.h es el siguiente:
/ * No edite este archivo: se genera la máquina */#include <jni.h>/ * encabezado para la prueba de clase */#ifndef _included_test#define _included_test#ifdef __cplusplusextern "c" {#endif/ * * class: test * Method: Helloworld * Signature: (Ljava/lang/string;) ljava/lang/string; */Jniexport jString Jnicall java_test_helloworld (jnienv *, jobject, jString);#ifdef __cplusplus}#endif#endifObservación:
1. Declaración de funciones, formato fijo: Jniexport; Tipo de retorno: jString; JNI Call: Jnicall; Java_full Class name_method Nombre: java_test_helloworld;
2. Parámetros de la función: llame a Jni.h al puntero de la función encapsulada: jnienv; Java Class en sí: Jobject, archivo Java Pasametros aprobados: JString.
IV. Escriba el archivo de idioma C test2.c para implementar la función de la clase de prueba de la clase de prueba Llamando a la biblioteca de enlaces dinámicos:
#include "test.h" #include <string.h> jniexport jString jnicall java_test_helloworld (jnienv*env, trabajo obj, jString String) {const char*str = (*env)-> getTringutfchars (env, string, 0); Char Cap [128]; cap [0] = 'H'; cap [1] = 'e'; cap [2] = 'l'; cap [3] = 'l'; cap [4] = 'O'; strcat (tap, str); (*env)-> remaSeCringutfars (env, string, 0); return (*env)-> newStringutf (env, cap); }Observación:
1. Dado que Java en sí usa caracteres de doble byte, el lenguaje C en sí mismo es caracteres de un solo byte, por lo que debe usar (*env)-> getStringutfars () para convertir la cadena entre Java y C;
2. GetTringutfars () y Newstringutf (). El primero es el formato de codificación convertido de UTF8 a C, y el segundo es devolver una cadena UTF8 basada en la cadena de C;
3. RELEASSECTRINGUTFARS () se usa para liberar objetos. Hay máquinas virtuales en Java para la recolección de basura, pero en el lenguaje C, estos objetos deben reciclarse manualmente, de lo contrario pueden ocurrir fugas de memoria.
V. compilar y ejecutar
Compilación:
Ingrese el comando de entrada CMD> GCC -i "D:/archivos de programa/java/jdk1.8.0_45/include" -i "d:/archivos de programa/java/jdk1.8.0_45/include/win32" --Share test2.c -o test2.dll
correr:
Ingrese CMD para ingresar el comando> prueba Java
Los resultados de la operación son los siguientes:
Hola Mundo
3. Resumen:
Paso 1: Escriba una clase Java (Test.java) con métodos nativos y use la herramienta Javac para compilar la clase Java (generar test.class);
Paso 2: use Javah para generar el archivo de encabezado (Test.h) correspondiente al método nativo;
Paso 3: Use C/C ++ para implementar el archivo de encabezado correspondiente (test2.c) y compilarlo en una biblioteca de enlaces dinámicos (test2.so).
El entorno en ejecución de este artículo: sistema operativo Windows de 64 bits, JDK versión 1.8, MingW64 (GCC).
El tutorial de introducción rápida de Java JNI anterior (recomendado) es todo el contenido que comparto con ustedes. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.