如何将 .so 文件添加到 APK 中的 lib 文件夹?

How do I add .so file to lib folder in APK?

如果我将以下内容添加到我的 cmakelists.txt 文件中:

add_library( # Sets the name of the library.
        extralib

        # Sets the library as a shared library.
        MODULE

        # Provides a relative path to your source file(s).
        extra.cpp)

并构建我的 Android 应用程序,然后 APK 将在其 'lib' 文件夹中包含 libextralib.so。在上面的例子中,'extralib' 是从源代码文件 (extra.cpp) 构建的。我如何使用预先构建的 .so 文件作为 extralib 的 'source'?

我试过了:

add_library( # Sets the name of the library.
        extralib

        # Sets the library as a shared library.
        MODULE

        # Provides a relative path to your source file(s).
        extra.so)

但 Android Studio 不喜欢这样。我收到以下错误:

CMake 错误:CMake 无法确定目标的链接器语言:extralib

我想弄清楚如何将额外的 .so 文件添加到 APK lib 文件夹(它们将在运行时动态加载),其中一些 .so 文件是从源代码构建的,而另一些是预构建的 .so文件。我知道我可以创建一个 jniLibs 文件夹并将我所有的 .so 文件放入该文件夹,但我不想这样做。我希望它全部在 cmakelists.txt 中定义。

This method 应该仍然有效:

 add_library(lib_extra SHARED IMPORTED)
 set_target_properties(lib_extra PROPERTIES IMPORTED_LOCATION
    ${your-extra-lib-location}/${ANDROID_ABI}/libextra.so)
 
 target_link_libraries(${project-lib-name} lib_extra)

确保您计划包含在应用中的每个 ABI 都有一个二进制文件 (extra.so)。构建 APK 后,您可以使用 Studio 的 build -> Analyze APK... 检查它们是否存在(或者只是解压缩 APK 文件)。