Introduction détaillée au processus d'enregistrement de la fonction Java JNI
Lorsque nous appelons le code natif en Java, il est généralement implémenté via JNI. Nous avons seulement besoin de charger le fichier de bibliothèque .so local dans la classe Java, de déclarer la méthode native, puis de l'appeler là où elle doit être appelée. Quant à l'implémentation spécifique de la méthode native en Java, tout est remis à la couche native. Quelle est la condition préalable pour nous d'appeler correctement les fonctions correspondantes dans le code local en Java? La réponse est d'établir une correspondance individuelle entre les méthodes natives en Java et les fonctions dans le code local via certains mécanismes. Alors, quel est ce mécanisme? Il s'agit du mécanisme d'enregistrement des fonctions JNI.
Il existe deux façons d'enregistrer les fonctions JNI, l'une est la méthode d'enregistrement statique, et l'autre est la méthode d'enregistrement dynamique. Présentez ces deux méthodes de mise en œuvre ci-dessous.
1. Enregistrement statique.
1. Principe de mise en œuvre: établissez une correspondance individuelle entre une méthode Java et une fonction JNI basée sur le nom de la fonction.
2. Processus de mise en œuvre:
①Sécrivez le code Java;
② compiler le code Java et générer des fichiers .class;
③ Utilisez la directive Javah pour générer un fichier JNI .h à l'aide du fichier .class généré;
④ Le fichier d'en-tête JNI généré contient la déclaration de fonctions Java dans la couche JNI;
3. Inconvénients:
L'écriture est très gênante car les noms des fonctions de couche JNI doivent suivre un format spécifique et les noms sont particulièrement longs;
② Cela provoquera beaucoup de travail pour les programmeurs, car les fichiers d'en-tête JNI doivent être écrits pour toutes les classes Java qui déclarent les fonctions natives;
③Le programme est inefficace, car lorsque vous appelez une fonction native pour la première fois, vous devez rechercher la fonction locale correspondante dans la couche JNI en fonction du nom de la fonction, puis établir une relation correspondante. Ce processus prend du temps.
2. Enregistrement dynamique.
1. Principe d'implémentation: Dire directement à la fonction native son pointeur vers la fonction correspondante dans JNI;
2. Processus de mise en œuvre:
① Utilisez la structure JninativeMethod pour enregistrer la correspondance entre les fonctions natives Java et les fonctions JNI;
② Enregistrer la correspondance entre toutes les fonctions natives et les fonctions JNI dans un tableau JninativeMethod;
③After le chargement de la bibliothèque dynamique JNI via System.LoadLibrary en Java, appelez la fonction JNI_ONLOAD et démarrez l'enregistrement dynamique;
④La fonction AndroidRuntime :: RegisterNativeMethods sera appelé dans JNI_ONLOAD pour l'enregistrement des fonctions;
⑤Le dernier appel à JniregisterNativeMethods dans AndroidRuntime :: RegisternativeMethods Inscription complète.
3. Avantages: surmonter les inconvénients de l'enregistrement statique.
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!