项目指南:在 Android 9 中使用 NDK
Android NDK(Native Development Kit)是一套工具,使用它可以将部分代码用 C/C++ 编写,以提高性能或重用已有的代码。对于刚入门的开发者来说,了解如何在 Android 9 中使用 NDK 是至关重要的。本文将帮助你理解整个流程,包括选择合适的 NDK 版本并在 Android Studio 中配置它。
整体流程
下面是实现“在 Android 9 中使用 NDK”的流程,简单明了,可以帮助你更好地理解步骤。
步骤 | 描述 |
---|---|
1 | 确认 Android 9 的 SDK 版本 |
2 | 下载相应的 NDK 版本 |
3 | 在 Android Studio 中配置 NDK |
4 | 创建并编写 C/C++ 代码 |
5 | 设置 CMake 文件 |
6 | 构建项目并运行 |
7 | 调试原生代码 |
详细步骤
步骤 1: 确认 Android 9 的 SDK 版本
首先,你需要确认你的 Android SDK 是否支持 Android 9(API 28)。你可以在 Android Studio 的 SDK 管理器中查看。
打开 File
-> Settings
(在 Mac 上是 Android Studio
-> Preferences
),然后在左侧选择 Appearance & Behavior
-> System Settings
-> Android SDK
。在 SDK Platforms
标签页下,确保 "Android 9.0 (Pie)" 被选中。
步骤 2: 下载相应的 NDK 版本
你可以从 [Android NDK Releases]( 页面下载 NDK。对于 SDK 28,建议使用支持 Android 9 的 NDK 版本,如 r19c 或更高版本。可以通过 SDK Manager 下载 NDK,路径为 SDK Tools
下选择 NDK。
步骤 3: 在 Android Studio 中配置 NDK
配置 NDK 需要在 build.gradle
文件中添加相关配置。以下是相关代码:
android {
...
defaultConfig {
...
externalNativeBuild {
cmake {
cppFlags "-std=c++11" // 使用 C++11 标准
}
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt" // 指定 CMake 文件路径
}
}
}
- 在
externalNativeBuild
块中指定 CMake 生成本地代码的方式。
步骤 4: 创建并编写 C/C++ 代码
创建一个文件夹,通常命名为 jni
或 cpp
,用于存放 C/C++ 代码。在此文件夹中创建示例 C++ 文件native-lib.cpp
。
#include <jni.h>
#include <string>
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()); // 将 C++ 字符串转换为 JNI 字符串
}
- 这个函数从 JNI 调用,并返回一个字符串。
步骤 5: 设置 CMake 文件
创建 CMakeLists.txt
文件并添加以下内容:
cmake_minimum_required(VERSION 3.4.1) // 指定最小的 CMake 版本
add_library( // 创建库
mylib // 库名
SHARED // 共享库
native-lib.cpp) // 源文件
find_library( // 查找 Android 日志库
log-lib
log)
target_link_libraries( // 链接库
mylib
${log-lib}) // 日志库
- 在 CMake 文件中配置库名称和源文件路径。
步骤 6: 构建项目并运行
在 Android Studio 中,点击“Build”按钮,然后选择“Rebuild Project”。构建完成后运行应用程序。在 MainActivity.java
中加载本地库并调用本地方法:
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("mylib"); // 加载名为 mylib 的本地库
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = findViewById(R.id.sample_text);
textView.setText(stringFromJNI()); // 调用本地方法
}
public native String stringFromJNI(); // 声明本地方法
}
步骤 7: 调试原生代码
要调试原生代码,确保在 CMakeLists.txt
文件中启用调试信息。可以通过在 cppFlags
中添加 -g
和 -DDEBUG
来实现:
cppFlags "-std=c++11 -g -DDEBUG" // 启用调试信息
关系图
为了直观了解项目结构,使用 ER 图表示 Android 项目与 C++ 文件的关系。如下所示:
erDiagram
PROJECT {
string application
string java_code
string native_lib
}
PROJECT ||--o{ native_lib : uses
native_lib ||--o{ java_code : calls
流程图
下面是工作流程的图示表示,帮助更好地理解步骤之间的关系。
flowchart TD
A[确认 Android 9 的 SDK 版本] --> B[下载相应的 NDK 版本];
B --> C[在 Android Studio 中配置 NDK];
C --> D[创建并编写 C/C++ 代码];
D --> E[设置 CMake 文件];
E --> F[构建项目并运行];
F --> G[调试原生代码];
结尾
在 Android 9 中使用 NDK 的流程是相对简单的,但对新手开发者来说需要一定的学习和实践。掌握了上述步骤后,你将能够编写高效的原生代码,并将其集成到 Android 应用中。这一技能的掌握不仅能提升你的开发能力,还能帮助你在 Android 开发的旅程中迈出坚实的一步。不断实践与探索,期待你在未来的项目中取得更好的成绩!