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
}
相关推荐
工程师老罗4 小时前
如何在Android工程中配置NDK版本
android
Libraeking7 小时前
破壁行动:在旧项目中丝滑嵌入 Compose(混合开发实战)
android·经验分享·android jetpack
市场部需要一个软件开发岗位8 小时前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
JMchen12310 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
crmscs10 小时前
剪映永久解锁版/电脑版永久会员VIP/安卓SVIP手机永久版下载
android·智能手机·电脑
localbob10 小时前
杀戮尖塔 v6 MOD整合版(Slay the Spire)安卓+PC端免安装中文版分享 卡牌肉鸽神作!杀戮尖塔中文版,电脑和手机都能玩!杀戮尖塔.exe 杀戮尖塔.apk
android·杀戮尖塔apk·杀戮尖塔exe·游戏分享
机建狂魔10 小时前
手机秒变电影机:Blackmagic Camera + LUT滤镜包的专业级视频解决方案
android·拍照·摄影·lut滤镜·拍摄·摄像·录像
hudawei99610 小时前
flutter和Android动画的对比
android·flutter·动画
lxysbly12 小时前
md模拟器安卓版带金手指2026
android
儿歌八万首13 小时前
硬核春节:用 Compose 打造“赛博鞭炮”
android·kotlin·compose·春节