Android NDK开发详解之CMake工具链,Android NDK开发详解,CMake工具链使用指南

马肤

温馨提示:这篇文章已超过448天没有更新,请注意相关的内容是否还可用!

摘要:,,本文介绍了Android NDK开发中的CMake工具链。详细介绍了CMake的基本概念、安装配置、使用方法和优势。文章指出,CMake是一个跨平台的自动化构建工具,用于管理项目构建过程,可帮助开发者在Android NDK环境中更高效地编译C/C++代码。本文还探讨了CMake在Android开发中的重要性,以及如何利用它优化项目构建和提高开发效率。

简介

Android NDK支持使用CMake编译应用的C和C++代码,本页面介绍了如何通过Android Gradle插件的ExternalNativeBuild或使用直接调用CMake将CMake与NDK配合使用。

CMake 工具链文件

NDK通过工具链文件支持CMake,工具链文件是用于自定义交叉编译工具链行为的CMake文件,对于NDK,工具链文件位于NDK中的以下位置:/build/cmake/android.toolchain.cmake

注意:如果安装了Android SDK,NDK安装在SDK目录的以下位置:ndk/version/ndk-bundle/

Android NDK开发详解之CMake工具链,Android NDK开发详解,CMake工具链使用指南 第1张

在调用cmake时,会提供ABI和minSdkVersion等构建参数,要查看支持的参数列表,请参阅工具链参数部分。

警告:从CMake 3.21开始,CMake拥有了自己的内置NDK支持,从Android NDK r23开始,工具链文件将在使用CMake 3.21或更高版本时委托给CMake的内置支持,有关详细信息,请参阅相关问题的讨论。

用法

Gradle

使用externalNativeBuild时,系统会自动使用CMake工具链文件,详情请参阅Android Studio的向您的项目添加C和C++代码指南。

Android NDK开发详解之CMake工具链,Android NDK开发详解,CMake工具链使用指南 第2张

命令行

通过以下命令使用CMake:

$ cmake \
    -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \
    -DANDROID_ABI=$ABI \
    -DANDROID_PLATFORM=android-$MINSDKVERSION \
    $OTHER_ARGS

工具链参数

以下参数可以传递给CMake工具链文件,如果使用Gradle进行构建,请按照ExternalNativeBuild文档所述向android.defaultConfig.externalNativeBuild.cmake.arguments添加参数,通过命令行构建时,请使用-D将参数传递给CMake,要强制armeabi-v7a始终使用Neon支持进行构建,请传递-DANDROID_ARM_NEON=TRUE

ANDROID_ABI

注意:这是必需参数,目标ABI,要了解支持的ABI,请参阅Android ABI,Gradle会自动提供此参数,请勿在您的build.gradle文件中明确设置此参数,如需控制ABI目标的Gradle,请按照Android ABI说明使用abiFilters,对于每个build,CMake只针对一个目标进行构建,建议为每个ABI构建一次,以避免build之间的冲突。

Android NDK开发详解之CMake工具链,Android NDK开发详解,CMake工具链使用指南 第3张

ANDROID_ARM_MODE

指定是为armeabi-v7a生成arm还是thumb指令,对其他ABI没有影响,详细了解请参见Android ABI文档。

ANDROID_ARM_NEON

为armeabi-v7a启用或停用NEON,对其他ABI没有影响,对于API级别(minSdkVersion或ANDROID_PLATFORM)23或更高版本,默认为true,否则为false,详细情况请参阅Neon支持文档。

ANDROID_LD

选择要使用的链接器,lld目前处于NDK实验阶段,可通过此参数启用。

Android NDK开发详解之CMake工具链,Android NDK开发详解,CMake工具链使用指南 第4张

ANDROID_NATIVE_API_LEVEL 和 ANDROID_PLATFORM

指定应用或库所支持的最低API级别,此值对应于应用的minSdkVersion,当直接调用CMake时,此值默认为所使用的NDK支持的最低API级别,对于NDK r20,此值默认为API级别16,警告:NDK库无法在API级别低于构建代码所用的ANDROID_PLATFORM值的设备上运行,了解详情请参阅相关文档说明格式允许您指定android-N,而无需确定与该版本关联的编号,某些版本只是编号增加了,但字母顺序没有增加可以通过附加后缀来指定这些API级别例如,-MR1例如API级别为25的android-N-MR1可以通过添加后缀来指定这些API级别例如,-MR1例如API级别为25的android-N-MR1请查阅更多关于如何指定这些参数的详细信息了解详情请参阅相关文档说明格式允许您指定android-N而无需确定与该版本关联的编号请注意某些版本只是编号增加了但字母顺序没有增加可以通过附加后缀来指定这些API级别例如,-MR1等后缀的使用方式请查阅更多关于如何指定这些参数的详细信息了解详情请参阅相关文档说明格式允许您指定android-N而无需确定与该版本关联的编号某些版本可能只有编号增加而没有字母顺序的增加可以通过添加后缀来指定这些API级别例如,-latest等后缀的使用方式请查阅更多关于如何指定这些参数的详细信息了解详情请参阅相关文档说明格式允许您直接指定最新的API级别例如直接使用后缀“-latest”即可了解详情请参阅相关文档说明格式允许您直接指定最新的API级别例如直接使用后缀“-latest”,默认行为仅适用于部分应用在选择STL之前请务必阅读关于C++库支持的指南特别是有关静态运行时的部分值备注c++_shared libc++的共享库变体c++_static libc++的


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码