Application.mk

Ce document décrit le fichier de compilation Application.mk utilisé par ndk-build.

Nous vous recommandons de lire la page Concepts avant celle-ci.

Présentation

Le fichier Application.mk spécifie les paramètres du projet ndk-build. Par défaut, il se trouve à l'emplacement jni/Application.mk, dans le répertoire de projet de votre application.

Variables

APP_ABI

Par défaut, le système de compilation du NDK génère du code pour toutes les ABI non obsolètes. Vous pouvez utiliser le paramètre APP_ABI afin de générer du code pour des ABI spécifiques. Le tableau 1 présente les paramètres APP_ABI pour différents ensembles d'instructions.

Tableau 1. Paramètres APP_ABI pour différents ensembles d'instructions

Ensemble d'instructions Valeur
ARMv7 32 bits APP_ABI := armeabi-v7a
ARMv8 64 bits (AArch64) APP_ABI := arm64-v8a
x86 APP_ABI := x86
x86-64 APP_ABI := x86_64
Tous les ABI compatibles (par défaut) APP_ABI := all

Vous pouvez également spécifier plusieurs valeurs en les plaçant sur la même ligne et en les séparant par des espaces. Par exemple :

APP_ABI := armeabi-v7a arm64-v8a x86

Pour obtenir la liste de toutes les ABI compatibles ainsi que des détails sur leur utilisation et leurs limites, consultez la section ABI Android.

APP_ASFLAGS

Indicateurs à transmettre à l'assembleur pour chaque fichier source d'assemblage (fichiers .s et .S) dans le projet.

APP_ASMFLAGS

Indicateurs à transmettre à YASM pour tous les fichiers sources YASM (.asm, x86/x86_64 uniquement).

APP_BUILD_SCRIPT

Par défaut, ndk-build suppose que le fichier Android.mk est situé sous le chemin jni/Android.mk par rapport à la racine du projet.

Pour charger un fichier Android.mk depuis un autre emplacement, définissez APP_BUILD_SCRIPT sur le chemin absolu du fichier Android.mk.

APP_CFLAGS

Indicateurs à transmettre pour toutes les compilations C/C++ du projet.

Voir aussi : APP_CONLYFLAGS, APP_CPPFLAGS.

APP_CLANG_TIDY

Définissez cette valeur sur "true" pour activer clang-tidy pour tous les modules du projet. Désactivée par défaut.

APP_CLANG_TIDY_FLAGS

Indicateurs à transmettre pour toutes les exécutions clang-tidy dans le projet.

APP_CONLYFLAGS

Indicateurs à transmettre pour toutes les compilations C du projet. Ces indicateurs ne sont pas utilisés pour le code C++.

Voir aussi : APP_CFLAGS, APP_CPPFLAGS.

APP_CPPFLAGS

Indicateurs à transmettre pour toutes les compilations C++ du projet. Ces indicateurs ne sont pas utilisés pour le code C.

Voir aussi : APP_CFLAGS, APP_CONLYFLAGS.

APP_CXXFLAGS

Identique à APP_CPPFLAGS, mais apparaît après APP_CPPFLAGS dans la commande de compilation. Par exemple :

APP_CPPFLAGS := -DFOO
APP_CXXFLAGS := -DBAR

La configuration ci-dessus génère une commande de compilation semblable à clang++ -DFOO -DBAR au lieu de clang++ -DBAR -DFOO.

APP_DEBUG

Définissez cette valeur sur "true" pour créer une application pouvant être déboguée.

APP_LDFLAGS

Indicateurs à transmettre lors de l'association de fichiers exécutables et de bibliothèques partagées.

APP_MANIFEST

Chemin absolu vers un fichier AndroidManifest.xml.

Par défaut, $(APP_PROJECT_PATH)/AndroidManifest.xml) est utilisé s'il existe.

APP_MODULES

Liste explicite de modules à créer. Les éléments de cette liste sont les noms des modules tels qu'ils apparaissent dans LOCAL_MODULE, dans le fichier Android.mk.

Par défaut, ndk-build crée l'ensemble des bibliothèques partagées, des exécutables, ainsi que leurs dépendances. Les bibliothèques statiques ne sont créées que si elles sont utilisées par le projet, si le projet ne contient que des bibliothèques statiques ou si elles sont nommées dans APP_MODULES.

