首页 > 解决方案 > 如何调查为什么 gradle build 使用缓存的资源 ID

问题描述

如果有一个 gradle (5.4.1) 项目(插件 3.4.1) 有两种风格 (mainother) 使用相同的sourceSets. 我在重命名资源 ID(在布局 XML 中)时遇到了一个问题。以下是观察结果:

  1. Android Studio 3.4.1 没有显示任何错误并且按预期工作,即我可以从 kotlin 代码单击到布局 xml 中的 id。

  2. 重建main风味也可以按预期工作(没有编译错误)。

  3. 重新other构建风味会为新 ID 提供“未解析的引用”编译错误。Gradleclean没有帮助。但是,org.gradle.caching=false在项目级别设置gradle.properties确实有效(在 Gradle 同步、清理、重建之后)。这解释了为什么clean在启用缓存时没有帮助。

仔细检查该R.java文件,它似乎使用了一些相当旧的项目状态的 ID(可能来自存储在用户主目录中的 gradle 缓存)。现在,我可以只删除 gradle 缓存,但我宁愿找出资源 ID 更改未正确处理的原因。无论 Android Studio 以何种方式在后台运行构建,都可以正常工作,只是在执行构建/运行等时不行。

所有这些调查都需要大量的试验和错误:gradle.properties一一切换各种设置以查看导致问题的设置,而我仍然无法找到问题的根本原因。

解决此类问题的最佳方法是什么,或者反复试验是唯一的方法?

标签: androidgradleandroid-resources

解决方案


推荐阅读