对于单个so库编译就不说了,AndroidStudio可以直接生成单个so库编译的模板
对于实际项目中,多用到的是好几个库,下面说一下编译多个so库的情况
一 根目录的CMakeLists.txt内容如下
cmake_minimum_required(VERSION 3.4.1)
#set(CMAKE_CXX_FLAGS "-Wno-error=format-security -Wno-error=pointer-sign")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/jniLibs/${ANDROID_ABI})
#设置头文件搜索路径(和此txt同个路径的头文件无需设置),可选
#INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/common)
#指定用到的系统库或者NDK库或者第三方库的搜索路径,可选。
#LINK_DIRECTORIES(/usr/local/lib)
#添加子目录,将自动找到子目录中的CMakeLists.txt
ADD_SUBDIRECTORY(${PROJECT_SOURCE_DIR}/src/main/cpp/one)
ADD_SUBDIRECTORY(${PROJECT_SOURCE_DIR}/src/main/cpp/two)
ADD_SUBDIRECTORY(${PROJECT_SOURCE_DIR}/src/main/cpp/three)
根目录的CMakeLists.txt文件中主要负责:
1.声明CMake最低版本
2.编译出的so库文件,存放的位置
3.各个子目录的路径
二、子目录CMakeLists.txt文件内容如下:
#继承上一层的CMakeLists.txt的变量,也可以在这里重新赋值
#C 的编译选项是 CMAKE_C_FLAGS
# 指定编译参数,可选
#SET(CMAKE_CXX_FLAGS "-Wno-error=format-security -Wno-error=pointer-sign")
#生成动态库名称、类型、资源文件
add_library(one SHARED one.cpp)
#依赖库
find_library(log-lib log)
#
target_link_libraries(one ${log-lib})
子目录CMakeLists.txt文件中主要负责:
1.声明该路径下编译出的库名称、类型、资源文件
2.依赖的库
3.建立依赖库链接
按照以上类似,在各个子目录下创建类似文件即可
三、build.gradle中添加配置
添加externalNativeBuild配置,参考如下:
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.libeibei.tv"
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "V1.0.1"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags ""
}
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
………………
}
四、最终编译出来生成三个so库文件