判断迷ってます。何か間違ってたら教えてください。
ライブラリにKotlinを使ってる場合、アプリ側に多少デメリットがあります。
アプリサイズ
Kotlinを使ったライブラリを依存関係に追加すると、こんな感じにKotlinのランタイムのライブラリも入ってきます。
\--- project :libkotlin
\--- org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.21
\--- org.jetbrains.kotlin:kotlin-stdlib:1.2.21
\--- org.jetbrains:annotations:13.0
アプリ側がJavaの場合は、その分、単純にアプリサイズが増加します。
とは言え、ライブラリ自体そんなに大きくないので、すごく増えるということはなさそうです。
ココに書いてる通り、全部で約934KBで、Proguardを使うともっと抑えられると思います。
Kotlin has a rather small runtime file size: the library is approximately 934KB (as of 1.2.21). This means Kotlin adds just a little to .apk file size.
無視できるレベルかなと思います。
バージョンのコンフリクト
では、アプリ側もKotlin使っていれば問題ないかといえば、そうではないです。
ライブラリ側とアプリ側のバージョンのコンフリクトが問題なる可能性があります。
+--- org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.21
| \--- org.jetbrains.kotlin:kotlin-stdlib:1.2.21
| \--- org.jetbrains:annotations:13.0
\--- project :libkotlin
\--- org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.0 -> 1.2.21 (*)
バージョンがコンフリクトした場合は、Gradleがデフォルトで自動で最新の方に合わせます。この例だと、アプリ側が 1.2.21
で、ライブラリ側が 1.2.0
を使っていますが、依存関係を見ると 1.2.0 -> 1.2.21
と変更されています。
詳しくは ココ を参考にしてください。
ちょっとKotlinの事情に詳しくないですが、今後バージョンアップで何かしらAPIが廃止された場合にライブラリ側が古いと実行時エラーになったりする可能性があります。
AOSP
少し内容とは外れるのですが、参考に。AOSPもバージョンのコンフリクトを避けるために公開APIの箇所にはKotlinを使わない方針ですね。
ただ、DataBindingやRoomのAnnotation ProcessorではKotlinを使ってます。直接アプリ側が触れることはないので、問題ない感じですね。
まとめ
Kotlinで書いてあるライブラリもいくつか見たことありますが、実際どうなのでしょう。
Javaで書いておけば問題は回避できるけど、Kotlin使いたいって気持ちです。
難しい…
追記
Kotlinのバージョン互換についてのページを教えてもらいました。
あと、Kotlin使うかどうかはライブラリの目的に依存する、というアドバイスもいただきました。自社のKotlinアプリに使うのが前提ならKotlin使えばいいし、広く使われるようなものならJavaを使うという感じ。