Android CMake 编译 C++:一步步带你了解
在 Android 开发中,使用 CMake 工具来编译 C++ 代码是一个非常普遍的做法。CMake 是一个跨平台的自动化构建系统,允许开发者通过简单的配置文件生成各类 IDE 项目和 Makefile。本文将详细介绍如何在 Android 项目中使用 CMake 来编译 C++ 代码,并提供示例和流向图来帮助理解。
1. 环境准备
要开始使用 CMake 在 Android 项目中构建 C++ 代码,你需要确保以下环境正确配置:
- Android Studio 已安装
- Android NDK(Native Development Kit)已下载
- CMake 已启用(在 Android Studio 中,通常在项目构建设置中可以启用)
2. 创建新项目
2.1 创建 Android 项目
在 Android Studio 中创建一个新的应用项目,选择“Native C++”模板,这将对项目设置默认的 CMake 文件。
2.2 项目结构
创建项目后,你将看到类似于以下的项目结构:
MyApplication/
├── app/
│ ├── src/
│ ├── CMakeLists.txt // CMake 配置文件
│ └── ...
└── build.gradle
3. CMake 配置
3.1 CMakeLists.txt 文件
在 app
文件夹内,你会找到 CMakeLists.txt
文件,这是 CMake 构建的核心配置文件。以下是一个简单的 CMakeLists.txt 示例:
cmake_minimum_required(VERSION 3.4.1)
# 最小 CMake 版本
# 指定一个 C++ 库
add_library(
native-lib
SHARED
src/main/cpp/native-lib.cpp
)
# 查找 Android NDK 的库
find_library(
log-lib
log
)
# 指定库的链接
target_link_libraries(
native-lib
${log-lib}
)
在这个示例中,我们创建了一个名为 native-lib
的共享库,并指定了其源文件。
3.2 C++ 源文件
在 src/main/cpp/
文件夹下,创建一个名为 native-lib.cpp
的文件,并加入如下代码:
#include <jni.h>
#include <string>
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_stringFromJNI(JNIEnv* env, jobject) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
这段代码定义了一个 JNI 方法,用于返回一个字符串。
4. AndroidManifest.xml 修改
确保在 AndroidManifest.xml
文件中配置了 JNI 的调用:
<application
...
android:appComponentFactory="">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
5. 流程图
接下来,创建一个流程图来描述整个编译过程。
flowchart TD
A[开始] --> B[创建 Android 项目]
B --> C[编写 CMakeLists.txt]
C --> D[编写 C++ 源代码]
D --> E[修改 AndroidManifest.xml]
E --> F[构建和运行]
F --> G[完成]
6. 调用 C++ 方法
在 Java 文件中,你需要调用 C++ 方法。在 MainActivity.java
中,加入如下代码:
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("native-lib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 调用 C++ 方法
String hello = stringFromJNI();
TextView tv = findViewById(R.id.sample_text);
tv.setText(hello);
}
public native String stringFromJNI();
}
这里,我们加载了 native-lib
库,并通过 JNI 调用 stringFromJNI
方法。
7. 关系图
为了更好地理解数据表之间的关系,以下是一个简单的关系图示例。
erDiagram
USER {
int id PK "用户 ID"
string name "用户姓名"
}
MESSAGE {
int id PK "消息 ID"
string content "消息内容"
int userId FK "用户ID"
}
USER ||--o{ MESSAGE : sends
这个图表示了一个用户可以发送多条消息的关系。
8. 构建与运行
最后,构建项目并运行。在 Android Studio 中,点击 "Run" 按钮。在启动的应用界面中,你应该能看到 "Hello from C++" 的文本输出。
结尾
通过本文的介绍,你应该对如何在 Android 项目中使用 CMake 编译 C++ 有了初步的了解。CMake 不仅可以帮助你管理复杂的构建过程,还能为你的 Android 项目开辟更为广泛的可能性。希望你能在实际开发中活用这些知识,实现你的项目愿景!