android gradle中如何引用 libs.versions.toml中定义的版本变量添加compose引用

1.启用版本目录功能预览

./ settings.gradle

enableFeaturePreview('VERSION_CATALOGS') // 启用版本目录功能预览

bash 复制代码
enableFeaturePreview('VERSION_CATALOGS')
rootProject.name = "ComposeApplication"
include ':app'

2.设置版本变量

./gradle/libs.versions.toml

bash 复制代码
[versions]
agp = "7.2.0"
kotlin = "1.7.10"
coreKtx = "1.6.0"
ui = "1.6.0"
material3 = "1.1.0"
uiToolingPreview = "1.6.0"
lifecycleRuntimeKtx = "2.7.0"
activityCompose = "1.8.0"
junit = "4.13.2"
junitVersion = "1.1.3"
espressoCore = "3.4.0"
uiTestJunit4 = "1.6.0"
uiTooling = "1.6.0"
composeBom = "2024.04.01"


[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
junit = { group = "junit", name = "junit", version.ref = "junit" }
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" }
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
androidx-ui = { group = "androidx.compose.ui", name = "ui",version.ref = "ui" }
androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" }
androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" ,version.ref = "uiTooling" }
androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview",version.ref = "uiToolingPreview" }
androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4",version.ref = "uiTestJunit4" }
androidx-material3 = { group = "androidx.compose.material3", name = "material3" ,version.ref = "material3"}

[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }

3.引用版本变量 配置compose引用库

注意:需要设置

buildFeatures {

compose true //允许在项目中使用 @Composable 函数和相关组件(如 Text、Button)

}

composeOptions {

kotlinCompilerExtensionVersion '1.3.0' //指定 Compose 编译器插件的版本号

}

具体见:./app/build.gradle

bash 复制代码
plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.jetbrains.kotlin.android)
}

android {
    namespace 'com.android.demo.composeapplication'
    compileSdk 34

    defaultConfig {
        applicationId "com.android.demo.composeapplication"
        minSdk 30
        targetSdk 34
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables {
            useSupportLibrary true
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    buildFeatures {
        compose true
    }
    composeOptions {
        kotlinCompilerExtensionVersion '1.3.0'
    }
    packagingOptions {
        // 1. 保留您之前针对coroutines.pro的配置
        pickFirst 'META-INF/com.android.tools/proguard/coroutines.pro'
        pickFirst 'META-INF/proguard/coroutines.pro'

        // 2. 新增:处理当前报错的MANIFEST.MF文件(选择第一个)
        pickFirst 'META-INF/MANIFEST.MF'

        // 3. (可选但推荐)添加对其他常见META-INF冲突文件的处理
        // 这些是Android开发中频繁出现冲突的文件路径
        pickFirst 'META-INF/DEPENDENCIES'
        pickFirst 'META-INF/LICENSE'
        pickFirst 'META-INF/LICENSE.txt'
        pickFirst 'META-INF/NOTICE'
        pickFirst 'META-INF/NOTICE.txt'
        pickFirst 'META-INF/INDEX.LIST'
        pickFirst 'META-INF/io.netty.versions.properties'
        pickFirst 'META-INF/*.kotlin_module'
        pickFirst 'META-INF/*.version'
        pickFirst 'META-INF/services/**'

        resources {
            excludes = ["/META-INF/{AL2.0,LGPL2.1}"]  // 示例:排除重复资源
        }
    }
}

dependencies {
    //region 方法1 引用libs.versions.toml 中定义的版本变量,在libs.versions.toml中的变量 指定版本
    implementation libs.androidx.core.ktx
    implementation libs.androidx.ui
    implementation libs.androidx.material3
    implementation libs.androidx.ui.tooling.preview
    implementation libs.androidx.lifecycle.runtime.ktx
    implementation libs.androidx.activity.compose
    testImplementation libs.junit
    androidTestImplementation libs.androidx.junit
    androidTestImplementation libs.androidx.espresso.core
    androidTestImplementation libs.androidx.ui.test.junit4
    debugImplementation libs.androidx.ui.tooling
    //endregion

    //region 方法2 引入 BOM 再引入其它 Compose 相关的库就不需要手动指定版本号了,它们会由 BOM 指定
//    implementation platform(libs.androidx.compose.bom)
//    implementation "androidx.core:core-ktx"
//    implementation "androidx.compose.ui:ui"
//    implementation "androidx.compose.material3:material3"
//    implementation "androidx.compose.ui:ui-tooling-preview"
//    implementation "androidx.lifecycle:lifecycle-runtime-ktx"
//    implementation "androidx.activity:activity-compose"
//    testImplementation "junit:junit"
//    androidTestImplementation "androidx.test.ext:junit"
//    androidTestImplementation "androidx.test.espresso:espresso-core"
//    androidTestImplementation "androidx.compose.ui:ui-test-junit4"
//    debugImplementation "androidx.compose.ui:ui-tooling"
    //endregion
}
相关推荐
低调小一7 小时前
深度复盘:KMP 在字节跳动的工程化落地实践
android·kotlin
歪楼小能手10 小时前
Android16系统go版关闭重力旋转开关后缺失手动旋转屏幕悬浮按钮
android·java·平板
崇山峻岭之间10 小时前
Matlab学习记录37
android·学习·matlab
stevenzqzq13 小时前
Android 协程 Channel 菜鸟教程
android·channel
遗悲风13 小时前
PHP伪协议全面解析:原理、常用场景、攻防实战与安全防护
android·安全·php
撩得Android一次心动13 小时前
Android Lifecycle 全面解析:掌握生命周期管理的艺术(源码篇)
android·lifecycle
stevenzqzq13 小时前
android fow 限流
android·限流·flow
冬奇Lab14 小时前
Android 15 显示子系统深度解析(二):图形缓冲区管理与HWC硬件合成
android
wings专栏14 小时前
Android触摸事件分发记录
android
aaajj15 小时前
【Android】声控拍照例子
android