如何将版本目录添加到您的Android应用程序中?
#初学者 #kotlin #android #gradle

逐步指南实现版本目录(Gradle Team开发的依赖关系管理工具)

版本目录是由Gradle团队开发的依赖关系管理工具。使用它的好处是,您不需要在多个位置中进行硬编码版本,尤其是如果您有多模型项目。

本文提供了使用Android Studio将版本目录集成到Android应用中的分步指南。该示例基于此clean empty Jetpack Compose app template

1.升级Gradle版本

运行版本目录的最低Gradle版本要求为7.4。但是,版本7.4.2包含最新修复程序。

在终端中,检查您的Gradle版本。

./gradlew -version

如果小于7.4.2,请升级。

./gradlew wrapper --gradle-version 7.4.2

运行上述命令后,更新了.\wrapper\gradle-wrapper.jar.\wrapper\gradle-wrapper.properties.\build.gradle.kts

如果您对 *.kts感到好奇,那是Gradle Kotlin脚本。有关更多信息,您可以参考此博客文章。

2.创建libs.versions.toml

创建此.\gradle\libs.versions.toml文件。请确保正确命名。我起初错误地命名了,我花了一段时间才弄清楚。

libs.versions.toml的示例看起来像这样。

[versions]
androidGradlePlugin = "7.3.0"
androidxCore = "1.8.0"
androidxComposeCompiler = "1.2.0"

[plugins]
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }
android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" }

[libraries]
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidxCore" }

androidx-lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "androidxLifecycle" }
androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidxLifecycle" }

[bundles]
androidx-lifeycle = ["androidx-lifecycle-runtime-ktx", "androidx-lifecycle-viewmodel-compose"]
  • [versions]- [plugins][libraries]

  • 引用的声明版本
  • [plugins]-用版本

  • 定义一组插件
  • [libraries]-用版本

  • 定义一组库依赖关系
  • [bundles]-将多个库组合到单个参考中

[bundles]仅与库一起使用。它对插件不起作用。例如,以下内容不起作用。

[bundles]
android-gradle-plugin = ["android-application", "android-library"]

3.更新插件块

build.gradle.kts(root/project级别)

替换

plugins {
    id("com.android.application") version "7.2.2" apply false 
    id("com.android.library") version "7.2.2" apply false 
    id("org.jetbrains.kotlin.android") version "1.7.0" apply false
}


plugins { 
    alias(libs.plugins.android.application) apply false 
    alias(libs.plugins.android.library) apply false 
    alias(libs.plugins.kotlin.android) apply false 
}

app \ build.gradle.kts(应用/模块级)

替换

plugins {
    id ("com.android.application")
    id ("org.jetbrains.kotlin.android")
}


plugins { 
    alias(libs.plugins.android.application) 
    alias(libs.plugins.kotlin.android) 
}

它编译并运行正常,但是您仍然可以看到以下错误。

val project.libs:librariesforlibs在此上下文中无法通过隐式接收器调用。如有必要,请使用显式

它看起来像是一个已知的错误here。要摆脱此错误,您可以添加@Suppress("DSL_SCOPE_VIOLATION")

[更新 - 2023年1月2日]:如果您获得“ 期望表达式”构建错误,则要在文件末尾添加此println("")作为解决方法。

@Suppress("DSL_SCOPE_VIOLATION")
plugins {
    /*...*/
}

//Workaround for "Expecting an expression" build error
println("")

4.更新kotlincompilerextensionversion

而不是硬编码kotlinCompilerExtensionVersion

composeOptions { 
    kotlinCompilerExtensionVersion = "1.2.0" 
}

使用 libs.versions.toml file
[versions]部分中定义androidxComposeCompilerlibs.vesions.compose

composeOptions {
    kotlinCompilerExtensionVersion = libs.versions.androidxComposeCompiler.get()
}

5.更新库依赖关系

示例1-单库

dependencies { 
    implementation("androidx.core:core-ktx:1.8.0") 
}


取代

dependencies {
    implementation(libs.androidx.core.ktx) 
}

示例2-多个库

dependencies { 
    val lifeCycleVersion = "2.5.1" 
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifeCycleVersion") 
    implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifeCycleVersion") 
}


取代

dependencies { 
    implementation(libs.bundles.androidx.lifeycle) 
}

目前的问题

我认为版本目录的主要问题是,当库的新版本时,它不会提示您的消息。例如:

可用的androidx.core:core-ktx的新版本可用:1.9.0

这里有一个第三方库,但我认为它仍然需要您手动运行gradle命令。

源代码

github存储库:Demo_CleanEmptyCompose(master_vercatalog branch)

转换为版本目录:diff


最初出版于https://vtsen.hashnode.dev