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
}