赞
踩
kts是指Kotlin脚本,这是gradle 在构建配置文件中使用的一种Kotlin语言形式,kotlin 脚本是可以从命令行运行的Kotlin代码。 kotlin DSL 主要是指Android gradle 插件kotlin DSL ,有时候也指底层的gradle kotlin DSL。用Kotlin 编写的gradle build 文件使用 .gradle.kts 作为文件的扩展名。
从事Android已经很多年了,也尝试学习过gradle。时到如今,回过头来思考的时,思考了下整个学习过程中的痛点,无法直接点击查看源码是真的痛苦,通过implementation 导入源码倒是一种思路,难受总归是难受。
那么有什么方式可以直接点击跳转到源码吗?那就是KTS。我的想法是直接从简单的Demo工程转换为KTS,我们通过KTS去理解调用源码,然后切换成groovy去写脚本。
大致修改步骤:
这个是项目最开始识别的文件,同时也是最简单的文件。
rootProject.name = "StartDebug"
include(":app")
重要一点,就是基于Kotlin语法。只有两行代码。还是有明显的区别的:
rootProject.name = "StartDebug"
这个代码调用的是rootProject.setName() 函数。引导组件也变成了函数的调用。
这个是相对复杂的,因为涉及到导入插件,设置Android 闭包属性。导入第三方库,编译配置等等。因为插件是根目录下的build.gradle 配置的。所以说,建议优先改这个,要不然根目录下的build.gradle 出问题了,会提示这里面的插件找不到。 人都麻了。
plugins { id("com.android.application") } android { compileSdkVersion(30) buildToolsVersion("30.0.2") defaultConfig { applicationId="com.nuoye.myrouter" setMinSdkVersion(16) setTargetSdkVersion(30) versionCode =1 versionName ="1.0" testInstrumentationRunner="androidx.test.runner.AndroidJUnitRunner" } buildTypes { getByName("release"){ setMinifyEnabled(false) proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } compileOptions { sourceCompatibility =JavaVersion.VERSION_1_8 targetCompatibility =JavaVersion.VERSION_1_8 } } dependencies { implementation ("androidx.appcompat:appcompat:1.2.0") implementation ("com.google.android.material:material:1.2.1") implementation ("androidx.constraintlayout:constraintlayout:2.0.1") implementation(project(":bindview")) testImplementation ("junit:junit:4.+") androidTestImplementation ("androidx.test.ext:junit:1.1.2") androidTestImplementation ("androidx.test.espresso:espresso-core:3.3.0") }
通过上面可运行代码和Groovy版本进行对比。我们发现buildType 改动较大。其他都是基于Kotlin语法进行更改。
这个相对而言较为地复制一点,因为他里面的脚本代码较多。
buildscript { repositories { google() mavenCentral() } dependencies { classpath("com.android.tools.build:gradle:4.0.2") } } allprojects { repositories { google() mavenCentral() jcenter() // Warning: this repository is going to shut down soon } } tasks{ register("clean",Delete::class){ setDelete(buildDir) } }
上面是修改完成后的代码,通过上面的代码和原来Groovy代码进行对比。我们其实只是修改了几个位置:
在根目录下:
ext{
set("luoye","nuoye")
set("luoye1","nuoye")
set("luoye2","nuoye")
}
获取:
rootProject.ext.get("luoye")
flavorDimensionList.apply {
add("channel")
add("cpu")
}
productFlavors {
create("baidu") {
dimension="channel"
}
create ("huawei"){
dimension="cpu"
}
}
其实,这只是一种思路。可能我比较笨,我更喜欢有代码提示和可以点击查看源码,groovy那种没有提示的代码,写着贼难受。当然可以使用 implementation 或者仅仅编译时导入的那种模式导入源码。
我在buildSrc 中这么导入gradle和groovy
//gradle sdk
compile gradleApi()
//groovy sdk
compile localGroovy()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。