مهاجرت از Groovy DSL به Kotlin DSL


قبل از وارد شدن به مبحث اصلی بهتر است در ابتدا یک تعریف مختصری داشته باشیم از Groovy و DSL و kotlin DSL

در واقع Groovy یک زبان بالغ در jvm است که برای توسعه دهندگان جاوا امکان ادغام یکپارچه با برنامه و کتابخانه‌های موجود را فراهم می‌کند.

و اما DSL(Domain Specific Language) زبانی است شامل واژگان غنی که برای یک دامنه خاص ساخته شده و بین برنامه نویسان به اشتراک گذاشته شده است.

یکی از ویژگی‌های خوب Groovy که امکان ایجاد DSL را فراهم کرده syntax قوی این زبان است.

حال kotlin با معرفی Kotlin DSL یک جایگزین جدید برای Groovy DSL ارایه می‌دهد.

در ادامه با اعمال چند گام می‌توانید از Groovy DSL به Kotlin DSL مهاجرت کنید

گام اول: ارتقا دادن gradle

در ابتدا gradle شما باید Gradle 4.10 یا بالاتر باشد که به راحتی در فایل gradle-wrapper.properties می‌توانید نسخه خود را ارتقا دهید

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip

اطمینان حاصل کنید که از آخرین نسخه Android Studio استفاده می کنید.

گام دوم: KTS extension

قبل از شروع بهتر است با KTS extension آشنا شوید:

در واقع kts پسوند ساختارهای Gradle Kotlin است. که در ادامه راه باید فایل build.gradle را به build.gradle.kts تغییر نام دهیم.

در این گام باید سه فایل را تغییر دهیم :

  • Root > settings.gradle.kts

روی فایل settings.gradle بروید و آن را تغییر نام دهید (Shift + F6) به settings.gradle.kts سپس باید محتوای آن را تغییر دهید.

// before
include ':app'
// after
include(&quot:app&quot)


  • Root > build.gradle.kts

فایل build.gradle را به build.gradle.kts تغییر نام دهید و سپس groovy را به کاتلین تبدیل کنید

befor

buildscript {
    ext.kotlin_version = '1.3.61'
    repositories {
        google()
        jcenter()     
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.1'
        classpath &quotorg.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version&quot
    }
}
allprojects {
    repositories {
        google()
        jcenter()      
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

after

buildscript {
    repositories {
        google()
        jcenter()      
    }
    dependencies {
        classpath (&quotcom.android.tools.build:gradle:3.6.2&quot)
        classpath (&quotorg.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61&quot)
    }
}
allprojects {
    repositories {
        google()
        jcenter()      
    }
}
tasks.register(&quotclean&quot, Delete::class) {
    delete(rootProject.buildDir)
}


  • App > build.gradle.kts

در اینجا هم تغییر نام را انجام دهید و جایگزینی کد را شروع کنید.

من از plugins شروع کردم

//befor
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

//after
plugins{
    id(&quotcom.android.application&quot)
    kotlin(&quotandroid&quot)
    kotlin(&quotandroid.extensions&quot)
    kotlin(&quotkapt&quot)
}

تغییرات بلاک dependencies و android را در زیر ببینید

befor
befor
after
after

سورس کامل را میتوانید در آدرس زیر ببینید.

https://github.com/fvarmayar992/migrate-GroovyDSL-to-kotlinDSL