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

    技术2025-08-06  7

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

    环境需要

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

    1. 新建空(Empty Activity)工程

    2. 新建.txt / .cpp

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

    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" } }

    5. 生成so库

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

    ---查看打印信息出 SUCCESSFUL 表示成功生成so文件--- ---查看so库文件:app ---> intermediates ---> cmake ---> debug ---> obj (默认生成全部类型的so文件)---

    Processed: 0.011, SQL: 9