如何将.a链接到.so并为android创建新的.so



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

如果本地预构建库是通过.aar预制库提供的,这里有一个来自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的路径。因此:
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)

相关内容

最新更新