使用Kotlin編寫(xiě)Gradle腳本

說(shuō)明

Android應(yīng)用開(kāi)發(fā)中,離不開(kāi)Gradle腳本的構(gòu)建,它的重要性不言而喻,它是使用一種基于Groovy的特定領(lǐng)域語(yǔ)言(DSL)來(lái)聲明項(xiàng)目設(shè)置,拋棄了基于XML的各種繁瑣配置。很多人可能知道Gradle腳本使用Groovy語(yǔ)言來(lái)編寫(xiě),但是可能并不會(huì)Groovy語(yǔ)言,只是記住固定的配置,比如:我們要依賴(lài)三方庫(kù),只需要這樣配置即可:implementation 'androidx.appcompat:appcompat:1.0.2'。

不懂Groovy語(yǔ)言不影響正常的使用,但是有時(shí)候我們想通過(guò)Gradle腳本來(lái)實(shí)現(xiàn)一些特殊的功能,比如:打包后自動(dòng)上傳到蒲公英,方便測(cè)試團(tuán)隊(duì)測(cè)試,以及使用Gradle來(lái)記錄每個(gè)版本的更新信息并上傳到服務(wù)器等等,這時(shí)候需要我們自己來(lái)實(shí)現(xiàn)了,這就需要我們了解Groovy語(yǔ)言。當(dāng)然因?yàn)?strong>Groovy語(yǔ)言它是對(duì)Java代碼進(jìn)行了擴(kuò)展,我們完全可以使用Java代碼來(lái)編寫(xiě),但是語(yǔ)法就顯得有些啰嗦。而學(xué)習(xí)Groovy語(yǔ)言是需要一定成本的,并且在Android Studio是沒(méi)有語(yǔ)法提示的。

Kotlin Meets Gradle

Gradle團(tuán)隊(duì)為Gradle開(kāi)發(fā)了一種新的基于Kotlin的構(gòu)建語(yǔ)言,稱(chēng)之為Gradle Script Kotlin,從Gradle 3.0開(kāi)始支持。也就是說(shuō)我們可以使用Kotlin來(lái)編寫(xiě)Gradle腳本了,當(dāng)使用Kotlin來(lái)編寫(xiě)Gradle腳本的時(shí)候一切都變得美好了:

  • 腳本代碼可以自動(dòng)補(bǔ)全了
  • 源碼之間可以互相跳轉(zhuǎn)了
  • 插件源碼更容易看懂了
  • 支持重構(gòu)了

官方說(shuō)明

使用Kotlin編寫(xiě)Gradle

下面我們就用kotlin來(lái)改造項(xiàng)目中的Gradle腳本。Gradle Script Kotlin腳本以.gradle.kts后綴結(jié)尾。所以,我們需要將工程根目錄gradle文件更名.gradle.kts。

1.更改settings.gradle

將工程根目錄settings.gradle更名為settings.gradle.kts。


更改后文件報(bào)錯(cuò)了,我們需要改成Kotlin語(yǔ)法,這里就是一個(gè)方法調(diào)用。修改后如下所示:

可以看到,參數(shù)含義自動(dòng)提示了。

2.更改根目錄下的build.gradle

同理,先修改擴(kuò)展名,再改成Kotlin語(yǔ)法,修改后的文件如下所示:

由于我們修改了build.gradle的文件名,為了保證工程可以使用這個(gè)腳本,需要在settings.gradle.kts中添加一行代碼,讓Gradle知道使用build.gradle.kts腳本構(gòu)建。

include(":app")
rootProject.buildFileName = "build.gradle.kts"

3.修改app模塊中的build.gradle

操作跟上面的步驟一樣,修改后的文件內(nèi)容如下所示:

從上面的示例中我們可以看到修改成gradle.kts后,語(yǔ)法有了提示,并且點(diǎn)擊可以直接跳轉(zhuǎn)到源碼。并且更加容易理解每一步的配置。

使用Gradle Script Kotlin后,我們可以用Kotlin來(lái)開(kāi)發(fā)插件或者編寫(xiě)腳本,如果開(kāi)發(fā)插件,可以改成下面的寫(xiě)法了:

class MyPlugin : Plugin<Project> {

    override fun apply(project: Project) {
        project.run {
            tasks {
                register("myCopyTask", Copy::class) {
                    group = "sample"
                    from("build.gradle.kts")
                    into("build/copy")
                }
            }
        }
    }
}

有沒(méi)有感覺(jué)很親切。更多示例請(qǐng)查看官方Demo。

Kotlin實(shí)戰(zhàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容