Android - NDK - CMake - 生成so库(方式二)

小白开发之生成so库(方式二)

环境需要

需要在SDK Tools下载:NDK / CMake / LLDB
如不知在哪看,可看此链接:小白开发之生成so库(方式一)

在这里插入图片描述

1. 新建空(Empty Activity)工程

Android - NDK - CMake - 生成so库(方式二)_第1张图片
在这里插入图片描述

2. 新建.txt / .cpp

app ---> src ---> main ---> 新建Directory文件类型(text)

text ---> File类型(CMakeList.txt)(注:新建时,把后缀也写上.txt)
     ---> C/C++ Source File类型(native-lib.cpp)

Android - NDK - CMake - 生成so库(方式二)_第2张图片
在这里插入图片描述

3. CMakeLists.txt

# 设置CMake构造本地库所需要的最低版本
cmake_minimum_required(VERSION 3.4.1)


# 配置库(.so/.a)信息(可定义多个library库,并使用CMake来构建)
add_library(
        # 库的名称,相对应生成的.so/.a文件名称是libnative-lib.so/.a
        native-lib

        # STATIC:静态库(.a):目标文件的归档文件,在链接其它目标的时候使用
        # SHARED:动态库(.so):会被动态链接,在运行时被加载
        # MODULE:模块库:不会被链接到其它目标中的插件,但是可能会在运行时使用
        SHARED

        # 资源文件,可以写多个
        # 库所在位置的相对路径,相对于本CMakeLists.txt所在的目录
        # 路径可以写详细一点:src/main/text/native-lib.cpp
        # 也可以下面简略的写
        native-lib.cpp )


# 从系统查找依赖库(这个不是必需的,如果不需要打印的,可以不写)
# NDK提供了一套实用的原生API和库,可以使用find_library搜索NDK中存在的库,
    # 只需要加入所需要使用库的名称即可,如下面的日志库log-lib。
find_library(
        # android系统每个类型的库会存放一个特定的位置,而log库存放在log-lib中
        log-lib

        # android系统在c环境下打log到logcat的库
        log )


# 配置库的链接(依赖关系)
# 指定CMake连接到目标库中,
    # 可以链接多个库,如上面的native-lib库以及NDK中自带的log-lib库
target_link_libraries(
        # 目标库(注:要与上面配置库信息里的名称一样)
        native-lib

        # 依赖于
        ${log-lib} )
# 无须注释的,可复制这行代码(还没写完,你所复制进去的代码都是黑色的)
cmake_minimum_required(VERSION 3.4.1)
add_library(
        native-lib
        SHARED
        native-lib.cpp )
find_library(
        log-lib
        log )
target_link_libraries(
        native-lib
        ${log-lib} )

在这里插入图片描述

4. build.gradle(添加两处地方)

//---------------- 一 ---------------
externalNativeBuild {
    cmake {
        cppFlags ""
    }
}

//---------------- 二 ---------------
externalNativeBuild {
    cmake {
        path "src/main/text/CMakeLists.txt"
        version "3.10.2"
    }
}

Android - NDK - CMake - 生成so库(方式二)_第3张图片
在这里插入图片描述

5. 生成so库

这时候生成的so库是没有什么用的,.cpp里面的内容还没写。
先看一下生成so库操作(--- Build---> Make Project ---(注:如有报错,看下路径是否写对,名称是否对应)

在这里插入图片描述
---查看打印信息出 SUCCESSFUL 表示成功生成so文件---
---查看so库文件:app ---> intermediates ---> cmake ---> debug ---> obj (默认生成全部类型的so文件)---

在这里插入图片描述

你可能感兴趣的:(so,android,java,cmake)