70 votes

Différence entre CMake et NDK-build dans le projet de studio Android

Quelle est la réelle différence entre CMake et NDK construire dans android studio de projet. J'ai déjà allés à travers google documents, mais le concept n'est pas encore clair. Selon google documents:

Le Natif Android Kit de Développement (NDK): un ensemble d'outils qui vous permet pour utiliser code C et C++ avec Android, et fournit la plate-forme de bibliothèques qui vous permettent de gérer natif activités et de l'accès au périphérique physique les composants tels que les capteurs et la saisie tactile.

CMake: externe outil de construction qui travaille aux côtés de Gradle pour construire votre bibliothèque native. Vous n'avez pas besoin de ce composant si vous ne comptez pour utiliser ndk-build.

Peut quelqu'un a une meilleure explication avec un exemple, lorsque nous avons besoin d'utiliser quoi?

79voto

Dan Albert Points 4490

Pour effacer une certaine confusion ici: ndk-build est un système de construction inclus dans le NDK. Il utilise Android.mk fichiers. Le NDK lui-même est un ensemble de compilateurs et bibliothèques qui sont nécessaires à la construction de code C/C++ pour Android. ndk-build et cmake à la fois utiliser le NDK.

Quelle est la différence réelle entre les CMake et NDK construire dans android studio de projet.

Ils utilisent une langue à l'autre (personnalisé makefiles vs cmake) pour décrire construit. Idéalement, il n'y a pas de différence en sortie de manière identique décrit construit, mais cela ne signifie pas qu'il n'y a pas tout les bugs.

Peut quelqu'un a une meilleure explication avec un exemple, lorsque nous avons besoin d'utiliser quoi?

En général, utilisez celle que vous préférez.

CMake est le principal avantage est que vous pouvez utiliser un ensemble de fichiers de build pour tous vos cibles (Android, Linux, Windows, iOS, etc). Si votre projet est multi-plateforme, CMake devrait en faire plus simple sur vous. Il est aussi très connu en dehors des développeurs Android, de sorte que de nouvelles personnes à Android aurez une meilleure chance de le comprendre.

ndk-build doit être préférée si vous êtes en train de construire un projet qui utilise déjà l' Android.mk fichiers pour son système de construction (anciens projets).

Si vous êtes en train de rédiger un nouveau code, utilisez ce que vous sentez à l'aise avec. Si vous n'êtes pas familier avec soit, cmake est probablement le meilleur choix, car il fera de la croix-plate-forme de travail plus facile dans le futur si vous choisissez de le faire.

25voto

0xalihn Points 5358

J'ai essayé de donner quelques explications à identifier les différents entre CMake et NDK-Build et de l'installation:

Quelques remarques:

  • Android Studio par défaut de l'outil de construction de bibliothèques natives est CMake.
  • Android Studio prend également en charge ndk-build en raison du grand nombre de projets qui utilisent la construire des outils pour compiler en code natif.
  • Si vous êtes à la création d'une nouvelle bibliothèque native, vous devez utiliser CMake.
  • Soutien pour le ndk-build est inclus en raison du grand nombre d'anciens projets.

CMake:

Externe outil de construction qui travaille aux côtés de Gradle pour construire votre bibliothèque native. Vous n'avez pas besoin de ce composant si vous ne prévoyez d'utiliser ndk-build. CMake besoin d'un script de construction de savoir comment construire votre bibliothèque native. Pour les nouveaux projets, Android Studio crée un script de build CMake, CMakeLists.txt, et la place dans votre module du répertoire racine.

Si vos sources natives n'en avez pas déjà un script de build CMake, vous devez en créer un vous-même et d'inclure les CMake commandes. Un script de build CMake est un fichier texte que vous devez le nom de CMakeLists.txt.

# Sets the minimum version of CMake required to build your native library.
# This ensures that a certain set of CMake features is available to
# your build.

cmake_minimum_required(VERSION 3.4.1)

# Specifies a library name, specifies whether the library is STATIC or
# SHARED, and provides relative paths to the source code. You can
# define multiple libraries by adding multiple add.library() commands,
# and CMake builds them for you. When you build your app, Gradle
# automatically packages shared libraries with your APK.

add_library( # Specifies the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             src/main/cpp/file_name.cpp )

NDK-Build:

Android Studio prend également en charge ndk-build en raison du grand nombre de/l'héritage de projets qui utilisent la construire des outils pour compiler en code natif. Vous devez créer un vous-même et d'inclure les Android.mk fichier ndk-build et que vous devez ensuite configurer gradle fichier ndk-build même que CMake.

Configurer Gradle à la fois pour CMake et ndk-build:

Pour configurer manuellement Gradle un lien vers votre bibliothèque native, vous devez ajouter l' externalNativeBuild bloc à votre niveau module build.gradle le fichier et de le configurer avec le cmake ou ndkBuild bloc:

android {
    ...
    defaultConfig {
        ...
        // This block is different from the one you use to link Gradle
        // to your CMake or ndk-build script.
        externalNativeBuild {

            // For ndk-build, instead use the ndkBuild block.
            cmake/ndkBuild {

                // Passes optional arguments to CMake.
                arguments "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang"

                    // Sets optional flags for the C compiler.
                    cFlags "-fexceptions", "-frtti"

                    // Sets a flag to enable format macro constants for the C++ compiler.
                    cppFlags "-D__STDC_FORMAT_MACROS"
            }
        }
        ndk {
            // Specifies the ABI configurations of your native
            // libraries Gradle should build and package with your APK.
            abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a'
        }
    }

    buildTypes {...}

    // Encapsulates your external native build configurations.
    externalNativeBuild {

        // Encapsulates your CMake build configurations.
        cmake {

            // Provides a relative path to your CMake build script.
            path "src/main/cpp/CMakeLists.txt"
        }

        // Encapsulates your ndkBuild build configurations.
        ndkBuild {

            // Provides a relative path to your ndkBuild Android.mk file.
            path "src/main/cpp/Android.mk"
        }
    }
}

Si vous souhaitez établir un lien Gradle à un ndk-build du projet, l'utilisation de l' ndkBuild bloc à la place de la cmake bloc, et de fournir un chemin d'accès relatif à votre Android.mk le fichier.

1voto

trolleg Points 16

Réponse claire est ici https://android-developers.blogspot.ru/2016/11/make-and-ndk-build-support-in-android.html. Somme - choisir dans l'ordre:

  • utilisation gradle expérimentale plugin pour les projets avec peu de C++

  • cmake pour plus de stabilité est de nouveaux projets

  • ndk-build est pour les anciens projets, essayer de migrer à cmake ou nouveau plugin

0voto

Linhai Li Points 17

Android.mk est un fichier qui contient NDK-build. Si vous utilisez Cmake Build-vous, vous n'avez pas besoin d'Android.mk mais de son fichier CmakeList.txt.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X