写点什么

Android 使用 Kotlin 重写 Gradle 文件,kotlin 教程

用户头像
Android架构
关注
发布于: 刚刚

versionCode = 1


versionName = "1.0"


testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"


}

编译类型改造

Groovy 语法的编译类型如下所示:


buildTypes {


release {


minifyEnabled false


proguardFiles getDefaultProguardFile ('proguard-android-optimize.txt'), 'proguard-rules.pro'


}


}


利用 Kotlin 可以改造成下面这样:


buildTypes {


getByName("release") {


isMinifyEnabled = false


proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")


}


}

指定 JDK 改造

Groovy 语法的指定 JDK 如下所示:


compileOptions {


sourceCompatibility JavaVersion . VERSION_1_8


targetCompatibility JavaVersion . VERSION_1_8


}


kotlinOptions {


jvmTarget = '1.8'


}


利用 Kotlin 可以改造成下面这样:


compileOptions {


sourceCompatibility = JavaVersion.VERSION_1_8


targetCompatibility = JavaVersion.VERSION_1_8


}


kotlinOptions {


jvmTarget = "1.8"


}

依赖的改造

Groovy 语法的依赖如下所示:


dependencies {


implementation "org.jetbrains.kotlin:kotlin-stdlib:1.4.31"


implementation 'androidx.core:core-ktx:1.2.0'


implementation 'androidx.appcompat:appcompat:1.1.0'


implementation 'com.google.android.material:material:1.1.0'


implementation 'androidx.constraintlayout:constraintlayout:1.1.3'


}


利用 Kotlin 可以改造成下面这样:


dependencies {


implementation("org.jetbrains.kotlin:kotlin-stdlib:1.4.31")


implementation("androidx.core:core-ktx:1.2.0")


implementation("androidx.appcompat:appcompat:1.1.0")


implementation("com.google.android.material:material:1.1.0")


implementation("androidx.constraintlayout:constraintlayout:1.1.3")


}

完整代码展示

到此为止,我们已经将自动生成 app/build.gradle 里面的内容全部改造完了,我们来看下完整代码,如下所示:


plugins {


id("com.android.application")


kotlin("android")


kotlin("android.extensions")


}


