环境
- 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)
-
项目结构图
运行效果
-
jni接口
-
运行结果