Android Studio引入JavaCV依赖构建Bundle时遇‘lib’目录名报错
解决JavaCV依赖导致Android Bundle构建失败的问题
引入以下JavaCV依赖后构建Android Bundle时失败:
implementation 'org.bytedeco:javacv:1.4.4' implementation 'org.bytedeco.javacpp-presets:opencv:4.0.1-1.4.4:android-arm64' implementation 'org.bytedeco.javacpp-presets:opencv:4.0.1-1.4.4:android-arm' implementation 'org.bytedeco.javacpp-presets:opencv:4.0.1-1.4.4:android-x86'
报错信息:
Execution failed for task ':app:packageDebugBundle'. > A failure occurred while executing com.android.build.gradle.internal.tasks.PackageBundleTask$BundleToolWorkAction > File 'root/lib/arm64-v8a/include/cvkernels.h' uses reserved file or directory name 'lib'.
问题原因
Android App Bundle规范里,lib目录是专门用于存放Native库(.so文件)的保留目录,而旧版本JavaCV依赖包的lib目录下包含了头文件(如.h)等非Native库文件,违反打包规范导致构建失败。
解决方案
方案一:升级JavaCV及OpenCV Presets版本
旧版本JavaCV存在打包结构问题,升级到1.5.x及以上的稳定版本即可修复该问题,示例依赖如下:
implementation 'org.bytedeco:javacv:1.5.8' implementation 'org.bytedeco.javacpp-presets:opencv:4.5.5-1.5.8:android-arm64' implementation 'org.bytedeco.javacpp-presets:opencv:4.5.5-1.5.8:android-arm' implementation 'org.bytedeco.javacpp-presets:opencv:4.5.5-1.5.8:android-x86'
方案二:过滤依赖中的非合规文件
如果无法升级版本,可在App模块的构建配置中添加打包规则,排除lib目录下的非.so文件:
Groovy DSL(build.gradle)
android { // 其他已有配置... packagingOptions { exclude 'lib/**/*.h' exclude 'lib/**/*.hpp' exclude 'lib/**/*.cmake' } }
Kotlin DSL(build.gradle.kts)
android { // 其他已有配置... packagingOptions { exclude("lib/**/*.h") exclude("lib/**/*.hpp") exclude("lib/**/*.cmake") } }
内容的提问来源于stack exchange,提问作者Zee Zero
相关产品推荐
相关产品推荐

