使用 Android NDK 编译库的入门指南
在 Android 开发中,使用 NDK(Native Development Kit)可以帮助我们编写高性能的代码,特别是当我们需要使用 C/C++ 进行复杂运算时。对于初学者,NDK 的使用可能会让人感到困惑。本文将带你详细了解如何使用 Android NDK 编译库,且逐步展示实现过程。
整体流程
下面是使用 Android NDK 编译库的基本步骤:
步骤 | 描述 |
---|---|
1. 安装 NDK | 在 Android Studio 中安装 NDK |
2. 创建项目 | 创建新的 Android 项目 |
3. 配置 CMake | 创建和配置 CMakeLists.txt 文件 |
4. 编写 C/C++ 代码 | 实现你的库的功能 |
5. 写 Java 接口 | 使用 JNI(Java Native Interface)与 Java 代码交互 |
6. 构建项目 | 使用 Gradle 构建项目 |
7. 测试库 | 在 Android 模拟器或设备上测试应用 |
接下来,我们将详细说明每一步。
1. 安装 NDK
在 Android Studio 中,你可以通过以下步骤安装 NDK:
- 打开 Android Studio。
- 点击
File
>Settings
(或 MacOS 上的Android Studio
>Preferences
)。 - 在左侧面板中,选择
Appearance & Behavior
>System Settings
>Android SDK
。 - 点击
SDK Tools
标签页,勾选NDK (Side by side)
,然后点击OK
。
2. 创建项目
创建一个新的 Android 项目,你可以选择 “Empty Activity” 模板:
- 打开 Android Studio。
- 点击
Create New Project
。 - 选择
Empty Activity
进行项目配置。 - 输入项目名称,包名,选择存储位置,然后点击
Finish
。
3. 配置 CMake
在项目根目录下创建一个名为 CMakeLists.txt
的文件,以下是一个基本的 CMake 列表文件示例:
cmake_minimum_required(VERSION 3.4.1)
# 定义库的名称和源文件
add_library(native-lib SHARED native-lib.cpp)
# 查找 log 库
find_library(log-lib log)
# 将 log 库链接到你的库
target_link_libraries(native-lib ${log-lib})
注释解释:
cmake_minimum_required
: 指定 CMake 的最低版本要求。add_library
: 定义一个名为native-lib
的共享库,并指定其源文件。find_library
: 查找 Android 的日志库log
。target_link_libraries
: 将查找到的日志库链接到native-lib
。
在 app
模块的 build.gradle
中配置 CMake:
android {
...
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
...
}
注释解释:
externalNativeBuild
:配置原生构建工具,这里使用 CMake。path
: 指定 CMakeLists.txt 文件的位置。
4. 编写 C/C++ 代码
在 app/src/main/cpp
目录下创建一个名为 native-lib.cpp
的文件,并添加以下代码:
#include <jni.h>
#include <string>
// 实现 native 方法
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapp_MainActivity_stringFromJNI(JNIEnv *env, jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
注释解释:
JNIEXPORT
和JNICALL
: 定义 JNI 函数的相关宏。Java_com_example_myapp_MainActivity_stringFromJNI
: JNI 函数名称,需遵循特定命名规则。env
: 指向 JNI 环境的指针。NewStringUTF
: 用于返回一个新的 Java 字符串对象。
5. 写 Java 接口
在你的主活动 MainActivity.java
中,添加以下代码:
public class MainActivity extends AppCompatActivity {
// 加载库
static {
System.loadLibrary("native-lib");
}
// 声明本地方法
public native String stringFromJNI();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 使用本地方法
TextView tv = findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
}
}
注释解释:
System.loadLibrary
: 加载 NDK 编译的库。public native String stringFromJNI
: 声明本地方法,供 Java 调用。- 在
onCreate
方法中调用本地方法,并将返回的字符串设置到TextView
。
6. 构建项目
在 Android Studio 中点击 Build
> Rebuild Project
,这将会编译你的 C/C++ 代码并生成对应的库。
7. 测试库
通过模拟器或真实设备运行项目,确保在 UI 上显示的文本是 "Hello from C++"。
以下是全流程的旅行图,帮助你更好理解:
journey
title 使用 Android NDK 编译库
section 准备工作
安装 NDK: 5: 成功
section 创建项目
创建 Android 项目: 5: 成功
section 配置 CMake
创建 CMakeLists.txt: 5: 成功
section 编写代码
编写 C/C++ 代码: 5: 成功
编写 Java 接口: 5: 成功
section 构建与测试
构建项目: 5: 成功
测试库: 5: 成功
结尾
通过本教程,你已经学习了如何使用 Android NDK 编译库,从安装 NDK 到创建 CMake 配置,再到编写 C/C++ 代码和 Java 接口。随着你对 NDK 的深入了解,能够将更多复杂的功能集成到你的 Android 应用中。不要停下探索的脚步,继续发掘 NDK 的潜力,构建更高效的应用吧!如果在实施过程中遇到问题,可以随时查阅相关文档或寻求社区的帮助。祝你编程愉快!