可以直接在android 应用程序中link 静态库吗?

Can you link static library directly in android application?

对不起,我问的可能是愚蠢的,但我有一个关于 linking static/shared 库的问题 android.

我正在创建一个新的 C++ Native android 工作室项目。构建后,我打开 apk 文件,在 lib 文件夹中为每个 ABI 放置了库 libnative-lib.soAPK 的大小是 3.580 KB

但是如果我在 CMakeLists.txt 内部进行更改以构建原生库,例如 Static 库,那么现在我得到了这个:

add_library(native-lib
             STATIC
             native-lib.cpp)

构建APK时,找不到静态库(libnative-lib.a)。 apk 中没有 lib 文件夹。此外,大小为 2.836 KB

有人可以解释一下(或给我 link 以获取更多信息)图书馆在 STATIC 构建中的什么位置?

然后在 运行 如果我 link static:

我得到错误
No implementation found for java.lang.String com.example.myapplication.MainActivity.stringFromJNI() 

您不能在 Android 应用程序中直接使用 本机 静态库。

Android 用户 space 基本上是一个 Java(或更准确地说 Dalvik 虚拟机)。 所以所有 user-facing 应用程序必须用 Java 或 Kotlin 编写(它们都编译为 Dalvik 字节码)。

静态 C/C++ 库必须 link 到要使用的 C/C++ 可执行文件或动态库中。它们不能通过 Linux 或 Android.

直接加载

由于 Android 应用程序中没有 C/C++ 可执行文件,因此将静态库与 Android 应用程序一起使用的唯一方法是 link它带有一个可以通过 Java Native Interface.

加载的动态库 (*.so)

由于 JNI 使用系统加载程序来加载库,它只能加载动态库,并且只能加载具有正确命名约定的导出函数的动态库,以便它们可以与 Java class 将用于调用本机代码。