转载请注明出处。 https://blog.csdn.net/ma598214297/article/details/78387847
本篇主要介绍如何使用已经建好的库文件(包括动态和静态库文件)。
需要了解如何构建 C/C++ 工程的请点击这里。
第一步,构建支持C/C++的工程
第二步,把已经构建好的库加入工程(注意路径)
我加入的位置与app同一个父级目录。
第三步,配置CmakeList.txt信息
直接附上代码以及详细的注释,相信大家都可以很快清楚cmake脚本语言的含义。
与创建库文件一样在add_library()中第一个参数为库的名字,第二个参数SHARE表示动态库so,STATIC表示静态库.a。
set_target_properties()是用来链接你的库文件,与add_library()配套使用,第一个参数为库名字,最后一个参数代表文件路径。
target_include_directories() 第一个参数为当前工程新建的总库文件名,用PRIVATE隔开,后面的参数为需要链接的第三方库的头文件。
cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_VERBOSE_MAKEFILE on)
# set()用来设置一个路径全局变量 distribution_DIR
set(distribution_DIR ${CMAKE_SOURCE_DIR}/../libBuild)
# 创建一个静态库 lib_one 直接引用libone.a
add_library(lib_one STATIC IMPORTED)
set_target_properties(lib_one PROPERTIES IMPORTED_LOCATION
${distribution_DIR}/one/lib/${ANDROID_ABI}/libone.a)
# 创建一个动态库 lib_two 直接引用libtwo.so
add_library(lib_two SHARED IMPORTED)
set_target_properties(lib_two PROPERTIES IMPORTED_LOCATION
${distribution_DIR}/two/lib/${ANDROID_ABI}/libtwo.so)
#创建总的库native-lib并链接一个.c文件,可以直接引用第三方库的头文件
add_library(native-lib SHARED
${CMAKE_SOURCE_DIR}/src/main/cpp/native-lib.c)
#链接第三方库的头文件
target_include_directories(native-lib PRIVATE
${distribution_DIR}/one/include
${distribution_DIR}/two/include)
find_library( log-lib
log )
#把所有库文件都引入工程
target_link_libraries( native-lib
android
lib_two
lib_one
# Links the target library to the log library
# included in the NDK.
${log-lib} )
然后build一下工程,编译通过的话,OK,这些库文件就全部导入成功了。
追加一点,一定要注意module 级gradle的配置,不要忘了加入你的lib的路径。
android{
sourceSets {
main {
// let gradle pack the shared library into apk
jniLibs.srcDirs = ['../libBuild/two/lib']
}
}
}
下面可以验证一下so库是否何如app,首先build apk,然后打开视图,看lib文件夹下是否已经有你需要的so。
下面关于带头文件的so/.a如何使用就十分简单了。
进入你cpp文件夹下的native-lib.c,include一下,你会发现这些与库文件配套的头文件自动弹出了,这就代表引用成功了
相信以上代码可以解决各位Android studio使用CMAKE引用第三方库遇上的大部分问题,如果接下来有时间,我会仔细研究一下cmake配置脚本,简单的处理一下语法问题。