如何将 link .a 转换为 .so 并为 android 创建新的 .so

How to link .a to .so and create new .so for android

我有一个现有的 android 项目,其中一个 .so(比如 existing.so)被打包并加载到一些 .aar(比如 existing.aar)中。 existing.so 文件公开了我的 .a (my.a) 静态库将使用的符号(函数)。如何在该特定项目中包含 my.a 文件,以便它获得指向 existing.so 的链接?新的 .so 是否应该链接 my.a 和 existing.so ?我可以在现有项目中添加 cmake 或 ndk 依赖项。

如果本机预构建库是通过 .aar 预制件提供的,这里是 link 来自 Android 开发人员的操作方法,如果没有,您需要像一个普通的 CMake 项目:

  1. 按以下顺序放置预建库:
libs/${ANDROID_PLATFORM}/${ANDROID_ABI}/existing
libs/${ANDROID_PLATFORM}/${ANDROID_ABI}/my

例如:

libs/android-28/x86_64/existing/lib/existing.so
libs/android-28/x86_64/existing/include/existing.h
libs/android-28/x86_64/my/lib/my.a
libs/android-28/x86_64/my/include/my.h
  1. 在您的项目中将路径添加到 APPEND CMAKE_FIND_ROOT_PATH。so:
list(APPEND CMAKE_FIND_ROOT_PATH libs/${ANDROID_PLATFORM}/${ANDROID_ABI}/existing)
list(APPEND CMAKE_FIND_ROOT_PATH libs/${ANDROID_PLATFORM}/${ANDROID_ABI}/my)
  1. 现在您可以在您的项目中使用它们了。所以:
find_library(existing_lib existing)
find_library(my_lib my)

add_library(project SHARED <source_files>)
target_link_libraries(project existing_lib my_lib)