kotlin dsl library工程怎么配置

配置 Kotlin DSL 的 Android Library 工程主要涉及两个核心文件:模块级的 build.gradle.kts 和根目录的配置文件。以下是基于现代 Android 开发标准(AGP 8.x + Gradle 8.x)的配置指南。

  1. 模块级配置 (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"),

"proguard-rules.pro"

)

}

}

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")

}

  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

}

  1. 关键注意事项
  2. 插件 ID 区别:
    1. App 模块使用:id("com.android.application")
    2. Library 模块使用:id("com.android.library")
    3. 切勿在 Library 模块中误用 application 插件,否则会导致构建错误。
  1. Namespace vs Package Name:
    1. AGP 7.0+ 引入了 namespace 属性,它取代了 AndroidManifest.xml 中的 package 属性用于资源生成。
    2. AndroidManifest.xml 中的 package 属性现在主要用于定义 R 类的 Java 包名(如果未指定 namespace)或作为唯一标识符,建议保持两者一致或在 build.gradle.kts 中明确指定 namespace。
  1. 依赖暴露:
    1. implementation: 依赖仅在当前库内部使用,不会传递给引用该库的 App 模块。
    2. api: 依赖会传递给引用该库的 App 模块(类似 Java 的 public 导出)。谨慎使用 api,以避免依赖膨胀。
  1. Kotlin 版本兼容性:
    1. 确保 org.jetbrains.kotlin.android 插件版本与项目中其他 Kotlin 模块兼容。
    2. 在 gradle.properties 中启用 Kotlin 增量编译以提升构建速度:

kotlin.incremental=true

  1. 发布配置 (可选):
    如果该库需要发布到 Maven 仓库,需额外配置 maven-publish 插件和 signing 配置,这通常涉及更复杂的 publishing {} 块配置。

通过以上配置,你可以建立一个标准的、类型安全的 Kotlin DSL Android Library 项目。如果遇到 Unresolved reference: android 错误,请确保已正确应用 com.android.library 插件并执行了 Gradle 同步。

相关推荐
啵啵啵鱼1 小时前
九、JDBC 操作 MySQL 数据库
android·数据库·mysql
huaweichenai1 小时前
php搭建mcp服务
开发语言·php·ai编程
用户69371750013841 小时前
当我说 Claude 搭配 GLM-5.3-Flash 太好用了,同事却提醒我:你可能正在失去对代码的掌控
android·后端·ios
张小姐的猫1 小时前
【MySQL】数据类型
android·linux·数据库·c++·mysql·adb·php
估值探索者1 小时前
【Python量化技术指标实战 02】MACD金叉也分强弱?手工算一次 DIF/DEA 就懂了
java·开发语言·python·股票数据·股票数据api接口
讳疾忌医丶1 小时前
编译器眼中的 C++ 循环:从指针别名、IEEE 754 结合律到 SIMD 语义证明
开发语言·c++
2501_916008891 小时前
马甲包过审卡在哪?Ipa Guard 能做的和做不到的
android·小程序·https·uni-app·iphone·webview
重生六道2 小时前
B站视频时长统计:一段JS脚本搞定分P/合集总时长(附倍速计算)
开发语言·javascript·音视频
XiYang-DING2 小时前
P5528.带过期时间的 LRU 缓存
java·开发语言·缓存