Android Gradle Kotlin DSL,使用Kotlin来构建Gradle

Demo

https://gitee.com/olleh/my-kotlin-dsl.git

Gradle Kotlin DSL

  • 我们现在Android Studio是使用Gradle来编译,而默认的构建语言是Groovy,我们可以用Kotlin来代替Groovy,Groovy构建脚本是.gradle结尾, Koltin构建的脚本则是.gradle.kts结尾
  • 优势:
    • 节约Groovy的学习成本
    • 错误提示
    • 代码自动补全
    • 源码间可以相互转跳

开始改造

  • settings.gradle
  • project/build.gradle
  • app/build.gradle

settings.gradle

  • 重命名为settings.gradle.kts
//定义了主Module的路径
include(":app")
//定义了项目的名称
rootProject.name = "MyGradleKotlinDsl"

project/build.gradle

  • 重命名为build.gradle.kts
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        //kotlin中的函数需要加上括号
        classpath("com.android.tools.build:gradle:4.1.2")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.21")

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

//重写clean任务,删除build文件夹
tasks {
    val clean by registering(Delete::class) {
        delete(buildDir)
    }
}

app/build.gradle

  • 重命名为build.gradle.kts
plugins {
    id("com.android.application")
    id("kotlin-android")
}

android {
    compileSdkVersion(30)
    buildToolsVersion("30.0.3")

    defaultConfig {
        applicationId("com.zhangyu.mykotlindsl")
        minSdkVersion(22)
        targetSdkVersion(30)
        versionCode(1)
        versionName("1.0")

        testInstrumentationRunner("androidx.test.runner.AndroidJUnitRunner")
    }

    buildTypes {
        getByName("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"
    }
}

dependencies {

    implementation("org.jetbrains.kotlin:kotlin-stdlib:1.4.21")
    implementation("androidx.core:core-ktx:1.3.2")
    implementation("androidx.appcompat:appcompat:1.2.0")
    implementation("com.google.android.material:material:1.2.1")
    implementation("androidx.constraintlayout:constraintlayout:2.0.4")
    testImplementation("junit:junit:4.+")
    androidTestImplementation("androidx.test.ext:junit:1.1.2")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.3.0")
}

统一依赖管理(ext扩展函数的替代)

  • 在根目录下手动建立以下文件结构
    在这里插入图片描述
  • settings.gradle.kts
rootProject.buildFileName = "build.gradle.kts"
  • build.gradle.kts
apply {
    plugin("kotlin")
}
buildscript {
    repositories {
        gradlePluginPortal()
    }
    dependencies { classpath ("org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.21") }
}
dependencies {
    implementation(gradleKotlinDsl())
    implementation("org.jetbrains.kotlin:kotlin-stdlib:1.4.21")
}
repositories {
    gradlePluginPortal()
}
  • Versions
object Versions {
    //kotlin版本
    const val KotlinVersion = "1.4.21"

    //SDK版本
    const val compileSdkVersion = 30
    const val buildToolsVersion = "30.0.3"
    const val minSdkVersion = 22
    const val targetSdkVersion = 30

    //依赖
    const val retrofit = "com.squareup.retrofit2:retrofit:2.9.0"
    const val retrofit_converter_gson = "com.squareup.retrofit2:converter-gson:2.9.0"
    const val retrofit_logging_interceptor = "com.squareup.okhttp3:logging-interceptor:4.7.2"
}
  • 调用的地方,通过Version来调用
    compileSdkVersion(Versions.compileSdkVersion)
    buildToolsVersion(Versions.buildToolsVersion)
    
    implementation(Versions.retrofit)
    implementation(Versions.retrofit_converter_gson)
    implementation(Versions.retrofit_logging_interceptor)

参考资料

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值