可以直接在android 应用程序中link 静态库吗?
Can you link static library directly in android application?
对不起,我问的可能是愚蠢的,但我有一个关于 linking static/shared 库的问题 android.
我正在创建一个新的 C++ Native android 工作室项目。构建后,我打开 apk 文件,在 lib
文件夹中为每个 ABI 放置了库 libnative-lib.so
。 APK 的大小是 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 将用于调用本机代码。
对不起,我问的可能是愚蠢的,但我有一个关于 linking static/shared 库的问题 android.
我正在创建一个新的 C++ Native android 工作室项目。构建后,我打开 apk 文件,在 lib
文件夹中为每个 ABI 放置了库 libnative-lib.so
。 APK 的大小是 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 将用于调用本机代码。