Ajouter du code C et C++ à votre projet

Pour ajouter du code C et C++ à votre projet Android, placez-le dans un répertoire cpp dans le module de votre projet. Lorsque vous créez votre projet, ce code est compilé dans une bibliothèque native que Gradle peut empaqueter avec votre application. Votre code Java ou Kotlin peut ensuite appeler des fonctions de votre bibliothèque native via l'interface native Java (JNI). Pour en savoir plus sur l'utilisation du framework JNI, consultez les conseils JNI pour Android.

Android Studio est compatible avec CMake, qui convient aux projets multiplates-formes, et avec ndk-build, qui peut être plus rapide que CMake, mais n'est compatible qu'avec Android. À ce stade, il n'est pas possible d'utiliser à la fois CMake et ndk-build dans le même module.

Pour importer une bibliothèque ndk-build existante dans votre projet Android Studio, découvrez comment associer Gradle à votre projet de bibliothèque native.

Cette page vous explique comment configurer Android Studio avec les outils de compilation nécessaires, créer un nouveau projet compatible avec C/C++ et ajouter de nouveaux fichiers C/C++ à votre projet.

Si vous souhaitez ajouter du code natif à un projet existant, procédez comme suit :

  1. Créez les fichiers sources natifs et ajoutez-les à votre projet Android Studio.
    • Ignorez cette étape si vous disposez déjà de code natif ou si vous souhaitez importer une bibliothèque native prédéfinie.
  2. Configurez CMake pour créer votre code source natif dans une bibliothèque. Vous aurez besoin de ce script de compilation si vous effectuez l'importation et l'association avec des bibliothèques de plate-forme ou des bibliothèques prédéfinies.
    • Si vous disposez d'une bibliothèque native qui possède déjà un script de compilation CMakeLists.txt ou qui utilise ndk-build et qui inclut un script de compilation Android.mk, vous pouvez ignorer cette étape.
  3. Configurez Gradle en fournissant un chemin d'accès au fichier de script CMake ou ndk-build. Gradle utilise le script de compilation pour importer le code source dans le projet Android Studio et empaqueter la bibliothèque native dans l'application.

Une fois votre projet configuré, vous pouvez accéder à vos fonctions natives à partir du code Java ou Kotlin à l'aide du framework JNI. Pour compiler et exécuter votre application, cliquez sur Run (Exécuter) exécutez ensuite l'application depuis la barre de menu.

Remarque : Si votre projet utilise l'outil ndkCompile obsolète, optez plutôt pour CMake ou ndk-build.

Télécharger le NDK et les outils de compilation

Pour compiler et déboguer le code natif de votre application, vous avez besoin des composants suivants :

  • NDK Android : cet ensemble d'outils vous permet d'utiliser le code C et C++ avec Android. Le NDK fournit des bibliothèques de plate-forme qui vous permettent de gérer des activités natives et d'accéder à des composants d'appareils physiques, tels que des capteurs et des commandes tactiles.
  • CMake : outil de compilation externe qui fonctionne avec Gradle pour compiler votre bibliothèque native. Vous n'avez pas besoin de ce composant si vous prévoyez uniquement d'utiliser ndk-build.
  • LLDB : outil d'Android Studio qui permet de déboguer le code natif.

Pour en savoir plus sur l'installation de ces composants, consultez Installer et configurer le NDK et CMake.

Créer un projet compatible avec C/C++

