当前位置: 首页 > news >正文

jni入门学习 CMakeLists脚本

在 Android Studio 中使用 CMake 可以编译 C/C++ 代码,这为开发者提供了在 Android 应用中嵌入本地代码的能力。下面是关于在 Android Studio 中使用 CMake 编译的详细说明:

1. 创建 CMakeLists.txt 文件:

首先,你需要在项目的根目录或者 JNI 文件夹中创建一个 CMakeLists.txt 文件,用于配置 CMake 编译的规则和选项。

2. 配置 CMakeLists.txt 文件:

CMakeLists.txt 文件中,你可以配置编译规则、源文件、包含目录、链接库等信息。以下是一个简单的示例:

# 这表示要求系统上安装的 CMake 版本至少是 3.10.2
cmake_minimum_required(VERSION 3.10.2)# 这表示项目名称为 MyProject,并且使用 C++ 语言。
project(MyProject LANGUAGES CXX)# 声明一个 C++ 库 常见的库类型有 SHARED、STATIC 等
# 1.STATIC:静态库,编译时会将库的代码和数据复制到生成的可执行文件中,链接时会直接将库的代码和数据链接到可执行文件中。
# 2.SHARED:共享库(动态库),编译时会生成共享库文件(.so 文件),链接时会在运行时动态加载共享库。
# 3.MODULE:模块库,类似于共享库,但是在某些平台上有不同的行为。
# 4.BJECT:目标库,编译时会生成一个对象文件,这个对象文件可以在多个库中共享使用。
add_library( # 设置库的名称native-lib# 设置库的类型,这里选择 SHARED 表示动态库SHARED# 添加库的源文件,可以是多个文件native-lib.cpp )
# 表示将 main.cpp 编译为一个可执行文件 myapp
add_executable(myapp main.cpp)# 表示将 include 目录添加为 native-lib 目标的私有包含目录
target_include_directories(native-lib PRIVATE include)# 表示将 log 库链接到 native-lib 库中
target_link_libraries(native-lib log)# 表示设置 C++ 编译器的标准为 C++11
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")# 这表示查找系统上的 log 库并将其路径存储在 log-lib 变量中
find_library(log-lib log)

3. 在 build.gradle 文件中配置 CMake:

在 app 模块的 build.gradle 文件中,你需要配置 CMake 的路径和版本:

android {...defaultConfig {...externalNativeBuild {cmake {// 指定 CMake 的路径path "CMakeLists.txt"// 指定 CMake 的版本,这个版本必须与你的 CMakeLists.txt 文件中的要求版本一致version "3.10.2"}}}...
}

4. 使用 CMake 编译:

配置完 CMakeLists.txt 文件和 build.gradle 文件后,你可以使用 Android Studio 中的 Build 菜单中的 Build Project 选项来编译你的项目。这将会执行 CMake 编译,生成动态库或静态库文件。

5. 链接本地库到你的 Java 代码:

编译完成后,你需要在 Java 代码中加载你的本地库。你可以在 Java 代码中使用 System.loadLibrary("native-lib"); 来加载你的动态库。

以上是使用 CMake 在 Android Studio 中编译本地代码的基本步骤。你可以根据项目需求在 CMakeLists.txt 文件中添加更多的配置和规则,以满足项目的需求。

http://www.lryc.cn/news/321807.html

相关文章:

  • 如何在没有向量数据库的情况下使用知识图谱实现RAG
  • 6.如何判断数据库搜索是否走索引?
  • Java并发编程的性能优化方案中,哪些方法比较常用
  • AcWing 2867. 回文日期(每日一题)
  • 学习笔记-华为IPD转型2020:3,IPD的实施
  • 2024腾龙杯web签到题-初识jwt(签到:这是一个登录页面)
  • Monaco Editor系列(一)启动项目与入门示例解析
  • DNA存储技术原理是什么?
  • 多维时序 | Matlab实现VMD-CNN-GRU变分模态分解结合卷积神经网络门控循环单元多变量时间序列预测
  • 基于springboot+vue的毕业论文管理系统
  • JavaWeb后端——分层解耦 IOC DI
  • 短视频矩阵系统技术交付
  • Halcon 凹坑检测案例
  • MD5算法:密码学中的传奇
  • microk8s使用本地私服registry的镜像http协议
  • C++初阶 | [九] list 及 其模拟实现
  • 如何将Excel两列数据转换为统计图、曲线图、折线图?如何自定义某一列作为Excel的统计图横纵坐标?
  • [HackMyVM] Quick
  • 算法体系-12 第 十二 二叉树的基本算法
  • 【论文笔记合集】LSTNet之循环跳跃连接
  • 数据库关系运算理论:关系数据操作与关系完整性概念解析
  • Linux基础开发工具之yum与vim
  • 【正则表达式】正则表达式里使用变量
  • Java中的可变参数
  • 如何实现在固定位置的鼠标连点
  • 15|BabyAGI:根据气候变化自动制定鲜花存储策略
  • 二进制安全找实习记录
  • 列表(list)篇(一)
  • spring整合Sentinel
  • MFC 自定义分发消息方法