如何在Android中使用*.a库?

How to use *.a library in Android?

我想在我的应用程序中使用 herumi / bls 库。我已经按照他的文档成功编译了库并得到了一个文件 armeabi-v7a/libbls384_256.a.

我猜这与 *.so 库不一样,我不能在 JNI 中直接使用这个库。我想我必须创建自己的本机代码来导入 libbls384_256.a,而不是这个。方法正确吗?

在我的项目中使用我自己的C++代码没有问题,这部分已经在不同的手册中有很好的描述。但我不知道如何使用 Android Studio、Gradle 和 JNI 将 libbls384_256.a 导入我的本机代码。

如何在 Android 的本机代码中包含 *.a 库?

就像你说的,你应该编写一个链接到预建静态库的共享库。共享库应该包含你想从 Java 调用的导出函数,这些函数又可以调用静态库中的函数。

如果您使用 nkdBuild,您将使用 PREBUILT_STATIC_LIBRARY 规则,然后将库添加到共享库的 LOCAL_STATIC_LIBRARIES。参见 https://developer.android.com/ndk/guides/prebuilts

如果您使用的是 CMake,您会执行以下操作:

add_library(bls384_256 STATIC IMPORTED GLOBAL)
set_target_properties(bls384_256
    PROPERTIES
    IMPORTED_LOCATION the/path/to/libbls384_256.a
    INTERFACE_INCLUDE_DIRECTORIES the/path/to/the/bls384_256/api/headers
)