Динамические функции 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
У меня это работает... надеюсь, у вас будет решение.:)