Android Cmake 增加第三方库的依赖

这里以xlog 为例子 

修改 build.gradle

这部分的代码是要添加xlog的依赖,也增加拷贝脚本,作用是把 mars-xlog 包里面的 so文件拷贝到 src/main/jniLibs 文件夹。

configurations {
    cmake_depends
}
dependencies {
    api "com.tencent.mars:mars-xlog:1.2.5"
    cmake_depends "com.tencent.mars:mars-xlog:1.2.5"
}
// 这个task 的作用是把 xlog 包里面的 so文件拷贝到 src/main/jniLibs 文件夹
task copyXlogSo {
    project.configurations.each { configuration ->
        if ("cmake_depends".equalsIgnoreCase(configuration.name)) {
            def lib = configuration.resolve()[0]
            copy {
                from zipTree(lib)
                into "${project.rootDir}/${project.name}/src/main/jniLibs/"
                include "jni/**/*.so"
            }
        }
    }
}
build.dependsOn copyXlogSo

执行build后,我们就可以看到在 src/main/jniLibs 增加了 xlog 的 so 文件,这里的so文件仅仅只是参与到编译过程,不会打包到apk,apk关联的还是mars-xlog.aar带有so文件。

src
└── jniLibs
    └── jni
        ├── arm64-v8a
        │   ├── libc++_shared.so
        │   └── libmarsxlog.so
        └── armeabi-v7a
            ├── libc++_shared.so
            └── libmarsxlog.so
修改 CMakeLists.txt

这部分的代码是为了查找并链接 marsxlog 动态库

cmake_minimum_required(VERSION 3.10.2)
project("xlog")

include_directories(export_include)

add_library(native-lib SHARED native-lib.cpp)

# 设置 xmlog 动态库 copy出来的文件夹
set(XLOG_PATH ../jniLibs/jni/${ANDROID_ABI}/)
# 从 jniLibs 查找对应平台的marsxlog so 
find_library(XLOG_LIB marsxlog PATHS ${XLOG_PATH} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
# 链接 marsxlog 动态库
target_link_libraries(native-lib ${XLOG_LIB})
导入头文件

从 mars 的仓库下载 xlog 的头文件,放到 cpp/export_include/xlogger 目录下,只需要4个头文件,其它文件都不需要。

├── CMakeLists.txt
├── export_include
│   └── xlogger
│       ├── android_xlog.h
│       ├── preprocessor.h
│       ├── xlogger.h
│       └── xloggerbase.h
└── native-lib.cpp

你可能感兴趣的:(android)