Paw*_*dio 8 android android-databinding android-r8 dynamic-feature-module
我在动态功能模块中使用 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)
}
Run Code Online (Sandbox Code Playgroud)
我的特点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/\"")
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的 proguard-rules.pro
-dontwarn android.databinding.**
-keep class android.databinding.** { *; }
-keep class kotlin.Metadata {
*;
}
-keepattributes InnerClasses
-keep class **.R
-keep class **.R$* {
<fields>;
}
Run Code Online (Sandbox Code Playgroud)
没有 R8,一切正常,所以我认为缺少一些规则,但我尝试了很少的配置,遗憾的是没有来自 Google 的官方配置。
如果您使用 android studio 版本 3.2 或更高版本,则会出现此问题...
原因:
从 android studio 版本 3.2+ 开始,默认启用“数据绑定 v2” 。 解决方案
您必须从 gradle 启用数据绑定 v1。属性如下
android.databinding.enable=true
Run Code Online (Sandbox Code Playgroud)
它对我有用...希望你能找到解决方案。:)
| 归档时间: |
|
| 查看次数: |
1013 次 |
| 最近记录: |