android {


compileSdkVersion(30)


buildToolsVersion("30.0.3")


defaultConfig {


applicationId = "com.example.kotlingradledsl"


minSdkVersion(23)


targetSdkVersion(30)


versionCode = 1


versionName = "1.0"


testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"


}


buildTypes {


getByName("release") {


isMinifyEnabled = 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.31")


implementation("androidx.core:core-ktx:1.2.0")


implementation("androidx.appcompat:appcompat:1.1.0")


implementation("com.google.android.material:material:1.1.0")


implementation("androidx.constraintlayout:constraintlayout:1.1.3")


}


向 app/build.gradle 加入更高级的特性




上面的 app/build.gradle 里面的内容都是最基本的,我们还需要加入一些更高级的特性,比如自动打包、输出 apk 名称修改等,在上面这个 app/build.gradle 的基础上,我们来开始完善。

自动打包

想要实现自动打包,我们首先要新建一个签名文件,如何实现签名文件这里就不说了,有了签名文件之后,我们就需要在 app/build.gradle 里面进行配置,我们先来看一下 Groovy 语法是如何进行配置的,如下所示:


//签名配置


signingConfigs {


release {


// 别名


keyAlias 'zjgsu'


//别名密码


keyPassword '123456'


//路径


storeFile file('../app/src/main/jks/kotlindsl.jks')


//密码


storePassword '123456'


}


}


然后在编译类型中,release 类型里引用即可,如下所示:


signingConfig signingConfigs.release


利用 Kotlin 可以改造成下面这样:


// 签名类型


signingConfigs {


register("release") {


// 别名


keyAlias = "zjgsu"


// 别名密码


keyPassword = "123456"


// 路径


storeFile = file("src/main/jks/kotlindsl.jks")


// 签名文件密码


storePassword = "123456"


}


}


然后在编译类型中,release 类型里引用即可,如下所示:


signingConfig = signingConfigs.getByName("release")


配置完签名之后,打包 apk 可以直接用命令打包们也可以直接使用 Android studio 提供的工具打包,如下所示:



直接双击 assemble 就可以打包 apk 了,打包出来的 apk 如下所示:


输出类型配置

app-debug 和 app-release 就是我们需要的 apk 了,但是这个名字肯定不是我们需要的,所以我们还需要在 app/build.gradle 中对输出类型进行配置,否则我们每次打包 apk 都得手动改一次名字,太麻烦了,我们先来看一下 Groovy 语法是如何进行配置的,如下所示:


// 输出类型配置


android.applicationVariants.all { variant ->


def buildType = variant.buildType.name


def fileName


variant.outputs.each {


if (buildType == "release") {


fileName = "APP_NAMEV-${defaultConfig.versionName}.apk"


} else if (buildType == "debug") {


fileName = "APP_NAMEV-{defaultConfig.versionName}_{buildType}.apk"


}


it.outputFileName = fileName


}


}


利用 Kotlin 可以改造成下面这样:


// 输出类型


android.applicationVariants.all {


// 编译类型


val buildType = this.buildType.name


outputs.all {


// 判断是否是输出 apk 类型


if (this is com.android.build.gradle.internal.api.ApkVariantOutputImpl) {


this.outputFileName = "KOTLIN_DSL_V{defaultConfig.versionName}_buildType.apk"


}


}


}


我们再利用 assemble 来打包 apk ,打包出来的 apk 如下所示:



利用 buildSrc 来统一管理 Gradle 依赖版本




我们在使用 Groovy 语言构建的时候,往往会抽取出一个 build_config.gradle 来作为全局的变量控制,而在 Kotlin 语言中,想要统一管理 Gradle 的依赖版本,则需要使用 buildSrc,有兴趣的可以去看下官网的介绍


我们来看看如何使用,首先需要在根目录下创建一个 buildSrc 的文件夹,然后创建一系列目录,如下图:




目录创建好之后,就需要编写 settings.gradle.kts,如下所示:


rootProject.buildFileName = "build.gradle.kts"


settings.gradle.kts 编写完成后,再来编写 build.gradle.kts,代码如下所示:


apply {


plugin("kotlin")


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


}


buildscript {


repositories {


gradlePluginPortal()


}


dependencies {


classpath(kotlin("gradle-plugin", "1.4.31"))


}


}


dependencies {


implementation(gradleKotlinDsl())


implementation(kotlin("stdlib", "1.4.31"))


}


repositories {


gradlePluginPortal()


}


编译成功之后,我们就可以编写 KotlinConstants.kt 公共类了,具体代码如下所示:


//全局常量


object KotlinConstants {


//Gradle 版本


const val gradle_version = "4.1.3"


//Kotlin 版本


const val kotlin_version = "1.4.31"


}


//应用配置


object AppConfig {


//依赖版本


const val compileSdkVersion = 30


//编译工具版本


const val buildToolsVersion = "30.0.3"


//包名


const val applicationId = "com.example.kotlingradledsl"


//最小支持 SDK


const val minSdkVersion = 23


//当前基于 SDK


const val targetSdkVersion = 30


//版本编码


const val versionCode = 1


//版本名称


const val versionName = "1.0"


}


//依赖配置


object DependenciesConfig {


//Kotlin 基础库


const val STD_LIB = "org.jetbrains.kotlin:kotlin-stdlib:${KotlinConstants.kotlin_version}"


}


有了 KotlinConstants.kt 之后,我们就可以在 .gradle 文件中使用了,如 app/build.gradle.kts 代码如下所示:


// 引用插件


plugins {


id("com.android.application")


kotlin("android")


kotlin("android.extensions")


}


// Android 属性


android {


compileSdkVersion(AppConfig.compileSdkVersion)


buildToolsVersion(AppConfig.buildToolsVersion)


defaultConfig {


applicationId = AppConfig.applicationId


minSdkVersion(AppConfig.minSdkVersion)


targetSdkVersion(AppConfig.targetSdkVersion)


versionCode = AppConfig.versionCode


versionName = AppConfig.versionName


testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"


}


// 签名类型


signingConfigs {


register("release") {


// 别名


keyAlias = "zjgsu"


// 别名密码


keyPassword = "123456"


// 路径

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android 使用 Kotlin 重写 Gradle 文件,kotlin教程