Recherche…


Remarques

Quel est le NDK Android?

Le kit de développement Android natif (NDK) est un outil complémentaire au SDK Android qui permet d'intégrer des parties d'applications en C / C ++. Ceci est utile pour:

  • Partage de composants applicatifs sur plusieurs plates-formes (Android, iOS, Linux, etc.)
  • Amélioration des performances pour les portions critiques
  • Réutilisation des bibliothèques C / C ++ existantes

Le NDK fournit des en-têtes et des bibliothèques qui permettent au développeur de créer des activités, de gérer les entrées utilisateur, d'utiliser des capteurs matériels, d'accéder aux ressources applicatives, etc., tout en programmant en C / C ++.

Versions

Version Date de sortie
r12 2016-06-09
r11 2016-03-09
r10 2014-07-01

Démarrer avec Android NDK avec un exemple simple

En utilisant Android Studio 2.2 et versions ultérieures, vous pouvez utiliser le kit de développement natif (NDK) pour compiler du code C et C ++.

Vous pouvez utiliser NDK en téléchargeant manuellement NDK et en le construisant ou via CMake.

Ici, je vais donner un flux de processus pour installer manuellement NDK et un exemple de code,

Sur la base de votre système d'exploitation, vous pouvez télécharger NDK à partir de cet emplacement https://developer.android.com/ndk/downloads/index.html .

Après le téléchargement, indiquez le chemin dans la variable d'environnement système sous le nom de variable « NDK_PROJECT_PATH » et la valeur de la variable «emplacement du chemin stocké NDK».

  • Ensuite, pour intégrer NDK à Android Studio, après avoir créé un nouveau projet Android,

    In gradle - les propriétés locales ajoutent l'emplacement du chemin sdk comme

     sdk.dir=F\:\\gowtham\\Android\\sdk
    

    et

      android.useDeprecatedNdk = true
    
  • Ensuite, appuyez sur Build - Make Project (Ctrl + f9).

    Votre projet sera construit avec succès et obtiendra BUILD SUCCESFUL dans le message gradle build, comme indiqué ci-dessous

entrer la description de l'image ici

Ensuite, dans Terminal, il contiendra initialement le chemin du projet

Il ajoute l' cd app/src/main

Le chemin s'étendra du chemin du projet au principal.

Ensuite, encore une fois Build - Make Project (Ctrl + f9).

Maintenant, vous trouverez le dossier app-build – intermediates – classes – debug , comme indiqué ci-dessous.

entrer la description de l'image ici

Maintenant, créez un nouveau fichier de classe Java sous une application / src / main / java. Ici, j'ai créé un fichier Java nommé NativeClass.

entrer la description de l'image ici

Ecrire une fonction d'appel simple avec le nom de la fonction et l'entrée pour la fonction, ici j'ai écrit la fonction comme exemple et lui ai donné deux entrées entières,

entrer la description de l'image ici

Encore une fois, construisez le projet (Ctrl + f9) ,

Lorsque vous construisez, vous trouverez le fichier de classe créé sous build comme ceci,

entrer la description de l'image ici

Then,in terminal 
    `-Javah  -d  jni –classpath ../../build/intermediates/classes/debug`application.com.ndkapplication.NativeClass

où, - d - pour le répertoire de sortie - jni -Générer le fichier d'en-tête de style JNI (par défaut) - classpath - pour lequel charger les classes

Maintenant, construisez le projet (Ctrl + f9), vous trouverez le dossier jni créé et un fichier d'en-tête sera créé avec le nom que vous avez spécifié dans le terminal, comme indiqué ci-dessous.

entrer la description de l'image ici

Copiez maintenant le fichier d'en-tête et enregistrez-le en tant que fichier .cpp ou .c du même nom que le fichier d'en-tête dans le dossier jni.

J'ai créé un fichier cpp comme indiqué ci-dessous

entrer la description de l'image ici

Delete everything before **JNIEXPORT line** in this file and **add header file name** alone.
Here I am for simple example just adding two numbers and returning value to android java.

Application_com_ndkapplication_NativeClass.cpp

 #include <application_com_ndkapplication_NativeClass.h>

JNIEXPORT jint JNICALL Java_application_com_ndkapplication_NativeClass_example
  (JNIEnv *, jclass , jint as , jint bs){

    return (as + bs);

    }

Et pour cet exemple, pas besoin d'ajouter de fonction dans son fichier d'en-tête.

Créer un nouveau fichier nommé Android.mk et Application.mk dans le dossier Jni

Le fichier Android.mk doit décrire vos sources au système de génération.

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES := application_com_ndkapplication_NativeClass.cpp

LOCAL_LDLIBS += -llog

LOCAL_MODULE := exp-jni

include $(BUILD_SHARED_LIBRARY)

connaître le détail de ce fichier lire depuis ce lien https://developer.android.com/ndk/guides/android_mk.html

entrer la description de l'image ici

Application.mk qui décrit les modules natifs requis par votre application.

Application.mk

APP_STL := gnustl_static

APP_CPPFLAGS := -frtti –fexceptions

APP_ABI := armeabi-v7a armeabi arm64-v8a mips mips64 x86 x86_64

APP_PLATFORM := android-16

connaître le détail de ce fichier lire à partir de ce lien https://developer.android.com/ndk/guides/application_mk.html

entrer la description de l'image ici

 Now build the project again **(Ctrl + f9)**, you will find the **armeabi-v7a, armeabi, arm64-v8a ,mips, mips64, x86 and x86_64** folder created inside jniLibs.

Ensuite, dans l'activité principale, passez l'entrée et obtenez une sortie pour le fichier de classe natif.

int a = 5, b = 5, res ;

res = NativeClass.example(((int) a),((int) b));

TextView textView = (TextView) this.findViewById(R.id.tv);

textView.setText(new Integer(res).toString());

Ici, j'ai donné deux entiers par a et b et obtenu une sortie de la variable res.

Et la sortie obtenue est affichée à l'écran en passant à TextView.

Et n'oubliez pas d'ajouter la bibliothèque que vous avez spécifiée dans le fichier Android.mk comme LOCAL_MODULE comme ceci,

static {
        System.loadLibrary("exp-jni");
  }

Enfin, construisez à nouveau le projet (Ctrl + f9), vous trouverez les fichiers .so créés sous chaque dossier armeabi-v7a, armeabi, arm64-v8a, mips, mips64, x86 et x86_64.

entrer la description de l'image ici

Alors maintenant, lancez l'application, vous obtiendrez une sortie pour cet exemple comme 10.

entrer la description de l'image ici

Ceci est un programme de base pour les débutants NDK, la bibliothèque OpenCV peut être importée ici et vous pouvez également faire des applications de traitement d'image.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow