首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用Kotlin DSL和buildSrc创建android项目

使用Kotlin DSL和buildSrc来创建Android项目可以极大地提升构建脚本的可读性和可维护性。以下是详细步骤和相关概念:

基础概念

  1. Kotlin DSL: Kotlin DSL(Domain Specific Language)是一种使用Kotlin语言编写的特定领域语言,用于替代Groovy DSL来编写Gradle构建脚本。Kotlin DSL提供了更强的类型安全和更好的IDE支持。
  2. buildSrc: buildSrc是Gradle中的一个特殊目录,用于存放可重用的构建逻辑。任何放在buildSrc目录下的代码都会被自动编译成一个包含在构建脚本类路径中的JAR文件。这使得你可以创建自定义的Gradle插件和任务,并在整个项目中重用它们。

创建步骤

1. 初始化项目

首先,使用Android Studio创建一个新的Android项目。选择“Empty Activity”模板,并确保选择Kotlin作为编程语言。

2. 配置build.gradle文件

在项目的根目录下,你会看到两个build.gradle文件:

  • build.gradle(项目级)
  • build.gradle(模块级)

项目级build.gradle

将项目级的build.gradle文件转换为Kotlin DSL:

代码语言:txt
复制
// build.gradle.kts (Project Level)
plugins {
    id("com.android.application") version "7.0.0" apply false
    id("org.jetbrains.kotlin.android") version "1.5.21" apply false
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

模块级build.gradle

将模块级的build.gradle文件也转换为Kotlin DSL:

代码语言:txt
复制
// build.gradle.kts (Module Level)
plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
}

android {
    compileSdkVersion(30)
    defaultConfig {
        applicationId = "com.example.myapp"
        minSdkVersion(21)
        targetSdkVersion(30)
        versionCode = 1
        versionName = "1.0"
    }
    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
    }
}

dependencies {
    implementation("androidx.core:core-ktx:1.6.0")
    implementation("androidx.appcompat:appcompat:1.3.1")
    implementation("com.google.android.material:material:1.4.0")
    implementation("androidx.constraintlayout:constraintlayout:2.1.0")
}

创建buildSrc目录

在项目的根目录下创建一个名为buildSrc的目录,并在其中创建以下文件结构:

代码语言:txt
复制
buildSrc/
├── build.gradle.kts
└── src/
    └── main/
        └── kotlin/
            └── com/
                └── example/
                    └── myapp/
                        └── BuildConfig.kt

配置buildSrc/build.gradle.kts

代码语言:txt
复制
// buildSrc/build.gradle.kts
plugins {
    `kotlin-dsl`
}

repositories {
    mavenCentral()
}

创建自定义配置类

BuildConfig.kt文件中创建自定义配置类:

代码语言:txt
复制
// buildSrc/src/main/kotlin/com/example/myapp/BuildConfig.kt
object Versions {
    const val kotlin = "1.5.21"
    const val androidGradlePlugin = "7.0.0"
    // 添加其他版本信息
}

object Dependencies {
    const val coreKtx = "androidx.core:core-ktx:1.6.0"
    const val appcompat = "androidx.appcompat:appcompat:1.3.1"
    const val material = "com.google.android.material:material:1.4.0"
    const val constraintlayout = "androidx.constraintlayout:constraintlayout:2.1.0"
    // 添加其他依赖信息
}

使用自定义配置

现在,你可以在模块级的build.gradle.kts文件中使用这些自定义配置:

代码语言:txt
复制
// build.gradle.kts (Module Level)
plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
}

android {
    compileSdkVersion(30)
    defaultConfig {
        applicationId = "com.example.myapp"
        minSdkVersion(21)
        targetSdkVersion(30)
        versionCode = 1
        versionName = "1.0"
    }
    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
    }
}

dependencies {
    implementation(Dependencies.coreKtx)
    implementation(Dependencies.appcompat)
    implementation(Dependencies.material)
    implementation(Dependencies.constraintlayout)
}

优势

  1. 类型安全: Kotlin DSL提供了更好的类型检查,减少了运行时错误。
  2. 可读性: Kotlin的语法更加简洁和直观,使得构建脚本更易于阅读和维护。
  3. 重用性: 使用buildSrc可以将常用的构建逻辑封装起来,方便在整个项目中重用。

应用场景

  • 大型项目: 对于大型项目,使用Kotlin DSL和buildSrc可以提高构建脚本的可维护性。
  • 团队协作: 当多个开发者共同工作时,统一的构建脚本风格可以减少沟通成本。
  • 自动化测试: 自定义的Gradle任务可以用于自动化测试和持续集成流程。

常见问题及解决方法

问题1: buildSrc目录未被识别

原因: 可能是由于Gradle缓存问题或目录结构不正确。

