Android Studio 3.01与CMake+NDK:编译自定义库与预编译库实战
165 浏览量
更新于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版本可能在具体配置上有所不同,因此在实际操作时,应根据当前的环境进行适当的调整。
2017-05-23 上传
2018-06-04 上传
2017-06-30 上传
2017-03-30 上传
2024-11-06 上传
318 浏览量
2016-11-12 上传
2017-01-10 上传
2017-10-30 上传