Open1

【Google I/O 2023】What's new in Kotlin for Android

watabeewatabee

What's new in Kotlin for Android

https://www.youtube.com/watch?v=QGtB--ABiNM&list=PLOU2XLYxmsIIwZQkAPhJZg8jaNrrHk1DH&index=39

State of Kotlin (0:31~)

  • 2017年: Android で Kotlin の公式サポートが発表
  • 2019年: Android の開発は Kotlin-first(ライブラリやドキュメントなどを Kotlin をメインに)
  • トップ1000のアプリの 95% が Kotlin を使用(ライブラリなどの間接コードを含む)
    • 70% が自身のコードに Kotlin を使用
    • 55% が自身のコードに Kotlin Coroutines を使用
  • Compose
    • Kotlin Coroutines やラムダ、拡張関数などの言語機能を使って構築される
    • Kotlin コンパイラによって状態管理のロジックが生成される
  • Learn Compose
    • Jetpack Compose for Android Developers : goo.gle/compose-for-android-devs
    • Android Basics with Compose : goo.gle/abc

Kotlin @ Google (2:34~)

  • 2019年から Android のプロジェクトで、2022年からサーバーサイドで Kotlin を使用
  • 15M+ の行の Kotlin コード
  • 70+ の Android アプリで Kotlin を使用
  • Kotlin Foundation に参加

The Kotlin 2.0 compiler (3:31~)

  • goo.gle/k2-blog
  • Kotlin コンパイラを再構築
  • コードネーム K2
  • Kotlin 2.0 からデフォルトコンパイラに
  • 現状のコンパイラと比較して最大2倍の速度改善
  • 新しいコンパイラは将来より多くの Kotlin の言語機能の進化を可能にする
  • リリースのロードマップ
    • 2024年中旬
      • Kotlin 2.0 リリース & K2 がデフォルト
      • Android Studio での K2 の統合(コード補完、リファクタリングなどの機能)
    • 2023年中旬
      • 1.9.x リリース & K2 ベータ
      • Compose & KSP
  • K2 によって Kotlin のコードを変更する必要はないが、コンパイラプラグインはサポートが必要になるかもしれない

Kotlin 2.0 コンパイラを試す方法

// build.gradle.kts
kotlin {
    sourceSets.all {
        languageSettings {
            languageVersion = "2.0"
        }
    }
}

Kotlin DSL as the defualt for Gradle builds (5:21~)

  • Android Studio Giraffe で Kotlin DSL がデフォルトで使用されるようになった
    • goo.gle/migrate-to-kts
  • ビルドスクリプトで Kotlin を使うことによっていくつか改善点がある
    • コードのヒントやシンタックスエラーがより正確
    • 型やメソッドのドキュメントを得られたり、詳細を知りたければ ctrl + クリックで対象のソースコードへ飛ぶことができる
  • Gradle Version Catalogs
    • プロジェクトの依存関係の定義
    • goo.gle/migrate-to-catalogs
  • Now in Android のプロジェクトでも使われている
    • goo.gle/nia

KSP (7:21~)

  • kapt
    • Kotlin Annotation Processing Tool
    • Kotlin のコードから Java のスタブコードを生成し、Java 用のアノテーションプロセッサで Kotlin で動作するようにする
    • スタブコードの生成は時間のかかる操作のため、アノテーションプロセッシングを使ったプロジェクトのビルド速度に影響を与える
  • KSP
    • Kotlin Symbol Processing
    • Kotlin のコードを直接解析
  • KSP の利点
    • ビルド速度が最大2倍改善
    • nullability といった Kotlin 特有の言語機能の解釈が可能
    • マルチプラットフォームのサポート
  • KSP へのマイグレーション
    • goo.gle/migrate-to-ksp
  • KSP のサポート状況
    • Room, Glide, Moshi など
    • goo.gle/ksp-support でサポートしているライブラリを確認可能
    • Dagger / Hilt は対応予定
  • 一部のライブラリでも KSP 対応することをオススメ
    • マイグレーションはライブラリごと、モジュールごとといったように段階的に可能

Kotlin Multiplatform (9:59~)

  • Kotlin Multiplatform では Kotlin でコードを書くことで、Android と iOS でビジネスロジックの共有が可能
  • Google Workspace では Kotlin Multiplatform を使って Android, iOS, WEB でビジネスロジックを共有している
  • Multiplatform Jetpack libraries
    • Annotations 1.7.0-alpha02
    • Collections 1.3.0-alpha04
    • DataStore 1.1.0-alpha03
  • Kotlin Multiplatform のサンプルプロジェクト
    • goo.gle/kmm-samples