Gradle 8.5下Android构建报错:重复META-INF/NOTICE.md文件
解决Android Gradle 8.5构建时META-INF文件冲突问题
先修正配置语法错误
你当前的packaging块写法存在问题——在resources闭包内重复使用了resources.excludes前缀,这会导致配置不生效。以下是两种正确的配置方式:
方式1:Gradle 8+ 推荐的packaging块写法
android { // ...其他项目配置 packaging { resources { pickFirsts += ['META-INF/LICENSE.txt'] excludes += [ 'META-INF/NOTICE.md', 'META-INF/LICENSE.md', 'META-INF/INDEX.LIST', 'META-INF/DEPENDENCIES', 'META-INF/io.netty.versions.properties' ] } } // ...其他项目配置 }
方式2:兼容旧版本的packagingOptions写法(Gradle 8中已标记为废弃,但部分场景仍可生效)
android { // ...其他项目配置 packagingOptions { pickFirst 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.md' exclude 'META-INF/LICENSE.md' exclude 'META-INF/INDEX.LIST' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/io.netty.versions.properties' } // ...其他项目配置 }
清理构建缓存并重新构建
配置修正后,执行以下命令彻底清理缓存并重新构建:
./gradlew clean build --refresh-dependencies
也可以手动删除项目根目录下的.gradle文件夹和模块内的build文件夹,再重新同步项目。
定位重复文件的来源依赖
如果上述步骤仍未解决问题,需要找出哪个依赖库引入了重复的META-INF/NOTICE.md:
- 执行命令导出依赖树:
./gradlew app:dependencies --configuration releaseRuntimeClasspath > dependencies.txt
(将app替换为你的模块名称)
2. 在生成的dependencies.txt文件中,搜索可能包含该文件的依赖(通常是netty、okhttp这类开源库)。
3. 找到冲突依赖后,可以通过exclude语法针对性排除该依赖下的重复文件,或者升级/替换该依赖版本。
检查项目本地资源
最后,确认项目自身的src/main/resources目录下是否手动添加过META-INF/NOTICE.md文件,如果有,直接删除即可。
内容的提问来源于stack exchange,提问作者Diego Perez
相关产品推荐
相关产品推荐

