android ndk学习

Cmake配置

2021-10-22  本文已影响0人  大旺旺的弟弟小旺旺

它是一个纯文本文件,并包含构建c/c++使用的命令,配置命令指示创建原生库使用那些源代码,在配置新的 CMake 构建脚本后,您需要配置gradle 将 CMake 项目作为构建依赖项包含在内,从而让 Gradle 构建原生库,并将其与应用的 APK 打包在一起。

创建构建脚本

cmakeList可以创建在任意位置。

cmake_minimum_required(VERSION 3.4.1)

根据源码生成库

add_library( # Specifies 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 )

在使用 add_library() 向 CMake 构建脚本添加源代码文件或库时,Android Studio 还会在您同步项目后在 Project 视图中显示相关的头文件。不过,为了让 CMake 能够在编译时找到头文件,您需要向 CMake 构建脚本添加命令,并指定头文件的路径:

add_library(...)
# Specifies a path to native header files.
include_directories(src/main/cpp/include/)

生成的库的名字前面加的“lib”,不过在加载的时候,可以直接的忽略掉。

static {
    System.loadLibrary("native-lib");
}

上面都是加入我们自己写的代码,如果想使用NDK提供的库,可以使用find_library,它会去ndk的安装目录下自己查找。这些无需打包apk,甚至本地无需安装,只需要指定路径。

find_library(
    log-lib
    log
)

为了可以调用函数,需要加一个关联

target_link_libraries(
  native-lib    (我们自己的)
  ${log-lib}
)

使用源代码的方式

add_library( app-glue
             STATIC
             ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c )

# You need to link static libraries against your shared native library.
target_link_libraries( native-lib app-glue ${log-lib} )

添加其他库

添加的步骤类似:

add_library( imported-lib
             SHARED
             IMPORTED )

然后指定路径

set_target_properties( # Specifies the target library.
                       imported-lib

                       # Specifies the parameter you want to define.
                       PROPERTIES IMPORTED_LOCATION

                       # Provides the path to the library you want to import.
                       imported-lib/src/${ANDROID_ABI}/libimported-lib.so )

为了让 CMake 能够在编译时找到头文件,您需要使用 include_directories() 命令并包含相应头文件的路径:

include_directories( imported-lib/include/ )

如需将预构建库关联到您自己的原生库,请将其添加到 CMake 构建脚本的 target_link_libraries() 命令中

target_link_libraries( native-lib imported-lib app-glue ${log-lib} )

构建多个CmakeList.txt

如果想要构建多个 CMake 项目并在 Android 项目中包含这些 CMake 项目的输出,您可以使用一个 CMakeLists.txt 文件(即您关联到 Gradle 的那个文件)作为顶级 CMake 构建脚本,并添加其他 CMake 项目作为此构建脚本的依赖项。以下顶级 CMake 构建脚本会使用 add_subdirectory() 命令将另一个 CMakeLists.txt 文件指定为构建依赖项,然后关联其输出,就像处理任何其他预构建库一样。

add_subdirectory( # Specifies the directory of the CMakeLists.txt file.
                  ${lib_src_DIR}

                  # Specifies the directory for the build outputs.
                  ${lib_build_DIR} )
上一篇下一篇

猜你喜欢

热点阅读