Android 问题00 —— IncompatibleComposeRuntimeVersionException
问题背景
在真实项目过程中开发 SDK,需要相应的开发一个 DEMO App,一方面测试 SDK 功能,另一方面根据实际场景构建一个可用的 App,模拟现实用途。这个过程中发现 App 开发用的还是老旧的 XML 布局格式,然后使用 Activity/Fragment 形式加载(Android 刚出生时的布局/页面加载方式)。我打算引入 Compose,一种较新的 UI 构建库,目的是想组内的开发同事来逐步认识更高效的布局/页面开发方式,同时期望项目内的组员可以多关注一些 Android 的新技术。为什么引入 Compose? 在文章最后说明。这里讲引入过程中遇到的问题。
先来看项目结构,是一个简单的两个 modules 组成的 Project。
这个 Project 中 app module 依赖于 sdk module,sdk 包含主要的业务功能。现在主要针对这个 Project 作 Compose 的引入,原始的工程只应用 Java 语言,layout 的加载方式是最老的 xml 方式。Compose 已经推出了很久,Kotlin 也是 Android 首推的开发语言,用以构建 layout,确是高效,且更加安全。
下来就是引入 Compose 的问题了。
开始情况,考虑的是只在 app 模块中引入 Compose,sdk 有 Kotlin 业务代码,没有 Compose 构建的 UI,因此一开始时就有应用 Kotlin。
// sdk module
plugins {
id 'com.android.library'
// ...
id 'org.jetbrains.kotlin.android' // Kotlin
}
/// ....
具体问题
各层级的 build.gradle
文件内 kotlin/compose 相关配置如下。
在 Project 项目级 build.gradle
中配置 KGP
。
// Root Project
buildscript {
repositories {
// ...
}
dependencies {
classpath libs.androidx.navigation.navigation.safe.args.gradle.plugin
classpath libs.google.services
classpath libs.fat.aar
// ...
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0" // 建议与 IDE settings 中的版本一致
}
// ...
}
plugins {
id 'com.android.application' version '7.4.2' apply false
id 'com.android.library' version '7.4.2' apply false
// ...
id 'org.jetbrains.