🚀
[Google I/O 2021 メモ]What's new in Jetpack
動画
- 昨年からJetpackの導入が進み、top1000アプリのうち2020->47%appsだったのが2021->79%appsになっている
Jetpack & Versioning
- Jetpackライブラリは大きのアルファ版リリースをしている
- いくつかの変更を加えた
- アルファ版は変わらず、機能は不十分だがテストはされている
- 安定版のためにベータに移行するが、ここに変更がある。
- クリティカルな問題やコミュニティフィードバックによって、APIの変更もありえる
- より早くベータに達するが、機能によっては時間が必要なものもある
- 新しいメタデータとツールを導入した
- 実験的な機能を呼び出すときには明示的にannotationを付ける必要がある
- Kotlinを使っている人にはおなじみの@OptIn
- OptInとは開発者が理解して使っていることを意味する。APIがアルファであり、将来変更される可能性があることを。
- 機能が安定するとannotationを削除することができる
CameraX
- 統合されたAPI Sarfaceを提供する
- Device固有やOSバージョンへの互換性を持つ
- 露出補正、CameraのState/Featureへのアクセスサポート
- FPS範囲などのカメラ設定、Camra2との相互運用性
- 最新のデバイスと、OSサポートを提供
- HDRプレビュー
- Zoom比コントロール
- サイレントモードへの対応
- パフォーマンス改善
- 画像キャプチャを15%高速化
- 起動の高速化(特に古いデバイスで)
- 堅牢なアプリケーション設計をサポートするために、最新のアルファバージョンでは、CameraViewからCameraControllerを分割した
- ズームなどカメラ機能との相互作用を提供する
- PreviewView
- レンダリングを担当
- AndroiViewシステムとの統合
- 画像分析と追加のキャプチャオプションもある
AppSearch
- 高機能な全文検索
- Fuzzy matching(あいまい検索)を簡単に実行できる
- 同義語とスペル修正の処理
- 複数言語のサポート
- データ表現を簡素化する
- AndroidS以降で使えるschema.orgをデバイス横断の検索に使える
DataStore
- シンプルで使いやすいAPIを維持しながら、SharedPreferencesの欠点を補う
- データモデルを提起するための複数の方法を提供
- ゆるく紐付けされたKey-Valueストア。既存のSharedPreferenceに似ている形
- プロトコルバッファを使用した厳密に型指定された形
- なぜ移行する必要があるか?
- SharedPreferencesは小さなアプリでは問題なく動作するが、データストアは型安全性/非同期操作/エラー処理に関する強力な保証がある
- データ移行などの便利な機能もある
- SharedPreferncesから基本的なKey-Valurデータストアへの移行はシンプル
- SharedPreferenceMigrationオブジェクトを利用してDataStoreを作成する
- SharedPreferenceMigrationオブジェクトを利用してDataStoreを作成する
Security Cripto
- ファイルと設定を暗号化する簡単な方法を提供
- 将来はDataStoreとの統合も予定されている
- SharedPreferencesを暗号化するにはEncreptedSharedPreeferenceを使う
- 適切なKeyとSchemeを利用
- 標準のSharedPreferenceと同じように使用する
Hilt
- ViewModelサポートはcore Hiltへ移動
- SavedStateHandleがデフォルトの依存関係として追加
- ActivityやFragmentなどのAndroidEntryPointから、@HiltViewModelを使うことができる
- Navigationを対象とするViewModelを取得することができる(by hiltNavGraphViewmodels())
- WorkManagerとの統合改善
- @AssistedInjectを利用
- Workerパラメータを手動で渡さなくてよくなる
- ボイラープレートコードをかなり削減することができる
- Test
- @TestInstallIn
- テスト用の依存注入ができる
WorkManager
- 延期可能な非同期タスクをスケジュール
- アプリ終了したり、デバイスが再起動しても実行される
- すべてのタスクが確実に実行される
- 特定のAndroidOSバージョンで起きる問題に対応
- マルチプロセスアプリのサポート改善
- 多くのリクエストをスケジュールする際にSingle Processにスケジューリングしデータベース使用量を削減
- Version2.7ではAndroidSのフォアグラウンド制限に対応
- Studio ArcticFoxでWorkManagerInspectorが利用可能に
Room
- データ永続化レイヤー
- Kotlin Symbol Processing(KSP)サポート
- ベンチマークではkaptより200%速度が向上
- enumとRxJava3の組み込みサポート
- QueryCallback
- SQL実行のコールバックを提供
- ロギングなどがしやすくなる
- @ProvidedTypeConverter
- TYpeConverterを作成するときにより柔軟性を可能にする
- 以前がstaticメソッド、引数なしのコンストラクタ、ビルド時の検証が必要だったが、@ProvidedConverterを使うと実行時にTypeConverterを構築できる
ConstraintLayout
- 2.0に達した
- MotionLayoutはstableに
- MotionLayout
- コード不要のアニメーション作成
- foldable devicesサポート
- 画像フィルターやモーションエフェクトのサポート
- Studioのモーションエディタ
- What's new in design toolsで詳しく
Fragment
- 内部実装とドキュメント化されていない挙動の削減に努力した
- ActivityResult integration
- フラグメントからActivityResultへの登録を可能に
- FragmentOnAttachListener導入
- onAttachFragmentを置き換える
- onAttachFragmentは非推奨に
Navigation
- Multiple Backstack support
- BottomNavigationを使用する際にシンプルになる
Google Shortcuts
- アシスタントや他のGoogleProductsにアクションを公開
- 既存のShortcutInfoクラスを経由
- ShortcutManagerを介して、最大15個のショートカットを送信可能。Googleアシスタントに表示される
- appCapabilityBindingを利用してGoogleサービスが理解するのに役立つ情報を登録する
EmojiCompat
- 新しいメジャーバージョン
- AppCompat1.4以降を入れてるアプリではEmojiCompatを自動的にプルし、新しい絵文字を動的に読み込む。最新のUnicode仕様の読み込み
- AppCompatを使ってないアプリではEmojiCompatTextViewを利用することでプラットフォームTextViewの代わりにそれを使うことができる
Paging
- メジャーバージョン3.0
- Kotlinで完全書き直し
- coutines and Flow
- RxJavaと Guava primitiveを使用した非同期ロード
- presentionとrepositoryレイヤーの改善
Macrobenchmark
- Jetpackのbenchmarkを拡張
- app startupとscrollのような挙動のパフォーマンス測定
- リモートではCIテストで使用可能、ローカルではAndroidStudioで表示可能な結果を出力
- 詳しくは、Measuring Jank and Startup with Macrobenchmarkを参照
Compose integrations
- JetpackとNavigation, ConstraintLayoutなどとの統合
- Using Jetpack Libraries in Composeを参照
Form factors
- Foldable, Large Screens, Wear Devices
- それぞれ別の動画があるのでそちらを参照
Discussion