📅  最后修改于: 2023-12-03 15:24:06.179000             🧑  作者: Mango
在 Android 开发中,经常需要使用第三方的 *.so 库文件。本文将介绍如何在 Android Studio 中包含 *.so 库。
如果你已经拥有 *.so 库文件,那么只需要将文件直接放入 Android 工程目录中的 libs
目录下即可。
app
目录,然后右键点击 libs
目录并选择“Show in Explorer”(或“Reveal in Finder”)。由于 *.so 库文件的名称通常较为复杂,因此建议你将文件名更改为更容易识别的名称,例如:libmy-library.so
。
许多 Android 应用程序包含 C++ 代码,因为 C++ 可以提供更高的性能和更多的灵活性。在这种情况下,你需要使用 CMake 构建系统添加 native 原生支持。
app
模块下创建一个名为 CMakeLists.txt
的文件,如果该文件已存在,则直接编辑。add_library( my-jni-lib SHARED IMPORTED )
set_target_properties(
my-jni-lib
PROPERTIES IMPORTED_LOCATION
${PROJECT_SOURCE_DIR}/libs/armeabi-v7a/libmy-jni-lib.so
)
在这个例子中,我们假设库文件名为 libmy-jni-lib.so
。
app/src/main/jni
目录下创建一个名为 Android.mk
的文件,如果该文件已存在,则直接编辑。Android.mk
文件中添加如下代码:LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := my-jni-lib
LOCAL_SRC_FILES := $(LOCAL_PATH)/my-jni-lib.cpp
include $(BUILD_SHARED_LIBRARY)
在应用程序中使用 *.so 库非常简单,只需使用系统提供的 JNI 函数库即可。
#include <jni.h>
#include <string>
extern "C" {
JNIEXPORT jstring JNICALL
Java_com_example_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
}
在你的 Java 代码中,只需加载 *.so 库并调用原生函数即可:
static {
System.loadLibrary("my-library");
}
...
public native String stringFromJNI();
本文介绍了三种不同的方式来在 Android Studio 中包含 *.so 库文件。无论你是打算使用现有的库文件还是构建自己的 C++ 库,这些技巧都可以帮助你快速集成 native 库并以最高的性能运行你的应用程序。