概要
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が良いサンプルとなるのでご覧いただくことをお勧めします。