Premiers pas avec Java Native Interface (JNI)

Getting Started With Java Native Interface



Java Native Interface, en abrégé JNI, est une interface de programmation qui permet aux développeurs Java d'exécuter des codes et des extraits d'autres langages de programmation en Java. Il est accompagné de l'indispensable kit de développement logiciel Java, ou SDK (nous en parlerons dans un autre didacticiel).

JNI est également vénéré pour sa fonctionnalité d'appel à l'API pour se faufiler dans une machine virtuelle Java dans les applications Java. Cela permet aux développeurs d'invoquer le code Java dans le code de l'application native.







Si vous avez passé du temps à travailler avec Java, vous avez probablement déjà rencontré les nombreux problèmes de performances qui se présentent inévitablement à vous. Ce n'est pas un problème lorsque vous exécutez le même code dans la langue native, qui peut fonctionner plus de dix-huit fois plus rapidement lorsqu'il est lu dans un modèle compilé. En plus de cela, vous pouvez également utiliser des routines matérielles obsolètes/incompatibles avec des codes natifs dans d'autres langues.



Ce didacticiel montrera comment le code C/C++ de la machine peut être invoqué à partir d'une application Java.



Conditions préalables

Vous aurez besoin de quelques éléments pour suivre correctement ce guide. Ceux-ci incluent le compilateur Java, ou Javac.exe, ainsi que la JVM, ainsi que le générateur de méthode C native (javah.exe). Ces trois éléments sont intégrés au kit de développement logiciel, vous êtes donc tout à fait bon si vous l'avez. Outre ces trois, vous aurez également besoin des fichiers qui définissent JNI, y compris les fichiers d'en-tête natifs et les fichiers de bibliothèque complets.





Et bien sûr, dans un tutoriel sur l'exécution des codes C et C++, nous utiliserons également le compilateur C pour créer une bibliothèque partagée.

Composants JNI

JNI est principalement piloté par deux composants, à savoir h et javah. H est le composant du fichier d'en-tête qui remplace les codes natifs par du code Java, tandis que Javah fait en sorte que ce fichier puisse être chargé dans les fichiers d'en-tête de l'application par lui-même.



Invocation de C/C++ à partir de code Java

Étape 1 : Écriture du code en Java

Le code est d'abord écrit en Java et est conforme à trois conditions. Tout d'abord, il est écrit avec la méthode native pour être invoqué plus tard. Deuxièmement, il doit charger la bibliothèque partagée dont fait partie le code natif, et enfin, il doit invoquer les méthodes natives.

Utilisons ce code pour illustrer davantage :

Remarquez les lignes 3 et 6 ; ce sont les lignes où les méthodes natives sont incluses. Le code qui charge les bibliothèques partagées se trouve à la ligne 10, ce qui conduit à l'appel de la méthode entre les lignes 12 à 15.

Étape 2 : Compilation du code java en bytecode

La deuxième étape consiste à compiler le code Java. Le compilateur javac peut faire le travail ici pour nous ; lancez simplement la commande ci-dessous :

$javac Exemple1.Java

Étape 3 : Créer des fichiers d'en-tête C/C++

Ensuite, les fichiers d'en-tête de langue maternelle doivent être créés. Ces fichiers d'en-tête alimentent les signatures des codes natifs.

Ces fichiers d'en-tête peuvent être créés avec l'outil natif javah, un générateur de stub C fourni avec le SDK, à l'aide de la commande suivante :

javah Exemple1

La sortie suivante doit renvoyer :

Étape 4 : écriture du code natif

C'est ici que nous écrirons le code C/C++. Vous devez noter toutes les signatures qui doivent ressembler aux déclarations que nous avons faites à l'étape 1.

Voici une implémentation écrite en langage C :

Étape 5 : Créer une bibliothèque partagée

Une bibliothèque partagée peut être créée avec n'importe quel compilateur. Parce que la bibliothèque partagée contient le code natif, nous devrons en créer un.

Étape 6 : Lancez votre programme

Cette étape consiste à évaluer le code et à identifier tout problème avec le programme. Cela va impliquer l'environnement d'exécution Java car le code va s'exécuter principalement dans JVM.

Émettez la commande suivante :

java Exemple1

Il doit retourner :

C'était donc notre petit guide du débutant sur l'utilisation de Java Native Interface. Nous espérons que vous l'avez trouvé utile.

Apprendre à travailler avec JNI est essentiel pour quiconque souhaite développer des applications Java, en particulier des applications Android pour smartphones.