NDK 高版本Gradle so导入 异常处理

环境

  • Android Studio 4.1.2
  • Gradle 6.5
  • NDK 21.1

异常信息

More than one file was found with OS independent path 'lib/armeabi/xx.so'

问题来源

  • 旧的导入方式,该方式会导致找到多个SO异常
  • 原因在于高版本Gradle工具会自动导入默认so库路径下所有文件(PS:默认so路径 jniLibs)
  • 以下导入方法会导致so重复
add_library(xxx SHARED IMPORTED)
set_target_properties(xxx PROPERTIES IMPORTED_LOCATION ${so的路径})
target_link_libraries(native-lib xxx)

解决方案

# 对应下面项目结构图

# 添加头文件路径
include_directories("../include")

# 添加编译参数 -L ,新增编译时SO搜索路径
set(CMAKE_CXX_FLAGS "-L${CMAKE_SOURCE_DIR}/../jniLibs/arm64-v8a")

# 由于SO会被默认导入,故不需要再手动导入SO,可以直接进行链接
target_link_libraries(native-lib log my_util c++_shared)
  • 项目结构图


    pkg.png

运行效果

  • jni接口


    jni.png
  • 运行结果


    log.png

你可能感兴趣的:(NDK 高版本Gradle so导入 异常处理)