1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Groovy -> Kotlin DSLの移行Tips

Posted at

概要

Android Studio Giraffeより、ビルドスクリプトの推奨がKotlin DSLになりました。新規作成するプロジェクトにおいて古いプロジェクトのビルド設定などを参考にする際、Groovyで記述されているbuild.gradleに遭遇することはあるはずです。
そのようなbuild.gradleをどう移行すれば良いかのTipsを備忘録としてまとめます。

定数の宣言

バージョン設定などで使用していたfinalはvalに書き直します。

build.gradle
final room_version = "2.5.0"
implementation("androidx.room:room-runtime:$room_version")
build.gradle.kts
val room_version = "2.6.1"
implementation("androidx.room:room-runtime:$room_version")

buildFlavorの設定

build.gradle
flavorDimensions = ["env"]
productFlavors {
    prod {
        dimension "env"
        applicationIdSuffix ""
        versionNameSuffix ""
    }
    stg {
        dimension "env"
        applicationIdSuffix ".stg"
        versionNameSuffix "-stg"
    }
    ...
build.gradle.kts
flavorDimensions.add("env")
productFlavors {
    create("prod") {
        dimension = "env"
        applicationIdSuffix = ""
        versionNameSuffix = ""
    }
    create("stg") {
        dimension = "env"
        applicationIdSuffix = ".stg"
        versionNameSuffix = "-stg"
    }
    ...

local.propertiesなどのファイルから値をロードする

build.gradle
def properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
def secret = properties.getProperty("SECRET")
build.gradle.kts
val keystoreFile = project.rootProject.file("local.properties")
val properties = Properties()
properties.load(keystoreFile.inputStream())
val secret = properties.getProperty("SECRET") ?: ""

gradle.propertiesからのロード

gradle.propertiesにfoo=などの記述があればそのまま指定できましたが、project.propertiesから取得するようにします。

build.gradle
buildConfigField("String", "FOO", '"' + "${foo}" + '"')
build.gradle.kts
buildConfigField("String", "FOO", '"' + "${project.properties["foo"] ?: ""}" + '"')

マニュフェストのプレースホルダー

配列にするのではなく、キーで直接指定します。

build.gradle
manifestPlaceholders = [
    appLabel: "アプリ名",
    foo: "bar"
]
build.gradle.kts
manifestPlaceholders["appLabel"] = "アプリ名"
manifestPlaceholders["foo"] = "bar"

プラグインの指定

()で囲います。

build.gradle
id "com.starter.easylauncher" version "6.2.0"
build.gradle.kts
id("com.starter.easylauncher") version "6.2.0"

ktlintの設定

のリンクを参照ください。

JVMの指定

build.gradle
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KaptGenerateStubs).configureEach {
    kotlinOptions.jvmTarget = JavaVersion.VERSION_17.toString()
}
build.gradle.kts
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
    kotlinOptions {
        jvmTarget = "17"
    }
}

まとめ

アプリケーションコードでもあまり頻繁に触れることのない部分です。書き方は当然似ますが、書き換えとなるとソースが少ないの現状があるなのでTipsなどを活用ください。
どんな記述がモダンなのかはNow In Androidが良いサンプルとなるのでご覧いただくことをお勧めします。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?