Cmake系列(三) 在 CMakeLists.txt 引入第三方so库

将 so 库和头文件拷贝到对应的目录

/app/src/main/jniLibs/arm/libxxx.so

修改 CMakeLists.txt 文件 

第三方so库 这里和之前在第二步中介绍的创建一个新的原生库类似,
区别在于最后一个参数,我们通过IMPORTANT标志告知CMake只希望将库导入到项目中。 

目标库的路径 这里有几点需要说明

1、CMAKE_SOURCE_DIR}表示的是CMakeLists.txt所在的路径,我们指定第三方so所在路径时,应当以这个常量为起点。

2、我们应当为每种ABI接口提供单独的软件包,那么,我们就可以在jinLibs下建立多个文件夹,每个文件夹对应一种ABI接口类型,之后再通过${ANDROID_ABI}来泛化这一层目录的结构,这样将有助于充分利用特定的CPU架构。

3、第三方的库关联到原生库 这里和将NDK库关联到原生库的原理是一样的。
不过,为了确保CMake可以在编译时定位我们的头文件,我们需要将include_directories()命令添加到CMake构建脚本中并指定头文件的路径

add_library( 
	#指定目标导入库. 
	imported-lib 
	
	#设置导入库的类型(静态或动态) 为 shared library. 
	SHARED 
	
	#告知 CMake imported-lib 是导入的库 
	IMPORTED 
)

set_target_properties( 
	# 指定目标导入库 
	imported-lib 
	# 指定属性(本地导入的已有库) 
	PROPERTIES IMPORTED_LOCATION 
	# 指定你要导入库的路径. 
	# ${CMAKE_SOURCE_DIR} imported-lib/src/${ANDROID_ABI}/libimported-lib.so )
	#为了确保CMake可以在编译时定位到我们的头文件,我们需要使用include_directories()命令,并包含头文件的路径
	include_directories( imported-lib/include/ )
	
	
#要将预构建库关联到我们的原生库,请将其添加到 CMake 构建脚本的 target_link_libraries() 命令中 
target_link_libraries( 
	# 指定了三个库,分别是native-lib、 imported-lib和log-lib. 
	native-lib 
	imported-lib 
	# log-lib是包含在 NDK 中的一个日志库 
	${log-lib} 
)	

 


版权声明:本文为xfb1989原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。