解决方法: 清理Gradle缓存并重新构建项目:

代码语言:txt
复制
./gradlew clean build --refresh-dependencies

问题2: Kotlin版本不匹配

原因: 可能是由于项目中使用的Kotlin版本与buildSrc中的版本不一致。

解决方法: 确保所有地方的Kotlin版本一致,并在build.gradle.kts文件中明确指定版本号。

通过以上步骤,你可以成功使用Kotlin DSL和buildSrc来创建和管理Android项目。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android安卓进阶之——相比 Groovy 脚本, KTS 性能到底怎么样?

    Groovy开发的体验并不太好,Android Gradle插件4.0之后支持在Gradle构建配置中使用Kotlin 脚本 (KTS),用于替代 Groovy(过去在 Gradle 配置文件中使用的编程语言...KTS 比 Groovy 更适合用于编写 Gradle 脚本,因为采用 Kotlin 编写的代码可读性更高,并且 Kotlin 提供了更好的编译时检查和 IDE 支持。...这些测试运行在一个包含大量subProject的大型项目中,并且它们在 Groovy 和 Kotlin DSL 上运行以进行比较。...Groovy DSL is 1.4x faste buildSrc non-abi change 24.526s 4.732s Kotlin DSL is 5x faste 可以看出,针对Gradle...当buildSrc中发生非abi更改时,kts脚本编译比Groovy DSL快4到5倍,这是因为buildSrc中的kts可以跳过未受影响的构建脚本的编译,而groovy暂不支持 当项目没有发生更改时,

    1.7K41

    Android 重构 | 持续优化统一管理 Gradle

    buildSrc 只要不需要在多个独立项目之间共享代码,就可以非常方便地使用该代码。 该目录 buildSrc 被视为包含的构建。...对于多项目构建,只能有一个 buildSrc 目录,该目录必须位于根项目目录中。buildSrc 应该比脚本插件更可取,因为它更易于维护,重构和测试代码。...buildSrc 使用适用于 Java 和 Groovy 项目的相同源代码约定。它还提供对 Gradle API 的直接访问。...buildSrc 实践 描述下操作步骤: 在项目根目录下创建 buildSrc 目录,随后新建 build.gradle.kts 文件; 创建 src 目录,以及对应管理版本文件; 替换直接使用原有依赖...`kotlin-dsl` plugins { `kotlin-dsl` } repositories { jcenter() } /** * 禁用测试报告(Gradle 默认会自动创建测试报告

    1.9K31

    还没自定义过 Gradle 插件的要学了

    例如,我们熟悉的 Android 构建流程就是由 Android Gradle Plugin 引入的构建逻辑。在这篇文章里,我将带你探讨 Gradle 插件的使用方法、开发步骤和技巧总结。...buildSrc 模块本质上和普通的插件模块是一样的,有一些小区别: 1、buildSrc 模块会被自动识别为参与构建的模块,因此不需要在 settings.gradle 中使用 include 引入,...插件开发技巧总结 判断是否当前是 App 模块还是 Library 模块: 当我们开发 Android 项目相关插件时,经常需要根据插件的使用环境区分不同逻辑。...,Groovy 是 Gradle 的首要语言,但随着 Java 和 Kotlin 语言的演进,这一现状有所改变。...现在的趋势是:Gradle 脚本使用 Groovy 或 Kotlin 开发,而 Gradle 插件使用 Kotlin 开发。例如,我们可以发现 AGP 现在已经用 Kotlin 开发了。

    2K20

    使用新 Android Gradle 插件加速您的应用构建

    △ 配置缓存带来的性能提升 上图展示包含 24 个子项目的 Gradle 构建示例,这组构建使用了最新版本的 Kotlin、Gradle 和 Android Gradle 插件。...Variant API、工件和任务 获取关于 Android Gradle 插件新 Variants 和 Artifact API 的资料,这些资料可以帮助您更深入了解如何与中间工件进行交互。...修改和扩展 DSL 接下来我们需要修改 Android Gradle 插件的 DSL,从而允许我们设置额外 asset 的内容。...另外,为了能够扩展 Android Gradle 插件的 DSL,我们需要创建一个简单的接口。...当我们需要添加自定义变体属性时,首先要创建一个简单的接口: // buildSrc/src/main/kotlin/ToyVariantExtension.kt interface ToyVariantExtension

    2.7K30

    Kotlin + buildSrc:更好的管理Gadle依赖!

    管理Gradle依赖的三种不同方法: 手动管理 使用Google推荐的“ext” Kotlin + buildSrc 1、手动管理 这是一种大多数人在采用的管理依赖的方法,但每次升级依赖库时都需要做大量的手动更改...Google推荐:使用gradle的extra属性 Google在Android官方文档中推荐这种管理依赖的方法。许多项目例如ButterKnife、Picasso等都在使用这种方法。...Kotlin + buildSrc == Android Studio Autocomplete 您需要在您的项目里创建一个buildSrc模块,然后编写kotlin代码来管理依赖库,使得IDE支持自动补全...: plugins {     `kotlin-dsl` } buildSrc/src/main/java/Dependencies.kt object Versions {     val support_lib...后来我参考这里的做法,手动创建了buildSrc这个模块。步骤如下: 1、在项目根目录下新建一个名为buildSrc的文件夹(与项目里的app文件夹同级)。

    2.6K10

    Android Gradle系列-进阶篇

    这篇文章我要向你介绍的是关于如何使用Gradle来更加优雅的管理多个module之间的依赖关系。 相信你一定有这样的经历:主项目依赖于多个子项目,或者项目间互相依赖。...首先我们在rootProject目录下创建一个gradle脚本文件,我这里取名为version.gradle。 然后我们在version.gralde文件中使用ext来定义变量。...2 BuildSrc&Kotlin 如果你的项目使用了kotlin,那么buildSrc&Kotlin的统一管理方案将更适合你。...kotlin-dsl 1plugins { 2 `kotlin-dsl` 3} 4 5repositories { 6 jcenter() 7} 之后再sync project,最终的目录结构如下...至于到底使用哪一种,这就看个人喜好了,但如果你的项目使用了kotlin,我还是建议你使用buildSrc模式,因为对于Groovy语法而言,我相信你还是对Kotlin更加熟悉。

    1.5K20

    如何为 Gradle 的 KTS 脚本添加扩展?

    但受限于篇幅,我就不带着大家一步一步去看源码了,大家有兴趣可以在 Gradle 源码当中找到 org.gradle.kotlin.dsl 包,其中就是有关 Kotlin DSL 的支持的实现。 ?...Gradle Kotlin DSL 的源码路径 有了前面“你的 Gradle 脚本是怎么运行起来的?”...简单来说就是任意一个 Kotlin DSL 的 Gradle 脚本都会把分属于不同阶段的部分拆分开,每一个部分都会编译成两个类,叫做 Program 和 Build_gradle,其中 Program...$$result = (Delete)var9; } } 截止目前,我想大家应该能够明白 Gradle Kotlin DSL 脚本是如何运行的了。 接下来我们就看看如何实现扩展的定义。 2....2.2 定义在 buildSrc 当中 buildSrc 是一个神奇的存在,工程当中所有的脚本都可以访问到它当中的类和函数。

    2.2K30

    如何为 Gradle 的 KTS 脚本添加扩展?

    但受限于篇幅,我就不带着大家一步一步去看源码了,大家有兴趣可以在 Gradle 源码当中找到 org.gradle.kotlin.dsl 包,其中就是有关 Kotlin DSL 的支持的实现。 ?...Gradle Kotlin DSL 的源码路径 有了前面“你的 Gradle 脚本是怎么运行起来的?”...简单来说就是任意一个 Kotlin DSL 的 Gradle 脚本都会把分属于不同阶段的部分拆分开,每一个部分都会编译成两个类,叫做 Program 和 Build_gradle,其中 Program...$$result = (Delete)var9; } } 截止目前,我想大家应该能够明白 Gradle Kotlin DSL 脚本是如何运行的了。 接下来我们就看看如何实现扩展的定义。 2....2.2 定义在 buildSrc 当中 buildSrc 是一个神奇的存在,工程当中所有的脚本都可以访问到它当中的类和函数。

    1.4K20

    Gradle 与 AGP 构建 API: 如何编写插件

    我们建议将自定义 Task 和插件实现放置于 buildSrc 文件夹。 在 buildSrc 中实现插件 在编写更多代码前,让我们将 hello Task 移动至 buildSrc。...我会创建一个新的文件夹,并将其命名为 buildSrc。接下来,我为插件项目创建了一个 build.gradle.kts 文件,这样 Gradle 就会自动将此文件夹添加至构建。...plugins { id ("com.android.application") id ("org.jetbrains.kotlin.android") } apply使用声明式 DSL 添加构建类型是完全没有问题的。不过,在代码中以这种方式让您的插件影响构建是不可能的,或者说难以使用声明式语法进行表达。...在本文中,您已经了解了如何使用新的 Variant API 来在 AndroidComponentsExtension 中注册回调、使用 DSL 对象初始化 Variant、影响已被创建的 Variant

    84630

    Gradle Kotlin DSL指南

    本章详细介绍了主要的Kotlin DSL结构,以及如何使用它与Gradle API进行交互。 如果您有兴趣将现有的Gradle构建迁移到Kotlin DSL,也请参阅专用迁移部分。...使用Gradle插件一章解释了如何在根项目构建脚本中声明一个版本的插件,然后将它们应用到相应子项目的构建脚本中。下面是一个使用三个子项目和三个插件的方法示例。...在本节中,我们将向您展示如何将Android Plugin应用于单个项目构建或多项目构建的根项目。目的是指导构建如何将com.android.application插件标识符映射到可解析工件。...下面的示例演示如何使用named()方法配置现有任务,以及使用register()方法创建新任务。...随着语言的成熟,这将不再是一个问题 Kotlin的编译器参数 这些是在一个应用了Kotlin – DSL插件的项目中编译Kotlin DSL脚本和Kotlin源代码和脚本时使用的Kotlin编译器参数:

    10.4K20

    【Android Gradle 插件】自定义 Gradle 插件模块 ① ( 在 Module 模块中自定义 Gradle 插件 | 创建自定义插件类型模块 | 手动导入相关依赖 )

    文章目录 一、将自定义 Gradle 插件上传到远程仓库中 二、创建自定义插件类型模块 ( Java or Kotlin Library ) 三、手动导入相关依赖 ( Java | Groovy | Gradle...| buildSrc 插件导入 | 构建脚本中自定义插件 | 独立文件 ) 中 , 总结了在 Android Studio 工程中 自定义 Gradle 插件 , 并在 build.gradle 构建脚本...' 或 plugins { id 'com.android.application' } 方式 , 在 Module 模块中 , 导入并使用 Android Gradle 插件 ; 这种方式是将...自定义 Gradle 插件 的 jar 包 上传到了 jcenter / google / mavenCentral 远程仓库 中 ; 二、创建自定义插件类型模块 ( Java or Kotlin...Library ) ---- 选择 " 菜单栏 / New / New Module… " 选项 , 在 " Create New Module " 对话框中 , 选择 创建 " Java or Kotlin

    2.2K30

    从精准化测试看ASM在Android中的强势插入-Gradle插件

    文件夹,是一个系统保留目录,可以直接运行插件代码而不用引用插件包 独立项目:类似module,单独编译成jar使用 创建 Gradle中自带了创建模板项目的方法——gradle init,通过这个指令,...可以引导我们创建一个完整的插件项目。...一般先在项目根目录下创建buildSrc目录,再通过gradle init生成插件需要的文件,这样开发完后,再迁移到单独项目。...在buildSrc中,不用每次publish到App,可以直接参与编译,调试比较方便,但是等插件稳定后,通过独立的插件项目,可以让插件的集成和管理更加方便。...使用 在使用插件的项目根目录Gradle文件中,指定访问mavenLocal,同时,使用groupId、artifactId和version组成对插件的引用,如下所示。

    1.1K40

    Gradle基础|自定义插件并上传到JitPack

    在 Gradle 中,我们可以使用 Java ,Kotlin 以及 Groovy 来写自己的插件,一般而言,使用 Java 和 Koltin 要比使用 Groovy 的执行效果会更好。...、也可以配置和优化项目的构建,比如常见的 android{} 就是 Android Gradle 插件为 Project 对象添加的一个扩展。...示例代码:buildSrc 使用教程: 我们新建一个名为 buildSrc 的目录,然后直接创建一个 build.gradle 文件,如下所示: 代码如下: apply plugin: 'kotlin...:kotlin-stdlib-jdk8:1.6.10" } 接着 sync 一下,然后你就会发现,这个 buildSrc 已经被 Android Studio 自动识别为了一个 java 项目。...,原因是:buildSrc是一个特殊的目录,禁止手动声明; 到了这里,那我们如何创建自己的插件文件呢,直接在 src 下创建相应的文件夹即可,然后创建我们自己的插件文件,如下所示: 上面的这个目录格式

    1.1K10

    【Android 字节码插桩】Gradle插件基础 & Transform API的使用

    编写gradle插件项目主要也是用在当前项目中,不能被外部的项目引用,它的创建有一套固定的流程,步骤如下: 第二种是使用buildSrc,首先再项目的根目录创建一个buildsrc目录, 然后点击make...Gradle 的插件编写之buildSrc buildSrc编写gradle插件项目的是在当前项目下使用,不能也没办法给外部使用,创作流程如下: 1.首先在项目根目录下新建一个buildSrc目录,然后点击...看下面: 如果要使我们编写的gradle插件被外部项目所引用,比如每个AndroidStudio创建的项目都依赖了’com.android.application’这个插件,那么我们就需要使用这种独立项目来完成...gradle插件的开发了,开发步骤如下: 在Android项目上右键,选择New - Module - Java or Kotlin Library创建一个Java library,这里我们取名为plugin...Android项目中使用TransformAPI~ 请看VCR~ 首先 使用Android Studio创建Android项目,这里我取名为TransformDemo~ 按照buildSrc的形式,创建一个文件夹

    56410
    领券