CMake 构建项目Android NDK项目基础知识

本篇文章将介绍如何使用 CMake 构建实现你的第一个 NDK 项目。html

前言

你好!欢迎来到个人的学习笔记分享系列,第一次给你们分享的是 Android NDK 开发的学习笔记,让咱们先开始了解 NDK 的构建方式吧! NDK 构建方式有两种,一种是 ndk-build,另外一种是 CMake,从 Android Studio 2.2 开始,Android Sudio 默认地使用 CMake 做为 NDK 项目的构建工具,本文将先介绍如何使用 CMake 来构建你的第一个 NDK 项目。java

关于NDK

什么是NDK

NDK 全称是 Native Development Kit,是一组可让你在 Android 应用中编写实现 C/C++ 的工具,能够在项目用本身写源代码构建,也能够利用现有的预构建库。android

为何要使用NDK

NDK 对许多类型的 Android 应用没什么价值。 由于它不可避免地会增长开发过程的复杂性,但在一些状况下却可能颇有用或者是必须的,下面列举一些 NDK 的使用目的:git

  • 从设备获取更好的性能以用于计算密集型应用,例如游戏或物理模拟
  • 重复使用本身或其余开发者的 C/C++ 库,便利于跨平台。
  • NDK 集成了譬如 OpenSLVulkan 等 API 规范的特定实现,以实如今 java 层没法作到的功能如提高音频性能等
  • 增长反编译难度

NDK 下载

能够直接经过 Android Studio >> SDK Manager >> SDK Tools 来下载最新的 NDK 包 github

NDK 下载
下载后所在目录是 $(你的sdk目录)/ndk-bundle,里面有不少重要的工具如 ndk-buildndk-gdb 等,以后会再作介绍。固然,你也能够:

关于 CMake

什么是 CMake

CMake 是一个开源的跨平台工具系列,旨在构建,测试和打包软件。CMake用于使用简单的平台和独立于编译器的配置文件来控制软件编译过程,并生成可在选择的编译器环境中使用的本机makefile和工做空间。简单点说,CMake 是一款外部构建工具,从 Android Studio 2.2 开始,Android Sudio 默认地使用 CMakeGradle 搭配使用来构建原生库。api

CMake 下载

和在 Android Studio 中下载 NDK 同样,能够直接经过 Android Studio >> SDK Manager >> SDK Tools 来下载 CMake: bash

CMake 下载
固然,你也能够:

使用 CMake 构建 NDK 项目

建立 NDK 项目

了解一些基础概念以后,接下来是建立一个 Demo,一步步地来看一下使用 CMake 构建的 NDK 项目里面有什么: 首先是在 Android Studio(2.2以上) 中建立一个新的项目,勾选上 Include C++ support,本文介绍将使用 Kotlinapp

建立新项目
而后一直往下,在自定义 C++ Support 界面保持 Toolchain Default 便可

自定义 C++ Support
项目建立了以后,你会在 Project 目录视图下,发现比普通的建立新项目多了几个文件: cpp目录里是默认生成的 cpp 文件, CMakeLists.txt 为 CMake 构建脚本。

Project 层级视图

点开 app 层级下的 build.gradle 文件,会发现多出以下部分: ide

app/build.gradle
这就是前文提到的在 Gradle 使用 CMake 配置为外部构建, .externalNativeBuild 文件所以生成,其中 path 指定了构建脚本的路径。还能够补充其余参数信息,可查阅:

CMakeList.txt

让咱们来一步步分析默认生成的 CMakeList.txt 里包含了哪些信息——工具

  • cmake_minimum_required() 首先开头部分 cmake_minimum_required() 定义了所需 CMake的最低版本。
cmake_minimum_required(VERSION 3.4.1)
复制代码
  • add_library() add_library() 命令用来添加库native-lib 对应着生成的库的名字,SHARED 表明为分享库,src/main/cpp/native-lib.cpp 则是指明了源文件的路径。
add_library( # Sets 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/native-lib.cpp)
复制代码
  • find_library() 将 find_library()命令添加到 CMake 构建脚本中以定位 NDK 库,并将其路径存储为一个变量。可使用此变量在构建脚本的其余部分引用 NDK 库,下面的代码则是定位 Android 特定的日志支持库并将其路径存储在 log-lib 中
find_library( # Sets the name of the path variable.
        log-lib

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log)
复制代码

注:预构建的 NDK 库已经存在于 Android 平台上,所以,无需再构建或将其打包到 APK 中。因为 NDK 库已是 CMake 搜索路径的一部分,甚至不须要在 NDK 安装中指定库的位置,只须要向 CMake 提供你但愿使用的库的名称,并将其关联到本身的原生库中。

  • target_link_libraries() 要将预构建库关联到本身的原生库,则将其添加到如下的 target_link_libraries() 命令中:
target_link_libraries( # Specifies the target library.
        native-lib

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})
复制代码

固然,你也能够查看:

编译

编译生成的apk里,就会找对应名称.so库文件啦:

apk

本文为我的原创,转载请注明出处。

相关文章
相关标签/搜索