Noțiuni introductive despre Java Native Interface (JNI)

Getting Started With Java Native Interface



Java Native Interface, abreviată JNI, este o interfață de programare care permite dezvoltatorilor Java să ruleze coduri și fragmente din alte limbaje de programare în Java. Vine împreună cu esențialul kit de dezvoltare software Java sau SDK (vom aborda acest lucru într-un tutorial diferit).

JNI este, de asemenea, venerat pentru caracteristica sa de a apela la API pentru a se strecura într-o mașină virtuală Java în aplicațiile Java. Acest lucru permite dezvoltatorilor să invoce codul java în codul aplicației native.







Dacă ați petrecut ceva timp lucrând cu Java, probabil că ați întâlnit deja numeroasele probleme de performanță care vă apar în mod inevitabil. Aceasta nu este o problemă atunci când rulați același cod în limba maternă, care poate avea performanțe de peste optsprezece ori mai rapide atunci când citiți într-un model compilat. În plus, puteți utiliza și rutine hardware învechite / incompatibile cu coduri native în alte limbi.



Acest tutorial va demonstra cum poate fi invocat codul C / C ++ al mașinii din cadrul unei aplicații Java.



Condiții prealabile

Veți avea nevoie de câteva lucruri pentru a urma corect acest ghid. Acestea includ compilatorul Java sau Javac.exe, împreună cu JVM, precum și generatorul nativ de metode C (javah.exe). Toate cele trei sunt integrate în kitul de dezvoltare software, deci sunteți bine dacă aveți acest lucru. Pe lângă aceste trei, veți avea nevoie și de fișierele care definesc JNI, inclusiv fișierele antet native și fișierele bibliotecii complete.





Și, desigur, într-un tutorial despre rularea codurilor C și C ++, vom folosi și compilatorul C pentru a crea o bibliotecă partajată.

Componente JNI

JNI este condus în principal de două componente, și anume h și javah. H este componenta fișierului antet care înlocuiește codurile native cu codul java, în timp ce Javah o face astfel încât acest fișier să poată fi încărcat singur în fișierele antet ale aplicației.



Invocarea C / C ++ din codul Java

Pasul 1: Scrierea codului în Java

Codul este scris mai întâi în java și este conform cu trei condiții. În primul rând, este scris cu metoda nativă care va fi invocată mai târziu. În al doilea rând, trebuie să încarce biblioteca partajată din care face parte codul nativ și, în cele din urmă, trebuie să invoce metodele native.

Să folosim acest cod pentru a ilustra în continuare:

Observați liniile 3 și 6; acestea sunt liniile în care sunt incluse metodele native. Codul care încarcă bibliotecile partajate se află pe linia 10, ceea ce duce la invocarea metodei între liniile 12-15.

Pasul 2: Compilarea codului java în bytecode

Al doilea pas are legătură cu compilarea codului Java. Compilatorul javac poate face treaba aici pentru noi; emiteți doar comanda de mai jos:

$ javac Exemplu1.java

Pasul 3: Creați fișiere antet C / C ++

Apoi, trebuie create fișierele de antet în limba maternă. Acest fișier antet alimentează semnăturile codurilor native.

Aceste fișiere antet pot fi create cu instrumentul nativ javah, un generator de stub C grupat cu SDK, folosind următoarea comandă:

javah Exemplu 1

Următoarea ieșire ar trebui să revină:

Pasul 4: Scrierea codului nativ

Aici vom scrie codul C / C ++. Ar trebui să rețineți toate semnăturile care trebuie să semene cu declarațiile pe care le-am făcut la pasul 1.

Urmează o implementare scrisă în limbajul C:

Pasul 5: creați o bibliotecă partajată

O bibliotecă partajată poate fi creată cu orice compilator. Deoarece biblioteca comună conține codul nativ, va trebui să creăm unul.

Pasul 6: Lansați programul

Acest pas implică evaluarea codului și identificarea oricăror probleme cu programul. Aceasta va implica mediul de rulare Java, deoarece codul va fi executat în principal în JVM.

Lansați următoarea comandă:

java Exemplul 1

Ar trebui să revină:

Așa că acesta a fost scurtul nostru ghid pentru începători pentru utilizarea Java Native Interface. Sperăm că ți s-a părut de ajutor.

Învățarea modului de lucru cu JNI este esențială pentru oricine dorește să dezvolte aplicații Java, în special aplicații Android pentru smartphone-uri.