Android Studio 4.0编译报错More than one file was found with OS independent path

518 阅读1分钟

报错原因

在升级Android Studio 4.0之后,进行NDK开发的时候,引入第三方动态so库,编译报错如下:

Execution failed for task ':myplayer:mergeDebugNativeLibs'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > More than one file was found with OS independent path 'lib/arm64-v8a/libavformat-57.so'.

这是因为新版本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']。新版的Gradle已经不需要这些配制了,jnilibs目录也用不到了。

参考资料: Android Gradle插件