CMake和NDK-build在android studio项目中的区别



在android studio项目中CMakeNDK的实际区别是什么?我已经浏览了谷歌文档,但概念还不清楚。根据google文档:

Android Native Development Kit (NDK):一个工具集,允许你在Android上使用C和c++代码,并提供平台库它允许您管理本地活动并访问物理设备组件,如传感器和触摸输入。

CMake:一个外部构建工具,与Gradle一起工作来构建你的本地图书馆。如果您只是计划,则不需要此组件使用ndk-build.

当我们需要使用什么时,有人可以用一个例子更好地解释吗?

在这里澄清一些混淆:NDK -build是NDK中包含的构建系统。使用Android.mk文件。NDK本身是编译器和库的集合,需要为Android构建C/c++代码。NDK -build和cmake都使用NDK。

CMake和NDK在android studio项目中的实际区别是什么?

它们使用不同的语言(custom makefiles vs . cmake)来描述构建。理想情况下,对于相同描述的构建,输出没有差异,但这并不意味着没有任何错误。

当我们需要使用什么时,有人可以用一个例子更好地解释吗?

一般情况下,使用您喜欢的系统。

CMake的主要优点是你可以为所有目标(Android, Linux, Windows, iOS等)使用一组构建文件。如果你的项目是跨平台的,CMake应该会让你更轻松。它在Android开发人员之外也广为人知,所以刚接触Android的人将有更好的机会理解它。

如果您正在构建一个已经使用Android.mk文件作为其构建系统(遗留项目)的项目,则应该首选

ndk-build。

如果你正在编写新代码,使用任何你觉得舒服的代码。如果你对这两种工具都不熟悉,cmake可能是更好的选择,因为如果你选择这样做,它将使跨平台工作在未来变得更容易。

我试图给出一些解释来确定CMake和NDK-Build和setup之间的区别:

一些初始注释:

    Android Studio的默认构建工具是CMake。Android Studio也支持ndk-build,因为大量现有的项目使用build工具包来编译它们的本地代码。如果你正在创建一个新的本地库,你应该使用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,因为大量现有/遗留项目使用build工具包来编译其本机代码。您需要自己创建一个,并包含适当的Android。然后需要像CMake一样为ndk-build配置gradle文件。

为CMake和ndk-build配置Gradle:

要手动配置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实验插件
  • cmake for more stability is new projects

  • ndk-build用于遗留项目,尝试迁移到cmake或新插件

Android。mk是一个包含NDK-build的文件,如果你使用Cmake构建你的应用程序,你不需要Android。它的CmakeList.txt

最新更新