![見出し画像](https://assets.st-note.com/production/uploads/images/137313121/rectangle_large_type_2_19e5f4043459907884d06f008c702af0.png?width=1200)
AndroidDagashi 2024-04-14を読んでみて
今週のDagashi
ピックアップされているもの
Android 15 Beta
Kotlin 2.0.0-RC1
ComposeでのDependency Injection
LazyListの新しいアニメーションAPI
Android 15 Beta
2024年4月11日に、Android15を公開し始めてから初のベータ版がでたようです。
こちらにかかれていた上位5つを少しだけピックしてみてみました。
Edge-to-edge
Android15からは edge-to-edge がデフォルトになるようです
targetSdk を 35 にしたアプリかつAndroid15以降で、edge-to-edge が自動で行われるようになります。
そして、Material3のComposeコンポーネントを使用している場合、自動でインセットが適用され、特別な対応を行わなくても、見た目も良い感じでしてくれる模様です。
とはいえ、破壊的な変更に近いものではあるので、targetSdkを上げてアプリを公開する前に入念なアプリの動作チェックは行ったほういい気がしました。
詳しくは下記ドキュメントを見ると良さそうです。
Smoother NFC experiences - part 2
タッチ決済の体験をよりシームレスで信頼性の高いものになるよう取り組んでいるみたいです。
Inter-character justification
Android15からは、Layoutクラスに新しく JUSTIFICATION_MODE_INTER_CHARACTER という定数が追加され、こちらを使用することで今まではできなかった、文字間隔を利用したテキスト両端揃えを行ってくれるようです。
これにより、中国語、日本語等でも両端揃えができるようになりました。
App archiving
Android と GooglePlay は昨年にアプリのアーカイブをサポートを発表しました。Google PlayのAndroid App Bundle を使用して公開された使用頻度の低いアプリを部分的にデバイスから削除することで、ユーザが空き容量を確保できるようになりました。
そして、Android15からは、OSレベルでこちらがサポートされるようになり、GooglePlayに限らず全てのアプリストアで簡単に実装できるようになるようです。
Kotlin 2.0.0-RC1
ついにKotlinが2.0.0-RC1がでるようにです。
このバージョンからK2コンパイラをProduction環境で使用できるようになったようです。
最新のIntellij IDEA 及び AndroidStudio には、Kotlinが2.0.0-RC1 をサポートする Kotlin plugin が同梱されているため、更新せずとも、ビルドスクリプトのバージョンを上げるだけ利用できるようになるみたいです。
K2がメインですが、他の変更入っていますので、詳細はGithubのリリースを見ると良さそうです。
ComposeでのDependency Injection
DIをComposeで行うにはどうするのが良いかが書かれている記事です。
推奨なやり方としては以下が詳細されてました。
ViewModel の使用とナビゲーションの作成
従来に近しい方法で、ViewModelにInjectさせて、それをUI側から実行するというものです。
多くの方がこの方法でやられているのではないのかなと思います。
Composable関数をコンストラクタInjectさせたクラスで囲む
この記事で紹介されているように、DI時にActivityが必要となる場合、ViewModelにInjectすることはできません。
なので、Composable関数を囲ったクラスを作り、そこでコンストラクタInjectできるようにして、ActivityやFragmentでInjectして解決する方法です。
CompositionLocalを使った提供は避ける
Injectしたオブジェクトは CompositionLocal に格納して提供することは簡単かつパラメータ渡しをしなくて済むので魅力的です。
しかし、この方法はHiltが提供するセーフガードをいくつか破棄することになり、ランタイムエラーを引き起こす可能性があります。
目的のオブジェクトが存在しないかもしれないし、途中で他Composableに別ものに置き換えられてしまう可能性もあるので、気をつけないと間違ったスコープのオブジェクトを提供してしまうかもしれないです。
Entry Pointsの使用
@EntryPoint を使用して、依存フラフからオブジェクトを取得する方法を提供します。
注入より要求という感じですが、CompositionLocalをは異なり受け取るオブジェクトが正しい型であり、現在のスコープで適切であることが保証されます。
詳しいやり方は記事を参考にすると良さそうです。
カスタムした依存コンポーネントの使用
Hilのコンポーネントでは変更できないライフタイムがあるので、新しくコンポーネントを作成して、Composable関数のライフタイムに適した形で依存の提供ができます。
こちらも記事を参考にやると良さそうです。
Animating LazyList items in Jetpack Compose
compose-foundation#1.7.0-alpha06 から、長らくできなったリストアイテムの出現・消滅時のアニメーションができるようになったようです。