Introducció a Java Native Interface (JNI)

Getting Started With Java Native Interface



Java Native Interface, abreujat JNI, és una interfície de programació que permet als desenvolupadors de Java executar codis i fragments d'altres llenguatges de programació de Java. Ve juntament amb el kit de desenvolupament de programari Java essencial o SDK (ho tractarem en un tutorial diferent).

JNI també és venerada per la seva funció de cridar a l'API per colar-se en una màquina virtual Java en aplicacions Java. Això permet als desenvolupadors invocar el codi Java dins del codi de l'aplicació nativa.







Si heu passat un temps treballant amb Java, probablement ja us heu trobat amb molts problemes de rendiment que inevitablement us apareixen. Això no és un problema quan s'executa el mateix codi en l'idioma nadiu, que pot funcionar més de divuit vegades més ràpid quan es llegeix en un model compilat. A més, també podeu utilitzar rutines de maquinari obsoletes / incompatibles amb codis natius en altres idiomes.



Aquest tutorial demostrarà com es pot invocar el codi C / C ++ de la màquina des d'una aplicació Java.



Requisits previs

Necessitareu algunes coses per seguir correctament aquesta guia. Aquests inclouen el compilador Java, o Javac.exe, juntament amb la JVM, així com el generador de mètode C natiu (javah.exe). Tots tres s’incorporen al kit de desenvolupament de programari, de manera que estareu bé si en teniu. A més d’aquests tres, també necessitareu els fitxers que defineixin JNI, inclosos els fitxers de capçalera natius i els fitxers de biblioteca complets.





I, per descomptat, en un tutorial sobre l’execució dels codis C i C ++, també utilitzarem el compilador C per crear una biblioteca compartida.

Components JNI

JNI es basa principalment en dos components, a saber, h i javah. H és el component del fitxer de capçalera que substitueix els codis natius pel codi java, mentre que Javah permet que aquest fitxer es pugui carregar per si sol als fitxers de capçalera de l'aplicació.



Invocació de C / C ++ des del codi Java

Pas 1: escriure el codi a Java

El codi s’escriu primer en java i compleix tres condicions. En primer lloc, s’escriu amb el mètode natiu que s’invocarà més endavant. En segon lloc, ha de carregar la biblioteca compartida de la qual forma part el codi natiu i, finalment, ha d’invocar els mètodes natius.

Utilitzem aquest codi per il·lustrar més:

Notifiqueu les línies 3 i 6; aquestes són les línies on s'inclouen els mètodes natius. El codi que carrega les biblioteques compartides es troba a la línia 10, cosa que fa que el mètode sigui invocat entre les línies 12 a 15.

Pas 2: Compilar el codi Java a bytecode

El segon pas té a veure amb la compilació del codi Java. El compilador de javac pot fer la feina aquí per nosaltres; només heu d'emetre l'ordre següent:

$ javac Exemple1.java

Pas 3: creeu fitxers de capçalera C / C ++

A continuació, cal crear els fitxers de capçalera de la llengua materna. Aquest fitxer de capçalera potencia les signatures dels codis natius.

Aquests fitxers de capçalera es poden crear amb l'eina nativa de javah, un generador de memòria C agrupat amb SDK, mitjançant l'ordre següent:

javah Exemple1

Ha de tornar la sortida següent:

Pas 4: escriure el codi natiu

Aquí és on escriurem el codi C / C ++. Heu de tenir en compte totes les signatures que s’assemblen a les declaracions que vam fer al pas 1.

A continuació es mostra una implementació escrita en llenguatge C:

Pas 5: creeu una biblioteca compartida

Es pot crear una biblioteca compartida amb qualsevol compilador. Com que la biblioteca compartida conté el codi natiu, haurem de crear-ne un.

Pas 6: inicieu el programa

Aquest pas implica avaluar el codi i identificar qualsevol problema amb el programa. Això implicarà l'entorn d'execució de Java perquè el codi s'executarà principalment a JVM.

Emeteu l'ordre següent:

java Exemple1

Hauria de tornar:

Per tant, aquesta va ser la nostra breu guia per a principiants per utilitzar Java Native Interface. Esperem que us hagi estat útil.

Aprendre a treballar amb JNI és essencial per a qualsevol persona que vulgui desenvolupar aplicacions Java, especialment aplicacions Android per a telèfons intel·ligents.