Android Studio 3.01与CMake+NDK:编译自定义库与预编译库实战

4 下载量 157 浏览量 更新于2024-09-03 收藏 158KB PDF 举报
"这篇教程详细介绍了如何在Android Studio 3.0.1版本中利用CMake和NDK R16来编译自定义库以及添加预编译库。适合对Android原生开发感兴趣的开发者参考学习。" 在Android开发中,有时我们需要使用C++代码来实现特定的功能或利用现有的C++库。Android Studio提供了对C++支持,通过集成NDK(Native Development Kit)和CMake构建系统,使得编写和管理原生代码变得更加便捷。以下将详细介绍这一过程: 一、创建包含C++的项目 在创建新项目时,选择"New Project",在项目模板选择中勾选"Include C++ support"。这将自动为你设置CMakeLists.txt文件,并添加必要的Gradle配置。 二、C++标准与异常支持 在项目设置中,可以指定C++标准,如C++11。同时,可以开启或关闭异常支持(Exceptions Support)和运行时类型信息(Runtime Type Information,RTTI)支持。如果启用异常支持,CMake会在编译时添加`-fexceptions`标志;RTTI支持则会添加`-frtti`标志。 三、CMakeLists.txt构建脚本 CMakeLists.txt是项目的配置文件,它告诉CMake如何编译和链接源代码。基本结构包括: 1. 设置CMake版本:`cmake_minimum_required(VERSION 3.4.1)` 指定最小CMake版本需求。 2. 定义项目和库:`add_library()` 命令用于定义库,可以设置库的类型(静态库STATIC或动态库SHARED),并指定源代码目录。 3. 包含头文件:`include_directories()` 添加包含路径,使CMake能找到头文件。 4. 链接依赖库:`target_link_libraries()` 将编译的库与项目链接,可以添加系统库或自定义库。 5. 源文件列表:`set(SRC_FILES ...)` 定义C++源文件列表。 6. 编译选项:可以添加特定的编译标志,例如`target_compile_options()`。 示例CMakeLists.txt内容: ```cmake cmake_minimum_required(VERSION 3.4.1) add_library( # Sets 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 ) find_library( # Sets the name of the path variable. log-lib # Specifies the name of the NDK library that # you want CMake to locate. log ) # Specifies libraries CMake should link to your target library. # You can link multiple libraries, such as libraries you define in this # build script, pre-built third-party libraries, or system libraries. target_link_libraries( # Specifies the target library. native-lib # Links the target library to the log library # included in the NDK. ${log-lib} ) ``` 四、预编译库的添加 如果已经有编译好的C++库(.a或.so文件),可以通过CMake的`add_library()`命令指定库的路径,将其作为预编译库添加。例如: ```cmake add_library(precompiled STATIC IMPORTED) set_target_properties(precompiled PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/precompiled/precompiled.a) target_link_libraries(native-lib precompiled) ``` 五、Gradle配置 在项目的`app`模块的`build.gradle`文件中,需要添加CMake和NDK的相关配置,比如: ```groovy externalNativeBuild { cmake { cppFlags "-frtti -fexceptions" abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } ``` 这里指定了C++的编译标志和要构建的目标架构。 总结,通过Android Studio、CMake和NDK,我们可以轻松地在Android项目中使用C++代码,编译自定义库,以及添加和使用预编译库。这种方式大大提高了开发效率,同时也使得跨平台的代码重用成为可能。不过,需要注意的是,不同的Android Studio版本和NDK版本可能在具体配置上有所不同,因此在实际操作时,应根据当前的环境进行适当的调整。