You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

切换Kotlin后不同SourceSet(构建变体)致DataBinding编译失败

解决Kotlin+Gradle 8.1.1下构建变体BuildB的DataBinding生成问题

1. 验证SourceSet配置正确性

检查模块级build.gradle(或build.gradle.kts)中BuildB的SourceSet是否正确关联对应res目录:

Groovy DSL示例:

android {
    sourceSets {
        buildA {
            res.srcDirs = ['src/buildA/res']
        }
        buildB {
            res.srcDirs = ['src/buildB/res']
        }
    }
}

Kotlin DSL示例:

android {
    sourceSets {
        named("buildA") {
            res.srcDirs("src/buildA/res")
        }
        named("buildB") {
            res.srcDirs("src/buildB/res")
        }
    }
}

同时确认BuildB的res目录下存在目标布局文件(如splash_screen.xml),且布局根标签为<layout>(启用DataBinding的必要条件)。

2. 确保全局启用DataBinding且变体未单独禁用

在模块级build配置中全局开启DataBinding,避免针对BuildB单独关闭该功能:

Groovy DSL示例:

android {
    buildFeatures {
        dataBinding true
    }
}

Kotlin DSL示例:

android {
    buildFeatures {
        dataBinding = true
    }
}

检查是否存在buildB { buildFeatures.dataBinding = false }这类配置,如有则删除。

3. 调整任务执行顺序(Gradle 8.x兼容性修复)

Gradle 8.x对任务依赖顺序的校验更严格,需确保Kotlin编译任务在DataBinding类生成之后执行,添加以下配置:

Groovy DSL示例:

afterEvaluate {
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        dependsOn tasks.withType(com.android.build.gradle.tasks.DataBindingGenerateBaseClasses)
    }
}

Kotlin DSL示例:

afterEvaluate {
    tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
        dependsOn(tasks.withType<com.android.build.gradle.tasks.DataBindingGenerateBaseClasses>())
    }
}

4. 清理缓存并重新构建

执行以下命令彻底清理缓存并重新构建BuildB:

./gradlew clean
./gradlew :yourModuleName:assembleBuildB --refresh-dependencies

也可手动删除项目根目录的.gradle文件夹和模块的build文件夹,再同步项目。

5. 校验布局文件命名与结构

  • 确保BuildB的布局文件名与BuildA一致(如均为splash_screen.xml),DataBinding生成的类名由布局文件名驼峰化而来(splash_screen.xml对应SplashScreenBinding)。
  • 确认布局根标签为<layout>包裹,示例:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!-- 布局内容 -->
    </LinearLayout>
</layout>

内容的提问来源于stack exchange,提问作者Anael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 19:07:09