第一种情况:可能是ndk的版本适配的问题,需要设置正确的ndk版本。
第二种:在app/build.gradle中添加 packagingOptions { exclude 'lib/x86/libc++_shared.so' } 添加对应的报错库。
第三种:需要修改build.gradle 文件中的jniLibs.srcDirs = [‘libs’] 这个项。
在升级Android Studio 4.0之后,进行NDK开发的时候,引入第三方动态so库,编译报错如下:
Execution failed for task ':app:mergeDebugNativeLibs'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.MergeNativeLibsTask$MergeNativeLibsTaskWorkAction
> 2 files found with path 'lib/x86/libc++_shared.so' from inputs:
- E:\Work\Code\myk_sport_star_teach\build\myk_sport_core\intermediates\library_jni\debug\jni\x86\libc++_shared.so
- C:\Users\Admin\.gradle\caches\transforms-3\69c4d5c9ec2874b600c421ebfa767f85\transformed\jetified-nanodet-1.0.0.20220815\jni\x86\libc++_shared.so
If you are using jniLibs and CMake IMPORTED targets, see
这是因为新版本Android Gradle 插件 4.0的问题。
早期版本的 Android Gradle 插件要求您使用 jniLibs 明确打包您的 CMake 外部原生 build 使用的所有预构建库。您的库可能位于模块的 src/main/jniLibs 目录中,也可能位于在 build.gradle 文件中配置的某个其他目录中:
sourceSets {
main {
// The libs directory contains prebuilt libraries that are used by the
// app's library defined in CMakeLists.txt via an IMPORTED target.
jniLibs.srcDirs = ['libs']
}
}
有了 Android Gradle 插件 4.0,上述配置不再是必需的,并且会导致构建失败。外部原生 build 现在会自动打包这些库,因此使用 jniLibs 明确打包库会导致重复。
解决方式
将第三方动态库移到libs目录下,并去掉配置项jniLibs.srcDirs = [‘libs’]。或改为:jniLibs.srcDirs = [],新版的Gradle已经不需要这些配制了,jnilibs目录也用不到了。