集成Jetpack Navigation后Android项目出现构建错误求助
错误详情
.../.gradle/caches/transforms-3/61b9b29ef6aaf7fe551e73466a9c3105/transformed/material-1.7.0/res/values/values.xml:7368:4: Duplicate value for resource 'attr/animationMode' with config 'DEFAULT' and product '' Resource was previously defined here: ...-mergeDevDebugResources-87:/values/values.xml:17777: Caused by: com.android.aaptcompiler.ResourceCompilationException: Failed to compile values resource file ../build/intermediates/incremental/devDebug/mergeDevDebugResources/merged.dir/values/values.xml Caused by: java.lang.IllegalStateException: Can not add resource (com.android.aaptcompiler.ParsedResource@3f82a8ef) to table
相关配置
- Navigation版本:2.5.3
- minSdk:21
- targetSdk:33
问题原因
这个错误是由于Material Design库的多版本冲突导致的:Navigation 2.5.3会间接依赖某个版本的Material库,而你的项目中又直接或间接引入了另一个版本(比如报错里的1.7.0),两个版本同时定义了attr/animationMode资源,引发编译冲突。
解决步骤
1. 定位冲突依赖
执行Gradle命令查看项目依赖树,找出所有引入Material库的路径:
./gradlew app:dependencies --configuration debugCompileClasspath
搜索com.google.android.material:material,确认是否存在多个版本的依赖。
2. 统一Material库版本
在项目根目录的build.gradle(或settings.gradle,若使用Gradle Catalog)中强制指定所有依赖使用同一版本的Material库:
方式一:根build.gradle配置
allprojects { configurations.all { resolutionStrategy { // 强制使用1.7.0版本,可根据实际兼容情况调整 force 'com.google.android.material:material:1.7.0' } } }
方式二:Gradle Catalog(settings.gradle)配置
dependencyResolutionManagement { resolutions { eachDependency { if (requested.group == 'com.google.android.material' && requested.name == 'material') { useVersion '1.7.0' } } } }
3. 清理缓存并重新构建
执行命令清除构建缓存,再重新编译项目:
./gradlew clean ./gradlew assembleDevDebug
4. 检查本地自定义资源
如果上述操作无效,检查项目res/values/目录下的自定义资源文件(如attrs.xml),确认是否手动定义了animationMode属性,若有则删除或重命名该属性。
5. 调整Navigation版本(可选)
若统一Material版本后仍有冲突,可尝试升级Navigation版本到与Material 1.7.0兼容的版本(如2.6.0及以上),同步更新相关依赖后重新构建。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

