Динамические функции Android с DataBinding и R8

У меня проблема с использованием 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 все работает правильно, поэтому я думаю, что какое-то правило отсутствует, но я пробовал несколько конфигураций, и, к сожалению, официальной конфигурации от Google нет.

1 ответ

Эта проблема возникает, если вы используете Android Studio версии 3.2 или выше...
Причина:
из Android Studio версии 3.2+, "привязка данных v2" включена по умолчанию.
Решение:
вам необходимо включить привязку данных v1 из gradle. свойства, как показано ниже

android.databinding.enable=true

У меня это работает... надеюсь, у вас будет решение.:)

Другие вопросы по тегам