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

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

提问人:user1884325 提问时间:2/22/2022 更新时间:2/22/2022 访问量:1729

问:

如果我将以下内容添加到我的 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 的“源”?

我试过了:

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中定义所有内容。

Android cmake android-ndk android-gradle-plugin

评论


答:

1赞 Gerry 2/22/2022 #1

此方法仍然有效:

 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检查它们是否存在(或只是解压缩APK文件)。build -> Analyze APK...