📌  相关文章
📜  如何在 Android Studio 中包含 *.so 库?(1)

📅  最后修改于: 2023-12-03 15:24:06.179000             🧑  作者: Mango

如何在 Android Studio 中包含 *.so 库?

在 Android 开发中,经常需要使用第三方的 *.so 库文件。本文将介绍如何在 Android Studio 中包含 *.so 库。

方式一:直接将 *.so 文件放入 libs 目录

如果你已经拥有 *.so 库文件,那么只需要将文件直接放入 Android 工程目录中的 libs 目录下即可。

  1. 在 Android Studio 中打开你的工程。
  2. 在项目结构中展开 app 目录,然后右键点击 libs 目录并选择“Show in Explorer”(或“Reveal in Finder”)。
  3. 将你的 *.so 文件复制到这个目录中。

将 .so 文件放入 libs 目录

由于 *.so 库文件的名称通常较为复杂,因此建议你将文件名更改为更容易识别的名称,例如:libmy-library.so

方式二:使用 CMakeLists.txt 文件

许多 Android 应用程序包含 C++ 代码,因为 C++ 可以提供更高的性能和更多的灵活性。在这种情况下,你需要使用 CMake 构建系统添加 native 原生支持。

  1. 在 Android Studio 中创建一个新的 C++ 项目或打开一个包含 C++ 代码的项目。
  2. app 模块下创建一个名为 CMakeLists.txt 的文件,如果该文件已存在,则直接编辑。
  3. 在 CMake 文件中添加如下代码:
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

方式三:使用 Android.mk 文件
  1. 在 Android Studio 中创建一个新的 C++ 项目或打开一个包含 C++ 代码的项目。
  2. app/src/main/jni 目录下创建一个名为 Android.mk 的文件,如果该文件已存在,则直接编辑。
  3. 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 库

在应用程序中使用 *.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 库并以最高的性能运行你的应用程序。