跨动态功能的 Android ViewBindings

Stu*_*umi 6 android android-viewbinding dynamic-feature-module

碰巧我有一个主应用程序模块

构建.gradle

    dynamicFeatures = [":myFeature"]

    viewBinding {
        enabled = true
    }
Run Code Online (Sandbox Code Playgroud)

AdroidManifest.xml

package="com.mydomain.testproject"
Run Code Online (Sandbox Code Playgroud)

使用我在整个应用程序 eq 中使用的一些常见布局: app/res/error_view.xml

我有动态特征文件

构建.gradle

    viewBinding {
        enabled = true
    }
Run Code Online (Sandbox Code Playgroud)

AdroidManifest.xml

package="com.mydomain.testproject.myFeature"
Run Code Online (Sandbox Code Playgroud)

myfeature_fragment.xml

    <include
        android:id="@+id/error_view"
        layout="@layout/error_view"
        android:visibility="gone" />
Run Code Online (Sandbox Code Playgroud)

我的特征片段.kt

binding = MyFeatureFragmentBinding.bind(view)
Run Code Online (Sandbox Code Playgroud)

问题来了。当我尝试访问binding.errorViewAS 时显示错误Cannot access class 'com.mydomain.testproject.myFeature.databinding.ErrorViewBinding'. Check your module classpath for missing or conflicting dependencies

奇怪的是,当我检查生成的MyFeatureFragmentBinding类时,它包含以下内容

  @NonNull
  public final View errorView;
Run Code Online (Sandbox Code Playgroud)

所以我想 AS 知道的比它显示给我的要多。我还发现在主模块的生成类中,原始ErrorViewBinding和 OFC 从那里可以完美地工作。

有人设法从另一个功能模块引用通用布局?
或者如何强制生成的公共视图绑定的类型?

Mos*_*ter 0

在动态模块 Gradle 文件中应用此插件后,我遇到了同样的问题

apply plugin: 'kotlin-kapt'
Run Code Online (Sandbox Code Playgroud)

然后在 android 块内启用数据绑定,如下所示

dataBinding.enabled = true
Run Code Online (Sandbox Code Playgroud)

对于像我一样使用 gradle.kts 文件的人

plugins {
id("kotlin-kapt")
}
Run Code Online (Sandbox Code Playgroud)

并在 android 块内部启用数据绑定,如下所示

// enable data binding inside module
dataBinding.apply {
    isEnabled = true
}
Run Code Online (Sandbox Code Playgroud)