Подтвердить что ты не робот

Разница между CMake и NDK-build в проекте студии Android

Какова фактическая разница между конструкциями CMake и NDK в проекте студии Android. Я уже прошел через документацию Google, но концепция еще не ясна. Согласно документации Google:

Набор Native Native Development Kit (NDK): набор инструментов, который позволяет вам использовать код C и С++ с Android и предоставляет библиотеки платформ которые позволяют управлять собственными действиями и обращаться к физическому устройству компоненты, такие как датчики и сенсорный ввод.

CMake: инструмент внешней сборки, который работает вместе с Gradle для сборки вашей родной библиотеки. Этот компонент вам не нужен, если вы планируете для использования ndk-build.

У кого-нибудь есть лучшее объяснение с примером, когда нам нужно использовать что?

4b9b3361

Ответ 1

Чтобы устранить некоторую путаницу здесь: ndk-build - это система сборки, включенная в NDK. Он использует файлы Android.mk. Сам NDK представляет собой сборник компиляторов и библиотек, которые необходимы для создания кода C/С++ для Android. ndk-build и cmake используют NDK.

Какова фактическая разница между созданием CMake и NDK в проекте студии Android.

Они используют другой язык (пользовательские make файлы против cmake) для описания сборок. В идеале нет разницы в выводе для идентично описанных сборок, но это не означает, что ошибок нет.

У кого-нибудь есть лучшее объяснение с примером, когда нам нужно использовать что?

В общем, используйте какую бы систему вы ни выбрали.

Преимуществом CMake является то, что вы можете использовать один набор файлов сборки для всех своих целей (Android, Linux, Windows, iOS и т.д.). Если ваш проект является кросс-платформой, CMake должен сделать это проще всего на вас. Он также широко известен за пределами разработчиков Android, поэтому у людей, новых для Android, будет больше шансов понять его.

ndk-build следует предпочесть, если вы строите проект, который уже использует файлы Android.mk для своей системы сборки (устаревшие проекты).

Если вы пишете новый код, используйте то, с чем вам удобно. Если вы не знакомы ни с одним из них, cmake, вероятно, лучший выбор, потому что это облегчит кросс-платформенную работу в будущем, если вы решите это сделать.

Ответ 2

Я попытался дать некоторое объяснение, чтобы определить разные между CMake и NDK-Build и настройкой:

Некоторые начальные примечания:

  • Инструмент сборки по умолчанию для Android Studio для собственных библиотек - это CMake.
  • Android Studio также поддерживает ndk-build из-за большого количества существующих проектов, которые используют инструментарий сборки для компиляции собственного кода.
  • Если вы создаете новую родную библиотеку, вы должны использовать CMake.
  • Поддержка ndk-build включена из-за большого количества устаревших проектов.

CMake

Внешний инструмент построения, который работает рядом с Gradle для создания вашей родной библиотеки. Этот компонент вам не нужен, если вы планируете использовать ndk-build. CMake требует сборки script, чтобы знать, как создать свою родную библиотеку. Для новых проектов Android Studio создает CMake build script, CMakeLists.txt и помещает его в корневой каталог ваших модулей.

Если ваши родные источники уже не имеют сборки CMake script, вам необходимо создать их самостоятельно и включить соответствующие команды CMake. Конструкция CMake script - это простой текстовый файл, который вы должны назвать 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 также поддерживает ndk-build из-за большого количества существующих/устаревших проектов, которые используют инструментарий сборки для компиляции собственного кода. Вам нужно создать его самостоятельно и включить соответствующий файл Android.mk для ndk-build, а затем настроить файл Gradle для ndk-build так же, как CMake.

Настроить Gradle как для CMake, так и для ndk-build:

Чтобы вручную настроить Gradle для связи с вашей родной библиотекой, вам нужно добавить блок externalNativeBuild в файл build.gradle на уровне модуля и настроить его либо с помощью блока cmake или ndkBuild:

    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"
        }
      }
    }

Если вы хотите связать Gradle с существующим проектом ndk-build, используйте блок ndkBuild вместо блока cmake и укажите относительный путь к вашему файлу Android.mk.

Ответ 3

Android.mk - это файл, который содержит NDK-сборку, если вы используете Cmake build you app, вам не нужен Android.mk, а его CmakeList.txt

Ответ 4

Четкий ответ здесь https://android-developers.blogspot.ru/2016/11/make-and-ndk-build-support-in-android.html. Сумма - выберите по порядку:

  • использовать gradle экспериментальный плагин для проектов с ограниченным С++

  • cmake для большей стабильности - это новые проекты

  • ndk-build для устаревших проектов, попробуйте перейти на cmake или новый плагин