8

我在动态功能模块中使用 DataBinding 时遇到问题。

我无法生成与我的片段相关的绑定对象isMinifyEnabled = true

通常,我尝试使用此代码来执行此操作: val viewDataBinding: FragmentFeature1Binding = DataBindingUtil.inflate(inflater, layoutId, container, false) 但返回的inflate()值始终为 null 而没有任何附加消息。我尝试FragmentFeature1Binding直接使用膨胀布局,但我得到了相同的结果。

当我将片段移动到app模块中时,一切正常。

我的应用程序build.gradle.kts

android {
    compileSdkVersion(AndroidVersions.compileSdk)
    buildToolsVersion(AndroidVersions.buildTools)

    dataBinding.isEnabled = true

    defaultConfig {
        applicationId = ApplicationConfig.id
        minSdkVersion(AndroidVersions.minSdk)
        targetSdkVersion(AndroidVersions.targetSdk)
        versionCode = ReleaseVersions.versionCode
        versionName = ReleaseVersions.versionName
    }
    buildTypes {
        getByName(BuildTypes.debug) {
            isMinifyEnabled = true
            isShrinkResources = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
            buildConfigField("Long", "API_TIMEOUT_IN_SECONDS", "30l")
        }
    }

    compileOptions {
        targetCompatibility = JavaVersion.VERSION_1_8
        sourceCompatibility = JavaVersion.VERSION_1_8
    }

    dynamicFeatures = mutableSetOf(Modules.feature1)
}

我的特点1 build.gradle.kts

android {
    compileSdkVersion(AndroidVersions.compileSdk)

    dataBinding.isEnabled = true

    defaultConfig {
        minSdkVersion(AndroidVersions.minSdk)
        targetSdkVersion(AndroidVersions.targetSdk)
    }

    compileOptions {
        targetCompatibility = JavaVersion.VERSION_1_8
        sourceCompatibility = JavaVersion.VERSION_1_8
    }

    buildTypes {
        create(BuildTypes.instrumentation) {
            buildConfigField("String", "API_ENDPOINT", "\"https://api.github.com/\"")
        }

        getByName(BuildTypes.debug) {
            buildConfigField("String", "API_ENDPOINT", "\"https://api.github.com/\"")
        }

        getByName(BuildTypes.release) {
            buildConfigField("String", "API_ENDPOINT", "\"https://api.github.com/\"")
        }
    }
}

我的proguard-rules.pro

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

-keep class kotlin.Metadata {
    *;
}

-keepattributes InnerClasses
 -keep class **.R
 -keep class **.R$* {
    <fields>;
}

如果没有 R8,一切都会正常工作,所以我认为缺少一些规则,但我尝试了一些配置,遗憾的是谷歌没有官方配置。

4

1 回答 1

0

如果您使用的是 android studio 3.2 或更高版本,则会出现此问题...
原因:
从 android studio 3.2+ 版本开始,默认启用“数据绑定 v2” 。 解决方案 您必须从 gradle 启用数据绑定 v1。如下属性

android.databinding.enable=true

它对我有用......希望你能找到解决方案。:)

于 2020-01-09T08:52:32.007 回答