🦁

Kotlin Android Extensions から View Binding に置き換える

2021/01/12に公開

今更ですが、Kotlin Android Extensions が非推奨になりましたね。
公式としては、View Binding を使うことが推奨されています。

./gradlew buildコマンドを実行すると、以下のような警告文が出力されます。

Warning: The 'kotlin-android-extensions' Gradle plugin is deprecated. Please use this migration guide (https://goo.gle/kotlin-android-extensions-deprecation) to start working with View Binding (https://developer.android.com/topic/libraries/view-binding) and the 'kotlin-parcelize' plugin.

修正方法

例えばapp/build.gradleが以下のように記載されていたとします。

app/build.gradle
plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-android-extensions'
    id 'kotlin-kapt'
    id 'dagger.hilt.android.plugin'
}

android {
    ...
    androidExtensions {
        experimental = true
    }
    buildFeatures {
        dataBinding = true
    }
}
...

まず、androidExtensionsおよびid 'kotlin-android-extensions'を削除し、buildFeaturesviewBinding = trueを追記します。

app/build.gradle
plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
    id 'dagger.hilt.android.plugin'
}

android {
    ...
    buildFeatures {
        dataBinding = true
        viewBinding = true
    }
}
...

そして、ソースコード内で Kotlin Android Extensions を使用している箇所を View Binding に置き換えます。

// Reference to "name" TextView using synthetic properties.
name.text = viewModel.nameString

// Reference to "name" TextView using the binding class instance.
binding.name.text = viewModel.nameString

Parcelable を使用している場合

ソースコード内で@Parcelizeアノテーションを使用している場合は、pluginsid 'kotlin-parcelize'を追記します。

app/build.gradle
plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-parcelize'
    id 'kotlin-kapt'
    id 'dagger.hilt.android.plugin'
}
...

参考 URL

Discussion