Open21
[Google I/O 2022 メモ]What's new in Jetpack
- 最新のJetpackライブラリの情報
- Compose統合に関する詳細
Jetpack Overview
- Jetpackのコアライブラリはほとんどのアプリが使っているが、Room,WorkManagerといった非コアライブラリの利用も増えている
- TOP1000アプリのうち、2021は3/4%が2つ以上の非コアJetpackライブラリに依存しており、今では90%以上が依存している
Architecture
Room
- SQLiteの抽象化レイヤーを提供
- 2.4
- Kotlin1.6サポート
- KSPサポート
- 2.5
- フルKotlinで書き換え。将来のKotlin関連の改善をしやすく。
- Paging3.0の組み込みサポート
- multimap、ネストされたMap、配列の戻り値、を使用するリレーショナルクエリメソッドのサポート
- autoMigration
- @AutoMigrationアノテーションで、移行元/移行先のバージョンの宣言ができる
Paging
- RecyclerView、Compose LazyColumn内でデータを段階的にロードすることを容易にする
- 3.1
- RxとGuavaインテグレーションのサポート
- 無効/古いデータを表す、loadresult.invalidを使用して、競合状態の処理を改善
- Paging3を使いこなせるよう、コードラボを追加
Navigation
- 新しいnavigation.composeアーティファクト
- Navigation ComponentとJetpack Composeの統合を提供
- Destinationとして、Composable functionを使用する
- Multiple Backstackのサポート
- Navigation UIはpop destinationを自動的に保存/復元する
- Large screenサポート
- 2paneレイアウトのprebuiltなサポート
- SlidingPaneLayoutのサブクラスによるList Fragment管理と、NavHostFragmentを使用する詳細paneを管理
- Kotlinでrewrite
- NavTypeのサブクラスなどのnullabilityが改善
DataStore
- MAD SkillsでDataStoreの動画/記事を提供
- テスト方法うや、DIを利用した場合の使用方法など
Performance
JankStats
- Jankと呼ばれるドロップされたレンダリングフレームに関するレポートなど、アプリのパフォーマンス問題を追跡/分析するのに役立つ
- Frame metricなどの既存のAndroidプラットフォームAPI上に構築。API level 16以上で使える
- プラットフォーム組み込み以外の機能も提供。
- ドロップされたフレームの特定に役立つヒューリスティック
- UIに関する追加のContextとレポート
- 分析用にアップロードするときに使えるCallbackの提供
Baseline Profiles
- ユーザーにとって第一印象は重要
- インストール直後のアプリ速度はユーザー維持に大きく影響する可能性がある
- その改善のためにBaseline Profilesを作成した
- Baseline Profilesによって、Androidランタイムにコードパスの使用に関するメタデータを提供。メタデータでコンパイル前に優先順位付けする
- これによってアプリを高速化し、ユーザーが初めてアプリを触るときにドロップされるフレームを減らすことができる
- プロファイルデータはライブラリ間で集約され、baseline.profファイルとしてapkに格納される
- baseline.profファイルは、インストール時にアプリと静的にリンクされたライブラリコードを部分的にプリコンパイルするために使用される
- FragmentやComposeなどのJetpackライブラリには組み込まれており、エンドユーザーエクスペリエンスを向上させた
Macrobenchmark
- 独自のBaseline Profilesを作成するには、Macrobenchmarkを使用する必要がある
- ベースライン作成だけでなく、開発者がアプリのパフォーマンスを理解するのにも役立つ
- アプリの起動や、統合されたUI操作(RecycleViewスクロール,アニメーション実行)、などの複雑なユースケースの評価に役立つ
- API level 23以上で使える
- TraceSectionMetricを使った、custom trace-based timingの測定を追加
- AudioUnderrunMetricを使った、audio underrunsの検出を追加
- BaselineProfileRule。ランタイム最適化に役立つプロファイルの作成
- ユーザーアクションをラムダ内のコードとして表す
Tracing
- non debug buildのAPI level 14以上の正確なイベントトレースが可能になる
User Interface
WindowManager
- API level 14以上をサポート
- foldableなどの新しいフォームファクタにアプリを適用させるのに役立つ
- 初期リリースはfoldable deviceのユースケースを対象
- 将来はより多くのタイプとwindow機能に拡張予定
- SlidingPaneLayoutコンポーネントはWindowManagerのスマートレイアウトAPIを使用するように更新済み。
- 物理的なヒンジなど、遮蔽された領域にコンテンツが配置されないようになっている
DragAndDrop
- 新しいフォームファクタ、ウィンドウモードをサポート
- API level 24以上をサポート
AppCompat
- 1.8以降、Emoji2ライブラリと統合。API14以降でAppCompatがサポートするすべてのテキストベースのViewに新しいemojiのデフォルトサポートを提供
- Tiramisuで入った、Custom locale selectionをバックポート
- PlaySplitsを利用した追加のlocaleダウンロードのサポートも含む
- 1.9Alpha以降
- アプリの起動全体でlocale設定を手動で永続化できる
- Manifestのサービスメタデータで自動永続化もできる
Compose
- Top1000アプリのうち、100を超えるアプリがComposeを使用している
- 開発者と協力した
- 開発者向けストーリーとケーススタディを公開
- アプリの最も重要な部分もComposeの採用に成功した
- Playストアで何かを検索する場合、Twitterコミュニティを使用する場合、そのUIはComposeで記述されている
Nested Scrolling Interop
- Compose1.2以降、CoordinatorLayoutにScrollComposableを埋め込むのがはるかにスムーズになり、CollapsingToolbarなどの設定が簡単になった
Downlodable Fonts
- これまではAndroidプラットフォームに依存したFontを使用する必要があった
- または、アプリにBundleされているFontを使用できるが、apkサイズが大きくなる
- Compose1.2以降では、Viewと同様にDownloadale Fontsを使用できる
Lazy Layouts
- 生産性を劇的に向上させるComposeの機能に、RecyclerViewの代わりにLazyLists使う事が挙げられる
- 単純なRow/Columnを超えたニーズが有ることはわかっている
- 要素の遅延読み込みをGridやCustomLayoutなどのより高度なレイアウトに拡張している
- 詳細はComposeTalkのLazyLayoutで話している
Tools
- What's new in Android Studioを見てない場合は見てほしい
Advanced Composing
- 中級/上級のユースケースを対象としたコードラボやトーク、ドキュメントを公開している
Android Basics with Compose
- Android開発、またはJetpackComposeを使い始めたばかりの場合は、基本コースの最初の数ユニットをリリースしたので利用してほしい
Other announcements
Annotation
- AnnotationライブラリのKotlin移行を進めている
- Kotlin開発者がより適切なAnnotationターゲットを確認できる
- AnnotationはKotlin標準ライブラリに依存するようになった
- リクエストの多いAnnotationを追加した
Other I/O talks
- Media3リリース
- ExoPlayerの統合
- Fragmentライブラリにも大きな変更があった
- Composeのパフォーマンスについてのtalk