APP_OPTIM

Définissez cette variable facultative comme release (publication) ou debug (débogage). Des binaires de publication sont créés par défaut.

Le mode publication active les optimisations et peut produire des binaires qui ne sont pas utilisables avec un débogueur. Le mode débogage désactive les optimisations afin de pouvoir utiliser les débogueurs.

Notez que vous pouvez déboguer des binaires de publication ou de débogage. Toutefois, les binaires de publication fournissent moins d'informations lors du débogage. Par exemple, les variables peuvent être optimisées pour empêcher l'inspection. La réorganisation du code peut également rendre plus difficile son exploration. Les traces de la pile peuvent manquer de fiabilité.

Si vous déclarez android:debuggable dans la balise <application> du fichier manifeste de votre application, cette variable sera définie par défaut sur debug au lieu de release. Remplacez cette valeur par défaut en définissant APP_OPTIM sur release.

APP_PLATFORM

APP_PLATFORM déclare le niveau d'API Android sur lequel est basée cette application et correspond à l'objet minSdkVersion de l'application.

S'il n'est pas spécifié, ndk-build cible le niveau d'API minimal accepté par le NDK. Le niveau d'API minimal compatible avec la dernière version du NDK sera toujours suffisamment bas pour prendre en charge presque tous les appareils actifs.

Par exemple, la valeur android-16 indique que votre bibliothèque utilise des API qui ne sont pas disponibles sous Android 4.1 (niveau d'API 16) et qui ne peuvent pas être utilisées sur des appareils exécutant une version de plate-forme inférieure. Pour obtenir la liste complète des noms de plates-formes et des images système Android correspondantes, consultez la section API natives du NDK Android.

Lorsque vous utilisez Gradle et externalNativeBuild, ce paramètre ne doit pas être défini directement. Définissez plutôt la propriété minSdkVersion dans les blocs defaultConfig ou productFlavors de votre fichier build.gradle au niveau du module. Cela garantit que votre bibliothèque n'est utilisée que par des applications installées sur des appareils exécutant une version d'Android appropriée.

Notez que le NDK ne contient pas de bibliothèques pour chaque niveau d'API d'Android. Les versions qui n'incluaient pas de nouvelles API natives sont omises pour économiser de l'espace dans le NDK. ndk-build utilise les éléments suivants, par ordre décroissant de préférence :

  1. Version de la plate-forme correspondant à APP_PLATFORM
  2. Prochain niveau d'API disponible en dessous de APP_PLATFORM (par exemple, android-19 est utilisé quand APP_PLATFORM indique android-20, car il n'existe pas de nouvelles API natives dans android-20)
  3. Niveau d'API minimal accepté par le NDK

APP_PROJECT_PATH

Chemin absolu du répertoire racine du projet.

APP_SHORT_COMMANDS

Équivalent de LOCAL_SHORT_COMMANDS au niveau du projet. Pour en savoir plus, consultez la documentation sur LOCAL_SHORT_COMMANDS dans Android.mk.

APP_STL

Bibliothèque standard C++ à utiliser pour cette application.

La STL system est utilisée par défaut. Les autres options possibles sont c++_shared, c++_static et none. Consultez la section Environnements d'exécution C++ du NDK et fonctionnalités associées.

APP_STRIP_MODE

Argument à transmettre à strip pour les modules de cette application. La valeur par défaut est --strip-unneeded. Pour éviter de supprimer tous les binaires du module, définissez la valeur sur none. Pour les autres modes de suppression, consultez cette documentation.

APP_THIN_ARCHIVE

Définissez cette valeur sur "true" pour utiliser des archives fines pour toutes les bibliothèques statiques du projet. Pour en savoir plus, consultez la documentation sur LOCAL_THIN_ARCHIVE dans Android.mk.

APP_WRAP_SH

Chemin d'accès au fichier wrap.sh à inclure dans cette application.

Il existe une variante de cette variable pour chaque ABI, tout comme une variante générique d'ABI :

  • APP_WRAP_SH
  • APP_WRAP_SH_armeabi-v7a
  • APP_WRAP_SH_arm64-v8a
  • APP_WRAP_SH_x86
  • APP_WRAP_SH_x86_64