我在使用DataBinding时遇到了问题,这与我的动态特性模块有关。
isMinifyEnabled = true
时,我无法生成与我的片段相关的绑定对象。
通常情况下,我尝试使用以下代码来完成:
val viewDataBinding: FragmentFeature1Binding = DataBindingUtil.inflate(inflater, layoutId, container, false)
但是inflate()
返回的值始终为空,并且没有任何其他信息。我尝试直接使用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 没有官方配置。