Kotlin 2.0.0 全面迁移指南

一个重大变化是, Kotlin 2.0 默认不启用KAPT, 因此必须从 KAPT 迁移到 KSP.

Kotlin 2.0.0 的主要功能

 KSP取代KAPT: 抛弃 KAPT, 拥抱 KSP. KSP更快, 更高效, 能更好地与 Kotlin 代码集成, 减少注解处理开销, 缩短构建时间.

增强的类型系统: Kotlin 2.0.0新的类型推断和改进的空安全功能让你的代码更加健壮, 最大限度地减少运行时错误, 使你的应用更具弹性.

简化协程: 最新的协程更新简化了异步编程, 使编写和维护并发代码变得更容易–这是现代高性能应用所必须的.

工具和集成开发环境支持: 随着Kotlin 2.0.0JetBrains工具支持水平的提高, 提供了更好的集成开发环境性能, 更快的索引和增强的代码分析功能, 使开发更顺畅, 更直观.

准备迁移: 更新工具

在开始迁移之前, 请确保你的开发环境是最新的:

插件

确保你拥有必要插件的最新版本. 例如, 如果你正在使用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

评论0

显示验证码
没有账号?注册  忘记密码?