使用debugImplementation引入fragment-testing:1.3.3时导航XML报@anim无法解析是否为Bug
问题定性
该现象不属于AndroidX核心框架的功能性Bug,是androidx.fragment:fragment-testing:1.3.3版本的已知依赖传递与资源索引优先级设计缺陷,不引入该测试依赖时资源解析链路完全正常,因此不会触发同类报错。
报错触发的核心逻辑
androidx.fragment:fragment-testing:1.3.3会无差别传递引入对应版本的androidx.navigation:navigation-testing测试依赖,该依赖在debug源集的资源打包阶段,会将自身携带的资源索引优先级前置到主源集、正式导航依赖的资源索引之前- 导航XML中引用的
@anim/...类过渡动画资源,原本需要从main源集、正式导航库的资源目录中查找,被测试依赖的前置索引覆盖后,编译器无法匹配到对应资源路径,就会抛出「无法解析符号」的编译报错 - 不引入该测试依赖时,不存在额外的前置资源索引层,资源查找会按照默认优先级从main源集→正式第三方依赖逐级匹配,因此问题不会复现
可落地的解决方案
- 优先升级
androidx.fragment:fragment-testing至1.4.0及以上版本,官方在该版本中已调整测试依赖的资源打包规则,不再会前置测试资源索引覆盖正式资源 - 如果因为项目SDK版本、编译配置限制必须使用1.3.3版本,可在依赖声明中排除冲突的传递导航测试依赖,写法如下:
debugImplementation("androidx.fragment:fragment-testing:1.3.3") { // 排除会覆盖资源索引的navigation测试传递依赖 exclude group: "androidx.navigation", module: "navigation-testing" } - 若仅为Android Studio本地缓存导致的误报,可执行
Build > Clean Project后重新编译验证,排除本地索引失效导致的假报错
内容的提问来源于stack exchange,提问作者Botond Sulyok
相关产品推荐
相关产品推荐

