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 :
-
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.
-
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.txtou qui utilisendk-buildet qui inclut un script de compilationAndroid.mk, vous pouvez ignorer cette étape.
- Si vous disposez d'une bibliothèque native qui possède déjà un script de compilation
-
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)
.
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 :
- Dans la section Choose your project (Choisir votre projet) de l'assistant, sélectionnez le type de projet Native C++ (C++ natif).
- Cliquez sur Next (Suivant).
- Complétez tous les autres champs de la section suivante de l'assistant.
- Cliquez sur Next (Suivant).
-
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é.
- 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)
, 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 :
- Gradle appelle le script de compilation externe,
CMakeLists.txt. - CMake suit les commandes du script de compilation pour compiler un fichier source C++ intitulé
native-lib.cppdans une bibliothèque d'objets partagée, et le nommelibnative-lib.so. Gradle l'empaquette ensuite dans l'application. - Pendant l'exécution, l'activité
MainActivityde l'application charge la bibliothèque native à l'aide deSystem.loadLibrary(). La fonction native de la bibliothèque,stringFromJNI(), est désormais disponible pour l'application. -
MainActivity.onCreate()appellestringFromJNI(), qui renvoie"Hello from C++"et l'utilise pour mettre à jourTextView.
Pour vérifier que Gradle empaquette la bibliothèque native dans l'application, utilisez l'analyseur d'APK :
- Sélectionnez Build > Build Bundles(s)/APK(s) > Build APK(s) (Compilation > Compiler les bundles ou fichiers APK > Compiler les fichiers APK).
- Sélectionnez Build > Analyze APK (Compilation > Analyser l'APK).
- Sélectionnez l'APK ou l'AAB dans le répertoire
app/build/outputs/, puis cliquez sur OK. - Comme l'illustre la figure 2,