尝试将 Gradle 插件从 3.5.1 迁移到 3.5.2 时数据绑定出现 StackOverflowError

StackOverflowError in databinding while trying to migrate Gradle plugin from 3.5.1 to 3.5.2

我的目标是将 android gradle 插件从 3.5.1 迁移到 3.5.2。

但是,一旦我这样做,构建就会失败并出现以下错误:

error: cannot generate view binders java.lang.WhosebugError
    at android.databinding.tool.expr.Expr.resolveListeners(Expr.java:209)
    at android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)
    at android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)
    at android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)
    at android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)
    at android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)
    at android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)
    at android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)
    at android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)

明明说是和databinding有关,但是stacktrace真的很差。我尝试应用额外的编译器参数来获得一些其他见解,但没有成功。

有人遇到过同样的问题吗?有什么建议吗?

一旦您在 xml 文件中调用 ObservableField.get(),AGP 3.5.2 似乎会失败。请在 Google 问题跟踪器中查看 this comment 类似问题。

您可以尝试从您的代码库中删除 .get() 用法,这是完全安全的。

编辑: 如果您使用的是 LiveData,请确保您没有在任何 XML 文件中使用 .getValue()

我在 AGP 3.4.2 上收到此警告:

Do not explicitly call 'get()' on ObservableFields or 'getValue()' on LiveData in an expression. This support will be removed soon.

似乎在 AGP 3.5.2 中删除了此支持,changelog 上没有提及。