android - Android Studio 将存根库捆绑到 APK 中
问题描述
我正在使用 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 捆绑,但不知何故它开始捆绑它。任何调试此问题的线索将不胜感激。
解决方案
尝试使用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)
推荐阅读
- c++ - 我们如何在c中制作函数指针的深层副本
- python - Fancy Ticks Foramt - 请解释这部分代码
- c++ - 如果用户想输入 x 数量的数字,我如何设法跟踪它然后结束程序?
- nlp - 为什么使用 gensim 计算 LDA 的相干分数时速度如此之慢
- python - 如何创建基于多种颜色的图例?
- assembly - 如何获得数字的最重要部分?
- amazon-web-services - 如何使用 Nuxt JS 隐藏我的 aws 密钥和秘密?
- java - 难以理解为什么子类化单例与单例的定义相矛盾?
- javascript - 在 firebase 函数中可靠地处理日期时间
- angular - 升级到 Angular8 后,AppEngine 正在使用不正确的 mime 类型提供脚本