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)

参考资料

猜你喜欢

转载自blog.csdn.net/yu540135101/article/details/113689796