【Google I/O '24】Androidエンジニアの視点で記憶に残ったこと

## はじめに


本記事はGoogle I/O '24のセッションを見てAndroid エンジニアの視点で記憶に残ったことの個人的メモになります。

動画やリソースはすべてGoogle I/Oのサイトからアクセスできるので、詳細はこちらをご覧ください。

https://io.google/2024/intl/ja/


## Gemini

アプリにGeminiによる機能を追加するセッションです。オンデバイスでの生成AIはモバイルエンジニアとしても気になるところです👀

https://io.google/2024/explore/adc2c02e-a8b6-4ab4-939a-a7afddc7cd8f/intl/ja/

https://io.google/2024/explore/bf83875d-410e-4fb2-b76c-c61df7cec4a4/intl/ja/

https://io.google/2024/explore/c8b911cd-6c30-434f-a76e-6099f6a312d9/intl/ja/

またAndroid Studio に搭載された Gemini による開発支援のセッションがありました。

https://io.google/2024/explore/9986e95b-c506-40f1-b233-54f7e7092fdb/intl/ja/

スクリーンショットからプロジェクトのコードを加味したUIのコードが丸ごと生成されるデモは衝撃的でした。マルチモーダルAIの威力を感じますね。

![スクリーンショット 2024-05-24 9.34.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56635/21a11043-d487-d32b-e087-84261f4fb94c.png)

## Android 15のEdge-to-edgeとPredictive back

targetSdkVersionをVanilla Ice Cream(Android 15)にすると自動的にEdge-to-edgeが適用されるようになりました。Materail 3 Composeのように自動的にInsetsを処理してくれるコンポーネントを使用している場合は問題ないですが、おそらく多くのアプリでは画面崩れ(UIがシステムバーにはみ出して見た目が悪いだけでなく場合によってはボタンの操作などが行えなくなる)が起きるので対応が必要です。

| 対応前 | 対応後 |
| :-: | :-: |
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56635/d90723af-c268-042b-b9d0-b34e24978a67.png) | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56635/c6985ea9-71c7-8c51-f220-4f533a49f47d.png) |


またAndroid 13より開発者オプションを有効にすることでお試しすることができたPredictive backですが、Android 15でようやくユーザーにもお披露目となるようです。アプリ→ホーム、Activity間、アプリ内の3パターンでPredictive backがサポートされます。関連して[Fragment 1.7.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.7.0)や[Navigation Compose 2.8.0](https://developer.android.com/jetpack/androidx/releases/navigation#version_28_2)でPredictive backのサポートが追加されているのが確認できます。

https://io.google/2024/explore/3d552a80-acee-4243-8995-c491272800a1/intl/ja/

https://developer.android.com/courses/pathways/improve-user-experience


## Material 3 の Adaptive Layout

Material 3のAdaptive Layoutサポートがbeta01に到達しました。[List-detail](https://m3.material.io/foundations/layout/canonical-layouts/list-detail)パターンや[Supporting pane](https://m3.material.io/foundations/layout/canonical-layouts/supporting-pane)を簡単に実現できます。

```
dependencies {
    implementation("androidx.compose.material3.adaptive:adaptive:1.0.0-beta01")
    implementation "androidx.compose.material3.adaptive:adaptive-layout:1.0.0-beta01"
    implementation "androidx.compose.material3.adaptive:adaptive-navigation:1.0.0-beta01"
}
```

https://io.google/2024/explore/d16737ba-e336-4b68-8928-24692a88e644/intl/ja/

https://io.google/2024/explore/5539154e-ea71-412c-852d-55c8649a2f8d/intl/ja/

https://io.google/2024/explore/2dff9b4c-4069-4bde-ab9a-c5f53dc0fdb8/intl/ja/

https://m3.material.io/foundations/layout/canonical-layouts/overview

Material Design全体についての最新のアップデートのセッションもあります。

https://io.google/2024/explore/efabefda-bc65-492b-acd6-48c7fade31e4/intl/ja/

## Jetpack Compose の Strong skipping mode

Composeのパフォーマンスの問題を解決するセッションの中でCompose Compiler 1.5.4から実験的に追加されたStrong skipping modeの紹介がありました。Strong skipping modeを有効にすることでUnstableなクラスの等価性の判定が変わり、またStableとみなせるクラスの設定をプロジェクト全体に適することもできるので不要なリコンポジションを手軽に防ぐ手段として活用していきたいですね。

```gradle:build.gradle.kts
composeCompiler {
    // This settings enables strong-skipping mode for all module in this project.
    // As an effect, Compose can skip a composable even if it's unstable by comparing it's instance equality (===).
    enableExperimentalStrongSkippingMode = true

    stabilityConfigurationFile = project.rootDir.resolve("stability_config.conf")
}
```

```plaintext:stability_config.conf
java.time.LocalDate
```

https://io.google/2024/explore/1f053ce4-2113-4030-a9a3-bbb48092b95f/intl/ja/

https://developer.android.com/codelabs/jetpack-compose-performance

https://medium.com/androiddevelopers/jetpack-compose-strong-skipping-mode-explained-cbdb2aa4b900

## AndroidにおけるKotlin Multiplatformを公式サポート

2023年以降Jetpackの主要ライブラリのKotlin Multiplatform対応が行われてきましたが、ついに公式サポートが発表されました。直近ではRoom、Lifecycle、ViewModelのMultiplatform対応を進めるということです。Kotlin MultiplatformはGoogle Workspaceの開発で採用されており、今後も採用事例が増えていきそうですね。

https://android-developers.googleblog.com/2024/05/android-support-for-kotlin-multiplatform-to-share-business-logic-across-mobile-web-server-desktop.html