【问题标题】:NoClassDefFoundError failed resolution of databinding class in base moduleNoClassDefFoundError 无法解析基本模块中的数据绑定类
【发布时间】:2026-01-20 23:00:01
【问题描述】:

我刚刚重组了我的项目以支持即时应用程序,将我的项目分成 3 个不同的模块。我已经成功部署了我的 Instant App,但经过几次测试后,我注意到一个使用数据出价的活动发生了崩溃。

我知道 DataBinding 仅在基本功能中受支持,因此我有引用它的类和基本模块中的布局。 我还添加了 ProGuard 的规则来保留数据绑定类。

这是崩溃的堆栈跟踪:

    FATAL EXCEPTION: main Process: 
        com.yopapp.yop, PID: 5516 java.lang.NoClassDefFoundError: Failed resolution of: 
Lcom/yopapp/yop/databinding/CardViewItemHeaderBinding;
    at com.yopapp.yop.a.j.a(DealDetailAdapter.java:258)
    at com.yopapp.yop.a.j.onCreateViewHolder(DealDetailAdapter.java:51)
    at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6493)
    at android.support.v7.widget.RecyclerView$Recycler.a(RecyclerView.java:5680)

Proguard 规则:

-dontwarn android.databinding.**
-keep class android.databinding.** { *; }

-dontwarn com.yopapp.yop.databinding.**
-keep class com.yopapp.yop.databinding.** { *; }

另外如果我分析APK,我可以看到com.yopapp.yop.databinding包和CardViewItemHeaderBinding类(但斜体,我不知道为什么)

我有什么遗漏的吗?

【问题讨论】:

  • 您可以向 Google 提交错误,然后在此处链接到它吗?对大家都有帮助,谢谢! issuetracker.google.com/issues/… ,他们可能需要一个示例项目来仔细查看。
  • 斜体表示它只是一个参考,而不是实际的类

标签: java android data-binding android-instant-apps


【解决方案1】:

我发现如果您在库中的 AndroidManifest.xml 中使用与您的应用程序相同的包名称,那么您的数据绑定类会发生 java.lang.NoClassDefFoundError。尝试为您的库模块使用不同的包名称。

【讨论】: