Какова реальная разница между CMake
а также NDK
встроить в андроид студийный проект. Я уже просмотрел документацию Google, но концепция еще не ясна. Согласно документации Google:
Комплект разработки для Android (NDK): набор инструментов, который позволяет вам
использовать код C и C ++ с Android и предоставляет библиотеки платформ
которые позволяют вам управлять собственными действиями и получить доступ к физическому устройству
компоненты, такие как датчики и сенсорный ввод.
CMake: внешний инструмент для сборки, который работает вместе с Gradle для сборки
ваша родная библиотека. Вам не нужен этот компонент, если вы только планируете
использовать ndk-build.
Может у кого-нибудь есть лучшее объяснение с примером, когда нам нужно использовать что?
Чтобы устранить некоторую путаницу здесь: ndk-build — это система сборки, включенная в NDK. Оно использует Android.mk
файлы. Сам NDK представляет собой набор компиляторов и библиотек, необходимых для сборки кода C / C ++ для Android. ndk-build и cmake используют NDK.
В чем реальная разница между сборкой CMake и NDK в проекте андроид студии.
Они используют другой язык (пользовательские make-файлы и cmake) для описания сборок. В идеале нет никакой разницы в выходных данных для идентично описанных сборок, но это не означает, что ошибок нет.
Может у кого-нибудь есть лучшее объяснение с примером, когда нам нужно использовать что?
В общем, используйте любую систему, которую вы предпочитаете.
Основным преимуществом CMake является то, что вы можете использовать один набор файлов сборки для всех ваших целей (Android, Linux, Windows, iOS и т. Д.). Если ваш проект кроссплатформенный, CMake должен сделать это максимально простым для вас. Он также широко известен сторонним разработчикам Android, поэтому у новичков в Android будет больше шансов понять его.
ndk-build предпочтительнее, если вы создаете проект, который уже использует Android.mk
файлы для его системы сборки (устаревшие проекты).
Если вы пишете новый код, используйте все, что вам удобно. Если вы не знакомы ни с одним из них, вероятно, лучшим выбором будет cmake, поскольку в будущем это облегчит кроссплатформенную работу, если вы решите это сделать.
Я попытался дать некоторые объяснения, чтобы определить различия между CMake и NDK-Build и настройкой:
Некоторые начальные заметки:
CMake:
Внешний инструмент сборки, который работает вместе с Gradle для сборки вашей нативной библиотеки. Вам не нужен этот компонент, если вы планируете использовать только ndk-build. CMake требует сценария сборки, чтобы знать, как собрать вашу нативную библиотеку. Для новых проектов Android Studio создает скрипт сборки CMake, CMakeLists.txt
и помещает его в корневой каталог вашего модуля.
Если в ваших исходных кодах еще нет сценария сборки CMake, вам нужно создать его самостоятельно и включить соответствующие команды CMake. Сценарий сборки CMake — это простой текстовый файл, который необходимо назвать 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
файл.
Четкий ответ здесь https://android-developers.blogspot.ru/2016/11/make-and-ndk-build-support-in-android.html. Подведите итоги — выберите по порядку:
использовать экспериментальный плагин Gradle для проектов с ограниченным C ++
cmake для большей стабильности — новые проекты
ndk-build для устаревших проектов, попробуйте перейти на cmake или новый плагин
Android.mk — это файл, содержащий NDK-сборку. Если вы используете Cmake build, то вам не нужен Android.mk, а его CmakeList.txt.