いろいろなサンプルやWebの情報を参考にAndroidアプリを開発していると、build.gradleがだんだんカオスになりがちです。そんなgradleファイルの記述の中でも、xxx-ktx
というモジュールの依存関係は、サンプルによって書かれていたりいなかったり、削除したらエラーになったりならなかったりして、結局どんなときに必要なのか気になったので調べました。
そもそもktxとは何ぞや?
Android Developersによると、
Android KTX は、Android Jetpack およびその他の Android ライブラリに含まれる Kotlin 拡張機能セットです。
https://developer.android.com/kotlin/ktx?hl=ja
とのこと。ktxはおそらく、KoTlin eXtensionの略だと思われます。AndroidのAPIは基本的にJavaとKotlinで同じものが用意されていますが、拡張関数やコルーチンなどのKotlinの便利な機能を使って、より簡潔にソースコードを書けるように用意されたKotlin専用API、それがktx、ということのようです。
サンプルによって書かれていたりいなかったりする理由の一つが、Kotlin専用ということだと思います。Javaで書かれたサンプルではktxモジュールは使われていないはずです。
ktxにはどんなモジュールがある?
ktxモジュールの一覧もAndroid Developersで見つけました。AndroidXモジュールに含まれるKTXモジュールは以下の表のとおりです。各KTXモジュールは、Core KTXのように複数のパッケージから構成されている場合と、Fragment KTXのように単一のパッケージで構成されている場合があります。
KTXモジュール | build.gradleに追加する依存関係 |
Core KTX | androidx.core:core-ktx |
Collection KTX | androidx.collection:collection-ktx |
Fragment KTX | androidx.fragment:fragment-ktx |
Lifecycle KTX | androidx.lifecycle:lifecycle-runtime-ktx |
LiveData KTX | androidx.lifecycle:lifecycle-livedata-ktx |
Navigation KTX | androidx.navigation:navigation-runtime-ktx androidx.navigation:navigation-fragment-ktx androidx.navigation:navigation-ui-ktx |
Palette KTX | androidx.palette:palette-ktx |
Reactive Streams KTX | androidx.lifecycle:lifecycle-reactivestreams-ktx |
Room KTX | androidx.room:room-ktx |
SQLite KTX | androidx.sqlite:sqlite-ktx |
ViewModel KTX | androidx.lifecycle:lifecycle-viewmodel-ktx |
WorkManager KTX | androidx.work:work-runtime-ktx |
結局ktxの記述は必要?
KTXの正体が判明したところで、build.gradle
のxxx-ktxの依存関係の記述は、結局必要なのでしょうか。
まず、ソースコードがJavaで書かれている場合は不要です。ktxの依存関係を追加してもJavaでは意味がありません。
あとは、実際にKTXで定義されている関数などを使う場合は、依存関係を追加する必要があります。Android DevelopersのReferenceでパッケージのOverviewのページを見ると、Extension functionsという項目が書かれているパッケージがあります。これがKTXの関数ですので、ここに書かれている関数を使いたい場合は、build.gradleに依存関係を追加する必要があります。例えばandroidx.core.animation
パッケージのOverviewのページを見ると、Extension functionsにいくつかの関数の説明があることが分かります。addListener()
などの関数を使うには、
dependencies {
implementation("androidx.core:core-ktx:1.6.0")
}
のようにbuild.gradleに書く必要があります。
よく使うKTXモジュール
統計を取ったわけではないですが、よく使うKTXモジュールはCore KTX, Fragment KTXあたりかなあと思います。
Core KTXはAndroid Studioで新規プロジェクトを作成すると、デフォルトで依存関係が追加されています。Animationなどの便利な拡張機能が定義されているので、KTXの機能と知らずに使っているケースもあるのではないかと思います。
Fragment KTXには、FragmentManager
の拡張関数や、Fragmentの結果を受け渡すためのAPIなどが用意されていて、これも便利です。
まとめ
build.gradleのxxx-ktxという記述は、Kotlinによる拡張機能を含んだKTXモジュールへの依存関係でした。Android DevelopersのReferenceのExtension functionsに書かれている関数を使うためには、KTXモジュールへの依存関係を追加する必要があります。