Android JNI的CMakeLists.txt配置解读

cmake_minimum_required(VERSION 3.22.1)

Sets the minimum CMake version required for this project.

最小支持的CMake版本

project("jnitest")

Declares the project name. The project name can be accessed via ${ PROJECT_NAME}, Since this is the top level CMakeLists.txt, the project name is also accessiblewith ${CMAKE_PROJECT_NAME} (both CMake variables are in-sync within the top level build script scope).

通俗意义上讲呢,就是JNI的项目名称,可以用${CMAKE_PROJECT_NAME}获取到这个名称在其他地方使用

include_directories( include asn basetools codec )

导入头文件目录,以便在代码中include,没有这个其他目录下的头文件是找不到的

add_subdirectory(asn)

添加子项目到当前项目中,不添加的话代码是连接不到的

find_library(log-lib log)

这个玩意就是寻找NDK中的so库,然后可以给它起别名
log是需要的NDK库
log-lib是给log库起的名称,后面要使用的话就要用${log-lib}

add_library(alarm SHARED IMPORTED)
add_library(${CMAKE_PROJECT_NAME} SHARED native-lib.cpp alarm_so.cpp)

  1. add_library(alarm SHARED IMPORTED)中alarm 表示so库的名称,不必与任何东西相同,就是指定一个so库的名字,方便后面使用;
  • SHARED 代表库是共享的,作用还未知
  • IMPORTED表示引入外部so库,需配合set_target_properties()使用
  • 不使用IMPORTED,而是直接写入cpp文件列表,用空格分开,就是将指定文件打成so,以第一个参数作为命名(${CMAKE_PROJECT_NAME} 或者别的什么),需配合target_link_libraries()使用

set_target_properties( alarm PROPERTIES IMPORTED_LOCATION ../../../../libs/armeabi-v7a/libalarm.so )

引入外部so库,第一个参数与add_library的第一个参数相同,IMPORTED_LOCATION后面跟so的相对路径

target_link_libraries(${CMAKE_PROJECT_NAME} asn basetools codec android ${log-lib} paho-mqtt3c alarm)

Specifies libraries CMake should link to your target library. You can link libraries from various origins, such as libraries defined in this build script, prebuilt third-party libraries, or Android system libraries.

CMake编译需要链接哪些库,就是代码中使用到的库,这里都要添加,不然编译不过,但是会不会打到so库中就不知道了(应该是会的吧)

相关推荐
辛苦才能14 分钟前
C++ map/set 深度解析:从关联式容器的本质到 operator[] 的三重身份
开发语言·c++
Chen—LSN29 分钟前
C语言——文件操作(2)
c语言·开发语言·c++·经验分享·笔记·算法·c#
纪念 22934 分钟前
C++类和对象(最终篇)
开发语言·c++
LuminousCPP1 小时前
从零开始学 C++(三):类和对象入门|从 struct 到 class,理解封装、对象与 this 指针
c++·笔记·学习·类和对象
郝学胜-神的一滴1 小时前
游戏引擎原理与实践 01:聊聊游戏引擎的前世今生
开发语言·c++·游戏引擎·产品运营·软件工程·产品经理·untiy
晴天的雨.9922 小时前
【C++算法】三数之和
开发语言·c++·算法
pippocao2 小时前
王者荣耀日志组件BqLog 为何如此快之3——压缩日志执行路径优化
c++
传奇开心果编程2 小时前
【Flutter入门练中学】第11课:状态管理进阶与声明式路由
android·学习·flutter·ui·ios
AC赳赳老秦2 小时前
公开 CSV 数据集批量处理实战:用 OpenClaw 高效完成下载、清洗与标准化分析样本生成
java·开发语言·汇编·c++·python·deepseek·openclaw
JasonSJX3 小时前
四端自建播放器怎么落地:Android、iOS、tvOS、Tizen 的 DRM 播放 SDK 技术盘点
android·ios·音视频·视频防录屏·加密保护课程·直播安全