博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CMake 构建项目Android NDK项目基础知识
阅读量:5852 次
发布时间:2019-06-19

本文共 2776 字,大约阅读时间需要 9 分钟。

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

关于NDK

什么是NDK

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

为什么要使用NDK

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

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

NDK 下载

可以直接通过 Android Studio >> SDK Manager >> SDK Tools 来下载最新的 NDK 包

下载后所在目录是 $(你的sdk目录)/ndk-bundle,里面有很多重要的工具如
ndk-build
ndk-gdb 等,之后会再做介绍。当然,你也可以:

关于 CMake

什么是 CMake

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

CMake 下载

和在 Android Studio 中下载 NDK 一样,可以直接通过 Android Studio >> SDK Manager >> SDK Tools 来下载 CMake:

当然,你也可以:

使用 CMake 构建 NDK 项目

创建 NDK 项目

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

然后一直往下,在自定义 C++ Support 界面保持
Toolchain Default 即可

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

点开 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库文件啦:

本文为个人原创,转载请注明出处。

你可能感兴趣的文章
php怎么设置input大小,js实现input输入框点击变大缩小
查看>>
java swing请求页面接口,java swing 远程调用接口
查看>>
java中file系统找不到指定的路径,java.io.FileNotFoundException:.\cfg\users(系统找不到指定的路径)...
查看>>
matlab如何清屏的运行,Matlab(1) -- Matlab清屏命令
查看>>
java集成kafka依赖包怎么导入,Kafka指南-源码导入Idea
查看>>
matlab 规律,01用PYTHON下载数据,而后用MATLAB编程探讨规律
查看>>
php 发布拼多多,拼多多补贴换增长的故事还能讲多久?
查看>>
matlab删去第34行和48列,Matlab考试题库+答案(教师出卷参考专用)
查看>>
matlab实现zca去白化,白化算法
查看>>
java判断word版本,java判断word是否相等?该怎么解决
查看>>
php设置div 换行,css如何设置自动换行?
查看>>
mongo php 复杂查询,【代码片-1】 MongoDB与PHP -- 高级查询
查看>>
论坛.newreply.php,discuz!论坛帖、删帖加减金钱值后台设定For D25sp1 4.3日整理版
查看>>
防止php 上传失败,如何解决php上传写入失败问题
查看>>
chuangjian php,chuangjian.php
查看>>
oracle查询字段详情,Oracle查询表信息获取表字段及字段注释
查看>>
oracle 指定关联,Oracle巧取指定记录与巧用外关联查询有哪些呢?
查看>>
php模型高清拓展,PHP的-Laravel雄辩的模型-模型扩展模型
查看>>
linux 生成随机文件,Linux 批量创建文件,文件名随机取
查看>>
设置linux下tomcat自启动,Linux下Tomcat自启动的设置技巧!
查看>>