使用CMake引入第三方so库及头文件并调用头文件声明的函数

本文介绍了如何在Android项目中使用CMake引入和调用第三方C++库(so库)及头文件。首先,确保项目包含NDK。接着,通过CMakeLists.txt配置文件,使用target_include_directories将头文件与NDK关联,用add_library导入so库,并设置目标属性指定库路径。最后,通过target_link_libraries将库与项目连接。在Java层,更新build.gradle.kts并从MainActivity调用C++代码。

首先,要调用别人的so库和头文件,我们自己项目中需要有NDK。
因为只有C++代码才能直接调用C++代码,也就是头文件和so库的函数。

其次,就是要想办法把头文件,so库和项目中的NDK关联起来,然后作为一个整体,生成一个jni,供Java层调用。

最后,二者的关联是通过CMake完成的。

项目目录

一.具体讲解一下CMakeLists.txt写法

1.target_include_directories 将头文件与自己项目的ndk关联
注意是add,不是add/
add指的是cpp目录下的add文件夹
#将native-lib 关联到第三方库头文件 下面的路径是第三方头文件的路径

target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
       add)

2.将第三方so库和自身项目的NDK关联

2.1 add_library将要导入的so库加入到library中,注意每个so库都分开导入

导入第三方库,不同的第三方库需要分开导入,有两个so库需要导入,所以写两次

add_library(testjni SHARED IMPORTED)
add_library(add-lib SHARED IMPORTED)

2.2.set_target_properties告诉CMake so库所在的路径
注意 网上说 ${CMAKE_SOURCE_DIR} 表示源代码的根路径,也就是E:/workas/jnitest/app,这样可以避免硬编码绝对路径。
但是实际打印出来发现#CMAKE_SOURCE_DIR===E:/workas/jnitest/app/src/main/cpp,以至于CMake找不到so库,报错。
具体原因未知,只能先硬编码
#第一个参数为第三方so库名称,第二个指明配置导入第三方so库路径,第三个为第三方库的具体路径
#CMAKE_SOURCE_DIR E:/workas/jnitest/app/src/main/cpp

set_target_properties(
        testjni
        PROPERTIES IMPORTED_LOCATION
#        ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${CMAKE_ANDROID_ARCH_ABI}/libtestjni.so
        E:/workas/jnitest/app/src/main/jniLibs/${CMAKE_ANDROID_ARCH_ABI}/l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值