Android Studio CMakeList
1. 介绍
Android Studio是一款为开发Android应用程序而设计的集成开发环境(IDE)。它基于IntelliJ IDEA开发,并提供了许多专门用于Android应用程序开发的功能和工具。CMake是一个跨平台的构建工具,可以用于生成与平台无关的构建文件,如Makefile或Ninja文件。
CMakeList是一个CMake的配置文件,用于指导CMake生成构建文件。在Android Studio中,可以使用CMakeList来配置CMake构建Android项目。
本文将介绍如何在Android Studio中使用CMakeList进行Android项目的构建配置,并提供相应的代码示例。
2. CMakeList基本结构
CMakeList的基本结构如下所示:
# CMake 最低版本要求
cmake_minimum_required(VERSION 3.10.2)
# 项目名称
project(MyProject)
# 设置C++标准
set(CMAKE_CXX_STANDARD 11)
# 设置源代码目录
set(SOURCE_DIR src)
# 添加源文件
set(SOURCES
${SOURCE_DIR}/main.cpp
${SOURCE_DIR}/utils.cpp
)
# 添加头文件搜索路径
include_directories(include)
# 添加动态库搜索路径
link_directories(lib)
# 生成可执行文件
add_executable(MyExecutable ${SOURCES})
# 链接动态库
target_link_libraries(MyExecutable MyLibrary)
上述代码示例展示了一个简单的CMakeList文件。其中,通过cmake_minimum_required
指定了CMake的最低版本要求;project
用于设置项目名称;set
用于设置C++标准和源代码目录;include_directories
和link_directories
分别用于添加头文件搜索路径和动态库搜索路径;add_executable
用于生成可执行文件;target_link_libraries
用于链接动态库。
3. 在Android Studio中配置CMakeList
要在Android Studio中配置CMakeList,需要在项目的build.gradle
文件中进行相应的配置。
首先,在android
节点下添加以下配置:
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
上述配置指定了CMakeList的路径为项目根目录下的CMakeLists.txt
文件。
其次,在defaultConfig
节点下添加以下配置:
externalNativeBuild {
cmake {
cppFlags "-std=c++11"
}
}
上述配置指定了C++标准为C++11。
最后,在Android Studio的菜单中选择Build
->Make Project
,即可根据CMakeList生成构建文件并构建项目。
4. 示例
下面将以一个简单的Android应用程序为例,演示如何使用CMakeList进行构建配置。
4.1 项目结构
首先,创建一个Android项目,并在项目的app
模块下创建以下目录和文件:
- app
- src
- main
- cpp
- CMakeLists.txt
- native-lib.cpp
其中,CMakeLists.txt
为CMakeList配置文件,native-lib.cpp
为C++源文件。
4.2 CMakeList配置
在CMakeLists.txt
中添加以下内容:
cmake_minimum_required(VERSION 3.10.2)
project(MyApp)
set(CMAKE_CXX_STANDARD 11)
# 设置NDK库目录
set(NDK_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI})
# 添加动态库搜索路径
link_directories(${NDK_DIR})
# 添加源文件
add_library(native-lib SHARED native-lib.cpp)
# 链接动态库
target_link_libraries(native-lib log)
上述配置中,通过set
设置了NDK库目录为项目的jniLibs
目录;通过link_directories
添加了动态库搜索路径;通过add_library
生成动态库;通过target_link_libraries
链接动态库。
4.3 C++代码编写
在native-lib.cpp
中添加以下内容:
#include <jni.h>
#include <string>
#include <android/log.h>
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapp_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
__android_log_print(ANDROID_LOG_DEBUG, "MyApp", "Hello from native-lib");