在我的 Dynamic Feature module 中使用 DataBinding 时遇到问题.
当 isMinifyEnabled = true
时,我无法生成与我的 fragment 相关的绑定(bind)对象
通常我尝试使用以下代码来做到这一点:val viewDataBinding: FragmentFeature1Binding = DataBindingUtil.inflate(inflater, layoutId, container, false)
但是 inflate()
返回的值在没有任何附加消息的情况下始终为 null。我尝试使用 FragmentFeature1Binding
扩展布局直接,但我得到了相同的结果。
当我将 fragment 移动到 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,一切都会正常工作,所以我认为缺少一些规则,但我尝试了一些配置,遗憾的是谷歌没有官方配置。
最佳答案
如果您使用的是 android studio 3.2 或更高版本,则会出现此问题...
原因:
来自android studio 3.2+, “数据绑定(bind) v2” 默认启用..
解决方案
您必须从 gradle.properties 启用数据绑定(bind) v1,如下所示
android.databinding.enable=true
它对我有用......希望你能找到解决方案。 :)
关于具有 DataBinding 和 R8 的 Android 动态功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59175153/