配置 Kotlin DSL 的 Android Library 工程主要涉及两个核心文件:模块级的 build.gradle.kts 和根目录的配置文件。以下是基于现代 Android 开发标准(AGP 8.x + Gradle 8.x)的配置指南。
- 模块级配置 (build.gradle.kts)
这是库模块的核心配置文件。与 Application 模块不同,Library 模块需要应用 com.android.library 插件,并且通常不需要配置 applicationId。
plugins {
// 1. 应用 Android Library 插件
id("com.android.library")
// 2. 如果库中包含 Kotlin 代码,应用 Kotlin Android 插件
id("org.jetbrains.kotlin.android")
// 3. 如果需要发布到 Maven,可选应用 maven-publish 插件
// id("maven-publish")
}
android {
// 命名空间,替代旧版的 package name,用于生成 R 类
namespace = "com.example.mylibrary"
// 编译 SDK 版本
compileSdk = 34
defaultConfig {
// 最小 SDK 版本
minSdk = 24
// 注意:Library 模块没有 applicationId
// 如果有测试需求,可以配置 testInstrumentationRunner
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
// 如果是 Kotlin 库,确保 Kotlin 编译选项一致
kotlinOptions {
jvmTarget = "17"
}
// 开启构建特性(如 ViewBinding, DataBinding, Compose 等)
buildFeatures {
viewBinding = true
// compose = true // 如果是一个 Compose UI 库
}
}
dependencies {
// 示例依赖
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
// 测试依赖
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}
- 根目录配置 (build.gradle.kts 或 settings.gradle.kts)
在现代项目中,推荐在 settings.gradle.kts 中管理仓库,在根目录 build.gradle.kts 中管理插件版本(如果使用 Version Catalog 则更简洁)。
A. settings.gradle.kts (推荐方式)
集中管理依赖仓库和模块包含关系。
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "MyLibraryProject"
// 包含你的库模块
include(":my-library-module")
B. 根目录 build.gradle.kts (声明插件版本)
如果你不使用 Version Catalog (libs.versions.toml),可以在这里声明插件版本。
plugins {
// apply false 表示只声明版本,不在此处应用,供子模块使用
id("com.android.library") version "8.1.0" apply false
id("org.jetbrains.kotlin.android") version "1.9.0" apply false
}
- 关键注意事项
- 插件 ID 区别:
- App 模块使用:id("com.android.application")
- Library 模块使用:id("com.android.library")
- 切勿在 Library 模块中误用 application 插件,否则会导致构建错误。
- Namespace vs Package Name:
- AGP 7.0+ 引入了 namespace 属性,它取代了 AndroidManifest.xml 中的 package 属性用于资源生成。
- AndroidManifest.xml 中的 package 属性现在主要用于定义 R 类的 Java 包名(如果未指定 namespace)或作为唯一标识符,建议保持两者一致或在 build.gradle.kts 中明确指定 namespace。
- 依赖暴露:
- implementation: 依赖仅在当前库内部使用,不会传递给引用该库的 App 模块。
- api: 依赖会传递给引用该库的 App 模块(类似 Java 的 public 导出)。谨慎使用 api,以避免依赖膨胀。
- Kotlin 版本兼容性:
- 确保 org.jetbrains.kotlin.android 插件版本与项目中其他 Kotlin 模块兼容。
- 在 gradle.properties 中启用 Kotlin 增量编译以提升构建速度:
kotlin.incremental=true
- 发布配置 (可选):
如果该库需要发布到 Maven 仓库,需额外配置 maven-publish 插件和 signing 配置,这通常涉及更复杂的 publishing {} 块配置。
通过以上配置,你可以建立一个标准的、类型安全的 Kotlin DSL Android Library 项目。如果遇到 Unresolved reference: android 错误,请确保已正确应用 com.android.library 插件并执行了 Gradle 同步。