
一个重大变化是, Kotlin 2.0 默认不启用KAPT, 因此必须从 KAPT 迁移到 KSP.
Kotlin 2.0.0 的主要功能
KSP取代KAPT: 抛弃 KAPT, 拥抱 KSP. KSP更快, 更高效, 能更好地与 Kotlin 代码集成, 减少注解处理开销, 缩短构建时间.
增强的类型系统: Kotlin 2.0.0新的类型推断和改进的空安全功能让你的代码更加健壮, 最大限度地减少运行时错误, 使你的应用更具弹性.
简化协程: 最新的协程更新简化了异步编程, 使编写和维护并发代码变得更容易–这是现代高性能应用所必须的.
工具和集成开发环境支持: 随着Kotlin 2.0.0, JetBrains工具支持水平的提高, 提供了更好的集成开发环境性能, 更快的索引和增强的代码分析功能, 使开发更顺畅, 更直观.
准备迁移: 更新工具
在开始迁移之前, 请确保你的开发环境是最新的:
插件
确保你拥有必要插件的最新版本. 例如, 如果你正在使用Glide, Dagger等库或任何其他依赖于KAPT的库, 请先将所有依赖库转移到 KSP. 这一主动步骤将帮助你避免在迁移过程中出现编译错误.
const val daggerVersion = "2.52"
const val glideVersion = "4.16.0"
object DaggerHilt {
const val hiltAndroid = "com.google.dagger:hilt-android:$daggerVersion"
const val hiltCompiler = "com.google.dagger:hilt-android-compiler:$daggerVersion"
}
object ImageLoader {
const val glide = "com.github.bumptech.glide:glide:$glideVersion"
const val glideCompiler = "com.github.bumptech.glide:ksp:$glideVersion"
}
object Ksp {
const val version = "2.0.10-1.0.24"
}
object Kotlin {
const val version = "2.0.10"
}
工具
将 Gradle 等工具更新到最新版本. 确保将 gradle-wrapper.properties
设置为兼容版本:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-8.9-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Android Studio
确保使用最新版本的 Android Studio(目前是 Koala), 以便与 Kotlin 2.0 完全兼容.
迁移到 Kotlin 2.0.0
按照该文档一步步指导顺利过渡:
第 1 步: 在 Gradle 版本目录中添加版本和插件
首先更新项目的 libs.versions.toml
或 BuildSrc.kts
文件, 以包含必要的 Kotlin 和 Compose Compiler 版本.
[versions] kotlin_version = “2.0.0” [plugins] compose-compiler = { id = “org.jetbrains.kotlin.plugin.compose”, version.ref = “kotlin_version” }
或者, 直接在根目录 build.gradle.kts
文件中添加:
id("org.jetbrains.kotlin.plugin.compose") version Kotlin.version apply false
第 2 步: 修改根级 Gradle 文件
将 Compose Compiler 插件添加到根目录下的 build.gradle.kts
文件, 以确保它在所有模块中都可用.
plugins {
alias(libs.plugins.compose.compiler) apply false
}
然后, 将插件应用到每个使用 Jetpack Compose 的模块:
plugins {
alias(libs.plugins.compose.compiler)
}
第 3 步: 使用 KSP 重新编译
更新到 KSP 版本 2.0.0-1.0.22
之后, 在 Android Studio 中重新编译项目. 编译成功表明你的项目现在运行的是 Kotlin 2.0.0.
清理旧的编译器配置
迁移后, 确保删除任何过时的配置, 清理项目.
第 4 步: 移除旧的编译器版本
不再需要指定 kotlinCompilerExtensionVersion
的 composeOptions
块. 删除它以避免任何冲突.
composeOptions {
// Remove this block
// kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get()
}
第 5 步: 在使用 Compose 的模块中应用插件
每个使用 Jetpack Compose 的模块都需要显式地应用 Compose 编译器插件, 特别是如果你有自定义的 Gradle 脚本的话.
plugins {
alias(libs.plugins.compose.compiler)
}
第 6 步: 可选 – 配置新的 Compose 编译器
要进行额外的自定义, 比如启用强跳过模式, 可以如下配置新的 Compose 编译器:
composeCompiler {
enableStrongSkippingMode = true
}
其他小建议
- 同步Gradle: 进行这些更改后, 将项目与 Gradle 同步, 以应用更新.
- 全面测试: 运行你的项目并进行大量测试, 确保一切都能在新编译器下正常运行.
注意 :-
这是一个工作项目结构示例. 根据你的项目, 可能需要对步骤进行相应调整. 每个公司的 Gradle 设置都不尽相同, 因此请将本指南作为参考, 而非复制粘贴.
custom_compose_library.gradle
import Dependencies.Versions.nav_version
import Versions.hiltNavigationComposeVersion
object Versions {
const val composeCompilerVersion = "1.5.15"
const val bomVersion = "2024.06.00"
const val coinVersion = "2.7.0"
const val composeNavigationVersion = "1.5.0"
const val accompanist = "0.34.0"
const val hiltNavigationComposeVersion = "1.2.0"
}
object Compose {
const val activity = "androidx.activity:activity-compose:1.9.1"
const val viewModel = "androidx.lifecycle:lifecycle-viewmodel-compose:2.8.4"
const val lifecycleRuntimeCompose = "androidx.lifecycle:lifecycle-runtime-compose:2.8.4"
const val htmlText = "de.charlex.compose:html-text:1.6.0"
const val accompanistPlaceholderMaterial = "com.google.accompanist:accompanist-placeholder-material:0.34.0"
const val lottieCompose = "com.airbnb.android:lottie-compose:6.5.0"
const val constraintLayout = "androidx.constraintlayout:constraintlayout-compose:1.0.1"
const val immutable = "org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7"
const val navigation = "androidx.navigation:navigation-compose:${nav_version}"
const val hiltNavigationCompose = "androidx.hilt:hilt-navigation-compose:$hiltNavigationComposeVersion"
}
object TabLayout {
const val accompanistPager = "com.google.accompanist:accompanist-pager:${Versions.accompanist}"
const val accompanistPagerIndicator = "com.google.accompanist:accompanist-pager-indicators:${Versions.accompanist}"
}
object Coil {
const val coil = "io.coil-kt:coil:${Versions.coinVersion}"
const val coilCompose = "io.coil-kt:coil-compose:${Versions.coinVersion}"
const val coilGif = "io.coil-kt:coil-gif:${Versions.coinVersion}"
}
object ComposeNavigation {
const val navBase = "dev.olshevski.navigation:reimagined:${Versions.composeNavigationVersion}"
const val navHilt = "dev.olshevski.navigation:reimagined-hilt:${Versions.composeNavigationVersion}"
const val navMaterial = "dev.olshevski.navigation:reimagined-material:${Versions.composeNavigationVersion}"
}
object ComposeBom {
const val composeBom = "androidx.compose:compose-bom:${Versions.bomVersion}"
const val material = "androidx.compose.material:material"
const val material3 = "androidx.compose.material3:material3"
const val foundation = "androidx.compose.foundation:foundation"
const val ui = "androidx.compose.ui:ui"
const val uiToolingPreview = "androidx.compose.ui:ui-tooling-preview"
const val uiToolingDebug = "androidx.compose.ui:ui-tooling" // use with debugImplementation
const val materialIconsExtended = "androidx.compose.material:material-icons-extended"
const val windowSizeUtils = "androidx.compose.material3:material3-window-size-class:1.2.1"
}
object Paging {
const val pagination = "androidx.paging:paging-runtime-ktx:3.2.0" // Todo Remove Later Need to update in sometime
const val paginationCompose = "androidx.paging:paging-compose:3.3.1"
}
custom_compose.gradle
android {
buildFeatures {
compose true
}
composeCompiler {
enableStrongSkippingMode = true
}
}
dependencies {
implementation platform(ComposeBom.composeBom)
androidTestImplementation platform(ComposeBom.composeBom)
implementation ComposeBom.material
implementation ComposeBom.material3
implementation ComposeBom.windowSizeUtils
implementation ComposeBom.materialIconsExtended
implementation ComposeBom.ui
implementation ComposeBom.uiToolingPreview
debugImplementation ComposeBom.uiToolingDebug
"${DependencyConfiguration.debugNoProguardImplementation.name()}" ComposeBom.uiToolingDebug
implementation Compose.activity
implementation Compose.viewModel
implementation Compose.lifecycleRuntimeCompose
implementation Compose.constraintLayout
implementation(Compose.accompanistPlaceholderMaterial)
implementation(TabLayout.accompanistPager)
implementation(TabLayout.accompanistPagerIndicator)
implementation(ComposeNavigation.navBase)
implementation(ComposeNavigation.navHilt)
implementation(ComposeNavigation.navMaterial)
implementation(Compose.htmlText)
implementation(Compose.lottieCompose)
implementation(Coil.coil)
implementation(Coil.coilCompose)
implementation(Compose.immutable)
implementation(Compose.navigation)
implementation(Compose.hiltNavigationCompose)
implementation Kotlin.serializationJson
}
转载:https://developer.volcengine.com/articles/7418068318231855158
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/archives/22857,转载请注明出处。
评论0