返回
在 Android 项目中交叉编译并导入 NDK SO 库:一步一步指南
Android
2024-01-12 02:54:56
导言
本指南将逐步引导您在 Android 项目中交叉编译 NDK(Native Development Kit)SO(共享对象)库并进行导入。我们将在 Linux 和 Mac 环境中分别编译 SO 库。
环境
Linux
- Red Hat Enterprise Linux 8.6
Mac
- macOS Mojave 版本 10.14.6
步骤
1. 创建 Android 项目
- 创建一个新的 Android Studio 项目。
- 在
build.gradle
文件的defaultConfig
部分添加以下内容:
externalNativeBuild {
ndkBuild {
path "src/main/jni/Android.mk"
}
}
2. 创建 NDK 目录
- 在 Android Studio 项目目录中创建一个名为
jni
的目录。 - 在
jni
目录中创建两个文件:Application.mk
和Android.mk
。
3. 创建 Application.mk 文件
- 在
Application.mk
文件中添加以下内容:
APP_ABI := armeabi-v7a armeabi
4. 创建 Android.mk 文件
- 在
Android.mk
文件中添加以下内容:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native-lib
LOCAL_SRC_FILES := hello.c
include $(BUILD_SHARED_LIBRARY)
5. 编写 C 代码
- 在
jni
目录中创建一个名为hello.c
的文件。 - 在
hello.c
文件中添加以下 C 代码:
#include <jni.h>
#include <string.h>
JNIEXPORT jstring JNICALL
Java_com_example_nativedemo_NativeLib_stringFromJNI(JNIEnv *env, jobject thiz) {
return (*env)->NewStringUTF(env, "Hello from JNI!");
}
6. 编译 SO 库
Linux
- 在终端中导航到项目目录。
- 运行以下命令:
ndk-build
Mac
- 在终端中导航到项目目录。
- 运行以下命令:
ndk-build V=1
7. 将 SO 库导入 Android 项目
- 在 Android Studio 中,打开
app
模块的build.gradle
文件。 - 在
dependencies
部分添加以下内容:
implementation project(':native-lib')
8. 在 Java 代码中使用 SO 库
- 在 Java 代码中,使用以下代码加载和使用 SO 库:
System.loadLibrary("native-lib");
NativeLib nativeLib = new NativeLib();
String hello = nativeLib.stringFromJNI();
Log.d("MainActivity", hello);
结论
通过按照本指南中的步骤操作,您可以在 Android 项目中成功交叉编译并导入 NDK SO 库。这对于将本机代码集成到 Android 应用程序中非常有用。