Open21

[Google I/O 2022 メモ]What's new in Jetpack

Naoki IshiiNaoki Ishii

Jetpack Overview

  • Jetpackのコアライブラリはほとんどのアプリが使っているが、Room,WorkManagerといった非コアライブラリの利用も増えている
  • TOP1000アプリのうち、2021は3/4%が2つ以上の非コアJetpackライブラリに依存しており、今では90%以上が依存している
Naoki IshiiNaoki Ishii

Architecture

Room

  • SQLiteの抽象化レイヤーを提供
  • 2.4
    • Kotlin1.6サポート
    • KSPサポート
  • 2.5
    • フルKotlinで書き換え。将来のKotlin関連の改善をしやすく。
    • Paging3.0の組み込みサポート
  • multimap、ネストされたMap、配列の戻り値、を使用するリレーショナルクエリメソッドのサポート
  • autoMigration
    • @AutoMigrationアノテーションで、移行元/移行先のバージョンの宣言ができる
Naoki IshiiNaoki Ishii

Paging

  • RecyclerView、Compose LazyColumn内でデータを段階的にロードすることを容易にする
  • 3.1
    • RxとGuavaインテグレーションのサポート
    • 無効/古いデータを表す、loadresult.invalidを使用して、競合状態の処理を改善
  • Paging3を使いこなせるよう、コードラボを追加
Naoki IshiiNaoki Ishii
  • 新しい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が改善
Naoki IshiiNaoki Ishii

DataStore

  • MAD SkillsでDataStoreの動画/記事を提供
    • テスト方法うや、DIを利用した場合の使用方法など
Naoki IshiiNaoki Ishii

Performance

JankStats

  • Jankと呼ばれるドロップされたレンダリングフレームに関するレポートなど、アプリのパフォーマンス問題を追跡/分析するのに役立つ
  • Frame metricなどの既存のAndroidプラットフォームAPI上に構築。API level 16以上で使える
  • プラットフォーム組み込み以外の機能も提供。
    • ドロップされたフレームの特定に役立つヒューリスティック
    • UIに関する追加のContextとレポート
    • 分析用にアップロードするときに使えるCallbackの提供
Naoki IshiiNaoki Ishii

Baseline Profiles

  • ユーザーにとって第一印象は重要
  • インストール直後のアプリ速度はユーザー維持に大きく影響する可能性がある
  • その改善のためにBaseline Profilesを作成した
  • Baseline Profilesによって、Androidランタイムにコードパスの使用に関するメタデータを提供。メタデータでコンパイル前に優先順位付けする
  • これによってアプリを高速化し、ユーザーが初めてアプリを触るときにドロップされるフレームを減らすことができる
  • プロファイルデータはライブラリ間で集約され、baseline.profファイルとしてapkに格納される
  • baseline.profファイルは、インストール時にアプリと静的にリンクされたライブラリコードを部分的にプリコンパイルするために使用される
  • FragmentやComposeなどのJetpackライブラリには組み込まれており、エンドユーザーエクスペリエンスを向上させた
Naoki IshiiNaoki Ishii

Macrobenchmark

  • 独自のBaseline Profilesを作成するには、Macrobenchmarkを使用する必要がある
  • ベースライン作成だけでなく、開発者がアプリのパフォーマンスを理解するのにも役立つ
  • アプリの起動や、統合されたUI操作(RecycleViewスクロール,アニメーション実行)、などの複雑なユースケースの評価に役立つ
  • API level 23以上で使える
  • TraceSectionMetricを使った、custom trace-based timingの測定を追加
  • AudioUnderrunMetricを使った、audio underrunsの検出を追加
  • BaselineProfileRule。ランタイム最適化に役立つプロファイルの作成
    • ユーザーアクションをラムダ内のコードとして表す
Naoki IshiiNaoki Ishii

Tracing

  • non debug buildのAPI level 14以上の正確なイベントトレースが可能になる

Naoki IshiiNaoki Ishii

User Interface

WindowManager

  • API level 14以上をサポート
  • foldableなどの新しいフォームファクタにアプリを適用させるのに役立つ
  • 初期リリースはfoldable deviceのユースケースを対象
  • 将来はより多くのタイプとwindow機能に拡張予定
  • SlidingPaneLayoutコンポーネントはWindowManagerのスマートレイアウトAPIを使用するように更新済み。
    • 物理的なヒンジなど、遮蔽された領域にコンテンツが配置されないようになっている
Naoki IshiiNaoki Ishii

DragAndDrop

  • 新しいフォームファクタ、ウィンドウモードをサポート
  • API level 24以上をサポート
Naoki IshiiNaoki Ishii

AppCompat

  • 1.8以降、Emoji2ライブラリと統合。API14以降でAppCompatがサポートするすべてのテキストベースのViewに新しいemojiのデフォルトサポートを提供
  • Tiramisuで入った、Custom locale selectionをバックポート
  • PlaySplitsを利用した追加のlocaleダウンロードのサポートも含む
    • 1.9Alpha以降
    • アプリの起動全体でlocale設定を手動で永続化できる
    • Manifestのサービスメタデータで自動永続化もできる
Naoki IshiiNaoki Ishii

Compose

  • Top1000アプリのうち、100を超えるアプリがComposeを使用している
  • 開発者と協力した
  • 開発者向けストーリーとケーススタディを公開
  • アプリの最も重要な部分もComposeの採用に成功した
  • Playストアで何かを検索する場合、Twitterコミュニティを使用する場合、そのUIはComposeで記述されている
Naoki IshiiNaoki Ishii

Nested Scrolling Interop

  • Compose1.2以降、CoordinatorLayoutにScrollComposableを埋め込むのがはるかにスムーズになり、CollapsingToolbarなどの設定が簡単になった
Naoki IshiiNaoki Ishii

Downlodable Fonts

  • これまではAndroidプラットフォームに依存したFontを使用する必要があった
  • または、アプリにBundleされているFontを使用できるが、apkサイズが大きくなる
  • Compose1.2以降では、Viewと同様にDownloadale Fontsを使用できる
Naoki IshiiNaoki Ishii

Lazy Layouts

  • 生産性を劇的に向上させるComposeの機能に、RecyclerViewの代わりにLazyLists使う事が挙げられる
  • 単純なRow/Columnを超えたニーズが有ることはわかっている
  • 要素の遅延読み込みをGridやCustomLayoutなどのより高度なレイアウトに拡張している
  • 詳細はComposeTalkのLazyLayoutで話している
Naoki IshiiNaoki Ishii

Advanced Composing

  • 中級/上級のユースケースを対象としたコードラボやトーク、ドキュメントを公開している

Android Basics with Compose

  • Android開発、またはJetpackComposeを使い始めたばかりの場合は、基本コースの最初の数ユニットをリリースしたので利用してほしい
Naoki IshiiNaoki Ishii

Other announcements

Annotation

  • AnnotationライブラリのKotlin移行を進めている
    • Kotlin開発者がより適切なAnnotationターゲットを確認できる
    • AnnotationはKotlin標準ライブラリに依存するようになった
  • リクエストの多いAnnotationを追加した

Other I/O talks

  • Media3リリース
    • ExoPlayerの統合
  • Fragmentライブラリにも大きな変更があった
  • Composeのパフォーマンスについてのtalk