Android
Kotlin

Androidの開発でkotlin-stdlib, kotlin-stdlib-jre7, kotlin-stdlib-jdk7, kotlin-stdlib-jdk8どれ使えばいいの問題

だいたい以下の会話通りなんですが、記憶が薄れてきて忘れそうだったので軽くまとめておきます(だるまさん話していただいてありがとうございました :bow: )

kotlin-stdlib-jre7はdeprecatedなので、それは除外で良さそうです。なにかツッコミあればください :bow:

Min Sdk Version 使ったほうが良さそうなライブラリ
24以上 stdlib-jdk8
21以上 stdlib-jdk7
それ以下 stdlib

stdlibとstdlib-jdk7とstdlib-jdk8の違い

それぞれstdlibをベースに入っている拡張関数が違います。
例えばstdlib-jdk7はJava7のAutoClosableクラスに対するuseメソッドが入っていたり、Java8のstdlib-jdk8ではStreamを返すような拡張関数が入っています。

stdlib-jdk7がなぜ21以上?

stdlib-jdk7はほぼAutoClosableクラスに対するメソッドしか入っておらずAutoClosableクラスはSdk Versionが19なので、Sdk Versionが19であれば現状stdlib-jdk7にしちゃっても問題ありません。


image.png


しかし例えばJava7のForkJoinPoolクラスなどはSdk Version21で追加されています。そのためそれを返すような拡張関数がバージョンアップで入った場合にクラッシュを引き起こしてしまうなどが考えられます。そのため、21以上としています。


image.png


またAutoClosableクラスに対するメソッドについてはほぼ利用されることはなく、代わりにstdlibに入っているCloseableの拡張関数が利用できるのでstdlib-jdk7を使わないと困るという場面が現状ありません。
stdlib-jdk7に便利なメソッドが追加された場合にまた検討してみるのが無難そうです。

stdlib-jdk8がなぜ24以上?

StreamがAPI Level 24なためです。
image.png