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_directorieslink_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");