Android Studio 将存根库捆绑到 APK 中

Posted

技术标签:

【中文标题】Android Studio 将存根库捆绑到 APK 中【英文标题】:Android Studio is bundling stubbed library into the APK 【发布时间】:2021-02-12 04:36:45 【问题描述】:

我正在使用 android Studio 构建一个原生 C++ 项目。有一个依赖库(我们称之为 lib.so),它需要与 JNI 库链接以解析它的一些符号。但是,我不希望将此库捆绑到 APK 中,因为这是一个存根库并且仅用于链接目的。我要运行构建的 APK 的 Android 设备上已经存在具有正确符号定义的正确 lib.so。

我正在导入存根库 lib.so 以与 JNI 库链接为:

add_library(lib SHARED IMPORTED) set_target_properties(lib.so PROPERTIES IMPORTED_LOCATION "location_of_lib.so")

add_dependencies(native-jni lib) target_link_libraries(native-jni lib)

这样 APK 编译成功,但库被捆绑到 APK 中。

我使用的是 AS 4.0.1、NDK r19c、CMake 3.17。同一个项目曾经按预期工作,即没有将库 lib.so 与 APK 捆绑在一起,但不知何故它开始捆绑它。 任何调试此问题的线索将不胜感激。

【问题讨论】:

【参考方案1】:

尝试为此使用find_library。将您预先构建的 lib.so(至少是 liba.so 的坏名)放到某个路径并将其添加到 CMAKE_FIND_ROOT_PATH

list(APPEND CMAKE_FIND_ROOT_PATH $PREBUILT_LIBS_DIR/$ANDROID_PLATFORM/$ANDROID_ABI/a)

它的外观示例:

~/my-proj/prebuilt-libs/android-28/x86/a/lib/liba.so

然后找到库并链接它:

find_library(lib-a a)
target_link_libraries(native-jni lib-a)

【讨论】:

以上是关于Android Studio 将存根库捆绑到 APK 中的主要内容,如果未能解决你的问题,请参考以下文章

从 Eclipse 导入到 Android Studio:找不到捆绑消息。AndroidJpsBundle,语言环境 pl_PL

Android Studio 运行时错误存根!在 com.amazon.device.messaging.ADMMessageReceiver.<init>()

Android Studio 将 androidx 迁移到 android 8.1 [关闭]

将支持库添加到 Android Studio 项目

将 pebblekit 库添加到 android studio [重复]

如何将 okhttp 库导入到 android studio?