You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Kotlin 1.7.0与AGP 7.4.1环境下Compose插件找不到及Kotlin扩展替代配置问题

Kotlin 1.7.0与AGP 7.4.1环境下Compose插件找不到及Kotlin扩展替代配置问题

嗨,我来帮你梳理下这个场景下的配置要点,解决你提到的Kotlin扩展废弃和可能遇到的Compose插件兼容问题~

首先得明确:官方已经废弃了Kotlin Android Extensions,咱们得用更安全的方案替代,同时还要确保Kotlin、AGP和Compose版本的兼容性,一步步来:

一、替换废弃的Kotlin Android Extensions

旧的Kotlin扩展语法(比如直接用id引用View)已经不再维护,官方推荐用View Binding来替代,配置很简单:

  • 在你的app模块build.gradle.ktsandroid代码块里,新增View Binding的启用配置:
buildFeatures {
    compose = true
    viewBinding = true // 新增这一行,开启View Binding
}

之后你就可以通过自动生成的Binding类访问View了,比如在Activity里用ActivityMainBinding.inflate(layoutInflater)获取实例,比旧扩展更安全,还能避免空指针问题。

二、修复Compose版本与Kotlin的兼容性问题

你当前用的Compose BOM版本2024.04.01要求Kotlin版本至少1.9.0,但你用的是1.7.0,这会导致版本不匹配,大概率会出现插件找不到或者编译报错的问题,咱们得把BOM降级到适配Kotlin1.7.0的版本:

  • 修改libs.versions.toml里的composeBom版本:
[versions]
# ... 其他版本不变
composeBom = "2022.10.00" // 这个版本适配Kotlin 1.7.x系列

三、统一Java与Kotlin的编译目标版本

你当前的compileOptions用的是Java 17,但kotlinOptions里的jvmTarget是11,版本不一致可能导致潜在的编译问题,建议统一成17:

  • 在app模块build.gradle.ktskotlinOptions里修改:
kotlinOptions {
    jvmTarget = "17" // 从11改成17,和Java编译版本一致
}

四、验证插件与依赖配置

你的根模块和app模块的插件配置是正确的,kotlin-androidkotlin-compose插件版本都和Kotlin 1.7.0绑定,AGP 7.4.1也和这个Kotlin版本兼容,不用额外调整。

最后给你贴一下修改后的关键代码片段,方便你对比:

修改后的app模块build.gradle.kts(android块部分)

android {
    namespace = "com.example.selfpromoapp"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.selfpromoapp"
        minSdk = 21
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17" // 统一为Java17
    }
    buildFeatures {
        compose = true
        viewBinding = true // 开启View Binding
    }
}

修改后的libs.versions.toml(versions块部分)

[versions]
agp = "7.4.1"
appcompat = "1.7.0"
kotlin = "1.7.0"
coreKtx = "1.13.1"
junit = "4.13.2"
junitVersion = "1.2.1"
espressoCore = "3.6.1"
lifecycleRuntimeKtx = "2.8.6"
activityCompose = "1.9.3"
composeBom = "2022.10.00" // 适配Kotlin1.7.0的BOM版本
material = "1.12.0"

完成这些调整后,同步一下Gradle,应该就能解决你的问题啦~

备注:内容来源于stack exchange,提问作者krzysiekcr

火山引擎 最新活动