NDK的构建有两种方式,一种是早期使用的ndk-build,一种是在Android Studio2.2之后推荐使用的cmake,我们今天只说推荐的cmake这种方式.
CMakeLists.txt的写法
add_library 使用指定的源文件将库添加到项目中
普通库
// 添加普通库的语法
add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])
// 创建ndk项目中默认生成的例子
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/native-lib.cpp )
复制代码name属性没什么好说的,注意全局唯一就好.
[STATIC | SHARED | MODULE]的话是生成的库的类型,STATIC的话生成的是静态库,也就是.a后缀的.我们一般用的都是SHARED生成动态链接库,也就是.so后缀的.
导入库
// 语法
add_library(<name> <SHARED|STATIC|MODULE|OBJECT|UNKNOWN> IMPORTED
[GLOBAL])
// 导入编译好的ffmpeg样例
add_library( ffmpeg
SHARED
IMPORTED )
// 设置需要导入的ffmpeg位置
set_target_properties( ffmpeg
PROPERTIES IMPORTED_LOCATION
../../../../libs/armeabi-v7a/libffmpeg.so )
复制代码这种方式可以把我们在外部编译好的.so库导进来
还有几种我也没用过了,可以参考官方文档看下add_library
include_directories 用来导入相关头文件
include_directories(src/main/cpp)
复制代码
find_library 用来引入NDK中提供的库.
Android NDK 原生 API
find_library(
# 定义存储NDK库位置的路径变量的名称。
log-lib
# 指定CMake要查找的NDK库的名称。
log )
复制代码
target_link_libraries 将导入的库和自己的原生库关联起来
target_link_libraries(
# 指定目标库。
native-lib
# 将目标库链接到NDK中包含的日志库。
${log-lib} )
网友评论