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 [关闭]