每次代码更改时都会重新生成 DataBindingInfo.java

Posted

技术标签:

【中文标题】每次代码更改时都会重新生成 DataBindingInfo.java【英文标题】:DataBindingInfo.java being regenerated at every code change 【发布时间】:2018-09-26 10:33:12 【问题描述】:

我正在开发一个相当大的多模块 android 项目,该项目使用 Data Binding、Dagger 2 和 Java 与 Kotlin 混合。

在项目“代码”文件(.java 和 .kt 文件,包括活动、自定义类等)稍有更改后,构建时间就会很长(最多 2 分钟)。即使我添加新行之类的更改或修改注释中的一个字符,也会发生这种情况。

我确实使用 --info 参数运行了 Gradle 脚本并得到了以下提示,它“挂起”了以下任务:

任务 ':AppName:kaptDebugKotlin' 的构建缓存键是 1a3a53e5f9b0934ab50a25c0133055f2 任务的最新检查 ':AppName:kaptDebugKotlin' 耗时 0.0 秒。它不是最新的 因为:输入属性“源”文件 /Users/username/Android/project-directory/AppName/build/generated/source/dataBinding/debug/android/databinding/layouts/DataBindingInfo.java 已经改变。输入属性“源”文件 /Users/username/Android/project-directory/AppName/src/main/java/com/package/to/my/activity/SomeActivity.java 变了。

生成的 DataBindingInfo.java 文件只包含一个 buildId:

package android.databinding.layouts;

import android.databinding.BindingBuildInfo;

@BindingBuildInfo(buildId="23567c57-d3c8-4999-bc79-6211351c7d89")
public class DataBindingInfo 

并且每次代码有任何变化时,buildId 哈希值都会发生变化。

该项目使用 Crashlytics,但我为调试构建禁用了它。

这种行为的原因可能是什么?

编辑:即使 Android Studio 关闭并且我在外部编辑器中进行更改并从命令行运行构建,也会在项目中重新生成 buildId。

【问题讨论】:

您是否尝试过启用Reference Code generated from compiler 选项?转到设置 -> 编辑器 -> 数据绑定 -> 从编译器生成的参考代码 -> 应用然后重新启动您的 Android 工作室 谢谢@Sagar 我试过了,同样的事情正在发生。这个问题在没有 Android Studio 参与的情况下也会发生,而我在外部编辑器中修改文件并从命令行构建它。 【参考方案1】:

您可以使用以下代码禁用 Android Gradle 的自动 buildId 更新以进行调试(或其他调试变体,如果需要)。

android 
    ...
    buildTypes 
        debug 
            ext.alwaysUpdateBuildId = false
            ...
        
    
  

【讨论】:

已经在项目中设置,不幸的是在这种特殊情况下没有帮助......

以上是关于每次代码更改时都会重新生成 DataBindingInfo.java的主要内容,如果未能解决你的问题,请参考以下文章

具有版本控制的 HDF5 文件 (h5py) - 每次保存时都会更改哈希

为啥eclipselink每次重新启动时都会消耗整个allocationSize?

每次重新启动时都会重置 MAMP 配置设置

长寿命的多播 Observable,每次订阅时都会重新订阅其源

Flutter Page 每次在导航弹出时都会重新加载

每次更改页面时都会调用 React useEffect (with []) (React Router)