La création d'un projet qui prend en charge le code natif est semblable à la création de tout autre projet Android Studio, à une différence près :

  1. Dans la section Choisir votre projet de l'assistant, sélectionnez le type de projet Native C++.
  2. Cliquez sur Next (Suivant).
  3. Complétez tous les autres champs de la section suivante de l'assistant.
  4. Cliquez sur Next (Suivant).
  5. Dans la section Customize C++ Support (Personnaliser la compatibilité C++) de l'assistant, vous pouvez personnaliser votre projet avec le champ C++ Standard(Norme C++).
    • Dans la liste déroulante, sélectionnez le paramètre de norme C++ que vous souhaitez utiliser. Si vous sélectionnez Toolchain Default (Chaîne d'outils par défaut), le paramètre CMake par défaut est utilisé.
  6. Cliquez sur Finish (Terminer).

Une fois qu'Android Studio a fini de créer votre projet, ouvrez le volet Project (Projet) à gauche de l'IDE, puis sélectionnez la vue Android dans le menu. Comme l'illustre la figure 1, Android Studio ajoute le groupe cpp :

Figure 1 : Groupes de vues Android pour vos sources natives et scripts de compilation externes

Remarque : Cette vue ne reflète pas la hiérarchie réelle des fichiers sur le disque, mais regroupe les fichiers similaires pour simplifier la navigation dans votre projet.

Le groupe cpp vous permet de trouver tous les fichiers sources natifs, les en-têtes, les scripts de compilation pour CMake ou ndk-build, ainsi que les bibliothèques prédéfinies qui font partie de votre projet. Pour les nouveaux projets, Android Studio crée un exemple de fichier source C++ (native-lib.cpp) et le place dans le répertoire src/main/cpp/ du module de votre application. Cet exemple de code fournit une fonction C++ simple, stringFromJNI(), qui renvoie la chaîne "Hello from C++". Pour découvrir comment ajouter des fichiers sources supplémentaires à votre projet, consultez la section relative à la création de fichiers sources natifs.

Tout comme Gradle suit les indications des fichiers build.gradle pour créer votre application, CMake et ndk-build nécessitent un script de compilation pour déterminer comment créer votre bibliothèque native. Pour les nouveaux projets, Android Studio crée un script de compilation CMake, CMakeLists.txt, et le place dans le répertoire racine de votre module. Pour en savoir plus sur le contenu de ce script de compilation, consultez la section Configurer CMake.

Créer et exécuter l'application exemple

En cliquant sur Run (Exécuter) exécutez ensuite l'application depuis la barre de menu, Android Studio crée et lance une application qui affiche le texte "Hello from C++" sur votre appareil ou votre émulateur. La présentation suivante décrit les événements qui se produisent lors de la compilation et de l'exécution de l'application exemple :

  1. Gradle appelle le script de compilation externe, CMakeLists.txt.
  2. CMake suit les commandes du script de compilation pour compiler un fichier source C++, native-lib.cpp, dans une bibliothèque d'objets partagée et le nomme libnative-lib.so. Gradle l'empaquette ensuite dans l'application.
  3. Pendant l'exécution, l'activité MainActivity de l'application charge la bibliothèque native à l'aide de System.loadLibrary(). La fonction native de la bibliothèque, stringFromJNI(), est désormais disponible pour l'application.
  4. MainActivity.onCreate() appelle stringFromJNI(), qui renvoie "Hello from C++" et l'utilise pour mettre à jour TextView.

Pour vérifier que Gradle empaquette la bibliothèque native dans l'application, utilisez l'analyseur d'APK :

  1. Sélectionnez Build > Build Bundles(s)/APK(s) > Build APK(s) (Compilation > Compiler les bundles ou fichiers APK > Compiler les fichiers APK).
  2. Sélectionnez Build > Analyze APK (Compiler > Analyser l'APK).
  3. Sélectionnez l'APK ou l'AAB dans le répertoire app/build/outputs/, puis cliquez sur OK.
  4. Comme l'illustre la figure 2, libnative-lib.so apparaît dans la fenêtre de l'analyseur d'APK, sous lib/<ABI>/.

    Figure 2. Localiser une bibliothèque native à l'aide de l'analyseur d'APK

Conseil : Si vous souhaitez tester d'autres applications Android qui utilisent du code natif, cliquez sur File > New > Import Sample (Fichier > Nouveau > Importer un échantillon), puis sélectionnez un exemple de projet dans la liste Ndk.

Créer de nouveaux fichiers sources C/C++

Pour ajouter de nouveaux fichiers sources C/C++ à un projet existant, procédez comme suit :

  1. Si vous n'avez pas encore de répertoire cpp/ dans l'ensemble de sources principal de votre application, créez-en un comme suit :
    1. Ouvrez le volet Project (Projet) à gauche de l'IDE, puis sélectionnez la vue Project (Projet) dans le menu.
    2. Accédez à your-module > src.
    3. Effectuez un clic droit sur le répertoire main, puis sélectionnez New > Directory (Nouveau > Répertoire).
    4. Saisissez cpp comme nom de répertoire, puis cliquez sur OK.

  2. Effectuez un clic droit sur le répertoire cpp/, puis sélectionnez New > C/C++ Source File (Nouveau > Fichier source C/C++).
  3. Saisissez un nom pour votre fichier source, tel que native-lib.
  4. Dans le menu Type, sélectionnez l'extension du fichier source, par exemple .cpp.
    • Cliquez sur Edit File Types (Modifier les types de fichiers) pour ajouter d'autres types de fichiers au menu, tels que .cxx ou .hxx. Dans la boîte de dialogue New File Extensions (Nouvelles extensions de fichier) qui s'affiche, sélectionnez une autre extension de fichier à partir des menus Source Extension (Extension source) et Header Extension (Extension d'en-tête), puis cliquez sur OK.
  5. Pour créer un fichier d'en-tête, cochez la case Create an associated header (Créer un en-tête associé).
  6. Cliquez sur OK.

Après avoir ajouté des fichiers C/C++ à votre projet, vous devez toujours configurer CMake pour les inclure dans votre bibliothèque native.

Ressources supplémentaires

Pour en savoir plus sur la compatibilité du code C/C++ dans votre application, consultez la ressource suivante.

Ateliers de programmation