JNI è inoltre venerato per la sua funzione per invitare l'API a sgattaiolare in una macchina virtuale Java nelle applicazioni Java. Ciò consente agli sviluppatori di invocare il codice Java all'interno del codice dell'applicazione nativa.
Se hai trascorso un po 'di tempo a lavorare con Java, probabilmente ti sei già imbattuto nei numerosi problemi di prestazioni che inevitabilmente ti arrivano. Questo non è un problema quando si esegue lo stesso codice nella lingua madre, che può funzionare oltre diciotto volte più velocemente quando viene letto in un modello compilato. Inoltre, puoi anche utilizzare routine hardware obsolete/incompatibili con codici nativi in altre lingue.
Questo tutorial dimostrerà come il codice della macchina C/C ++ può essere invocato all'interno di un'applicazione Java.
Prerequisiti
Avrai bisogno di alcune cose da seguire correttamente questa guida. Questi includono il compilatore Java o Javac.Exe, insieme al JVM, nonché al Generatore del metodo C nativo (Javah.exe). Tutti e tre questi sono integrati nel kit di sviluppo del software, quindi sei tutto bravo se lo hai. Oltre a questi tre, avrai anche bisogno dei file che definiscono JNI, inclusi file di intestazione nativi e file di libreria completi.
E, naturalmente, in un tutorial sull'esecuzione dei codici C e C ++, useremo anche il compilatore C per creare una libreria condivisa.
Componenti JNI
JNI è principalmente guidato da due componenti, vale a dire H e Javah. H è il componente del file di intestazione che sostituisce i codici nativi con il codice Java, mentre Javah lo fa in modo che questo file possa essere caricato sui file di intestazione dell'app da solo.
Invocando C/C ++ dal codice Java
Passaggio 1: scrivere il codice in Java
Il codice è scritto per la prima volta in Java ed è conforme a tre condizioni. Innanzitutto, è scritto con il metodo nativo da invocare in seguito. In secondo luogo, deve caricare la libreria condivisa di cui è parte il codice nativo e, infine, deve invocare i metodi nativi.
Usiamo questo codice per illustrare ulteriormente:
AVVISO Linee 3 e 6; Queste sono le linee in cui sono inclusi i metodi nativi. Il codice che carica le librerie condivise si trova sulla riga 10, che porta al metodo invocato tra le righe da 12 a 15.
Passaggio 2: compilazione del codice Java su bytecode
Il secondo passo ha a che fare con la compilazione del codice Java. Il compilatore Javac può fare il lavoro qui per noi; Basta emettere il comando di seguito:
$ javac Esempio1.GiavaPassaggio 3: creare file di intestazione C/C ++
Successivamente, devono essere creati i file di intestazione della lingua madre. Questo intestazione file alimenta le firme dei codici nativi.
Questi file di intestazione possono essere creati con lo strumento nativo Javah, un generatore di stub C in bundle con SDK, usando il seguente comando:
Javah Esempio1Il seguente output dovrebbe restituire:
Passaggio 4: scrivere il codice nativo
Qui è dove scriveremo C/C ++. Dovresti notare tutte le firme che devono assomigliare alle dichiarazioni che abbiamo fatto nel passaggio 1.
Di seguito è riportata un'implementazione scritta in lingua C:
Passaggio 5: crea una libreria condivisa
Una libreria condivisa può essere creata con qualsiasi compilatore. Perché la libreria condivisa contiene il codice nativo, dovremo crearne uno.
Passaggio 6: avvia il tuo programma
Questo passaggio prevede la valutazione del codice e l'identificazione di eventuali problemi con il programma. Ciò coinvolgerà l'ambiente di runtime Java perché il codice eseguirà principalmente in JVM.
Emettere il seguente comando:
Java Esempio1Dovrebbe tornare:
Quindi questa era la nostra breve guida per principianti all'utilizzo dell'interfaccia nativa Java. Speriamo che tu lo abbia trovato utile.
Imparare a lavorare con JNI è essenziale per chiunque voglia sviluppare applicazioni Java, in particolare applicazioni Android per smartphone.