What's new in Android (2022) のセッションメモ


https://youtu.be/Z6iFhczA3NY

のセッションを見たメモです。

What's new in Android では今年の Android に関するセッション内容の概要を紹介する動画になっています。  
なのでこのセッション動画を見ることでざっくりとした Android に関する新情報をキャッチアップができるようになっています。
詳細は記載しているセッション詳細のリンクから動画を見てみてください。  

#### 関連リンク
- https://io.google/2022/
- [13 Things to know for Android developers at Google I/O!](https://android-developers.googleblog.com/2022/05/13-things-to-know-for-android-developers-at-google-io.html)

## Jetpack ライブラリの話
- バックポートや新しい機能のライブラリで120を超えている
- 新しく追加された JankStats ライブラリ
    - アプリのパフォーマンス問題の解析を行う
    - アプリの起動時間の短縮に Baseline Profile を作成
- 既存のライブラリにも多くの更新がある
    - Room 2.5 
        - Kotlin の置き換え
        - KSP のサポート
        - リレーショナルクエリメソッド
    - Navigation
        - multiple backstack
        - 2 pane layout 対応
- 詳細は以下のセッションを参照
    - [What's new in Jetpack](https://io.google/2022/program/c7710536-a86d-42a6-b43e-e69ae76dbb34/)
- 関連
    - https://android-developers.googleblog.com/2022/05/whats-new-in-jetpack.html

## Fragment の話
- 最初のサポートライブラリは Fragment だった
- ライフサイクルが AndroidX ライブラリを使うものに変更されたり、Fragment 間の連携に Fragment Resul API を使うようになったり、Fragment から個別に分離することでテストしやすくなった
- 詳細は以下のセッションを参照
    - [Fragments: The good (non-deprecated) parts](https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/)

## Jetpack Compose の話
- 1.2 beta がリリースされた
    - Downloadable font
    - NestedScroll との互換
    - Lazy Grid は stable になって新しい機能で書き直された
- Live Edit や Recomposition debugging、Animation Preview などのツールのサポートもある
- 詳細は以下のセッションを参照
    - [Common performance gotchas in Jetpack Compose](https://io.google/2022/program/213421b6-9873-464f-9b36-38eeb232a854/)
    - [Lazy layouts in Compose](https://io.google/2022/program/14bb63ef-2dd1-460a-9871-5f51ec1afec9/)
    - [Basic layouts in Compose](https://io.google/2022/program/05c2523e-be40-4c63-8308-5379b9717a7c/)
    - [Using state in Jetpack Compose](https://io.google/2022/program/c9768969-9e81-4865-9dff-29a2ab1201ea/)
- 関連
    - https://android-developers.googleblog.com/2022/05/whats-new-in-jetpack-compose.html

## 大きい画面対応の話
- スマートフォンだけでなく、タブレットやラップトップまでアプリの実行できるデバイスが増えている
- デザイン
    - ユーザがどのように端末を持って使用するところから考える
    - 快適さ、機能、効率、没入感について考える必要があり、コンテンツとナビゲーションの方法を検討する
- 実装
    - Jetpack の WindowManager 1.1 で Window Size Classes で利用可能なサイズに基づいて UI を適用させるために使用できる
    - 複数の Activity を使用している場合は Activity を並べて配置することができる
        - https://developer.android.com/guide/topics/large-screens/activity-embedding
    - Fragment の場合は SlidingPaneLayout を利用できる
    - ナビゲーションの調整には NavigationRail が役に立つ
    - Drag and drop は新しく Jetpack のライブラリで Util 系の処理を提供している
    - 動作確認には Resizable Emulator と新しい Desktop Emulator を使用する
    - Jetpack Compose の対応は [Implementing Android apps for all screen sizes](https://io.google/2022/program/1351e983-465f-4b32-99e0-de0647240352/) を参照
- 操作
    - 大きい画面のデバイスの操作はマウス、スタイラス、キーボードがある
    - View と Compose 1.2 がマウスのクリックとスクロールをサポートしている
    - 使いやすさを向上させるために固有のキーボードショートカットを実装を検討したり、矢印キーでナビゲートできるようにする
- ドキュメントに詳細が記されている
    - https://developer.android.com/large-screens
- 詳細は以下のセッションを参照
    - [Designing apps for large screens](https://io.google/2022/program/222bf914-24e3-4478-be37-9d8162d6460e/)
    - [Update your app for the larger screen](https://io.google/2022/program/eb6e6fb3-b24d-4baf-a1d9-f176198fc595/)
    - [Implementing Android apps for all screen sizes](https://io.google/2022/program/1351e983-465f-4b32-99e0-de0647240352/)
    - [Input for all screens](https://io.google/2022/program/a55aec14-5bda-47e0-b259-7a1f7bb366b8/)
    - [Building an adaptive layout with SlidingPaneLayout](https://io.google/2022/program/95d82d1b-8cfe-4617-a9da-5806c72a4284/)

## Android 13 の話
- Beta 2 が使えるようになった
- 通知を表示させるための新しい権限 `POST_NOTIFICATION` が追加
- `READ_EXTERNAL_STORAGE` が廃止されて細かな権限に変更
- 新しい Photo Picker が追加され、メディアライブラリ全体への権限なしにメディアへアクセスできる
- Privacy Sandbox の一つとして Android 13 では SDK ランタイムを導入してアプリとは独立して広告関連の SDK をインストールや実行できる予定
- 新しいオプトイン API を備えた戻る操作が導入された
    - Android 13 では `enableOnBackInvokedCallback=true` にすると `onBackPressed` などがよばれずに `OnBackInvokedCallback` を使う必要があり Android 14 でデフォルトになる
    - Jetpack の Activity を使用した詳細な実装は [Back to the basics of System Back](https://io.google/2022/program/5c6a8dbb-7ac2-4c31-a707-0a16e8424970/) を参照
- Android 13 でバックグラウンドのアプリの制限を標準化
    - バックグラウンドでの動作の制限やバックグラウンドでバッテリーを消費しすぎている場合にユーザに通知する
    - Job に優先度をつけて端末の状態に応じて優先度の低い Job を強制終了させる
- 詳細は以下のセッションを参照
    - [Developing privacy user-centric apps](https://io.google/2022/program/b1812a3f-fa67-423e-85fa-4edb0bf54d30/)
    - [Overview of the Privacy Sandbox on Android](https://io.google/2022/program/3b5391ef-d824-4480-a619-30ee923dd0ce/)
    - [Managing background work on Android](https://io.google/2022/program/477adf14-7c6d-4710-9f19-b127421a396c/)
- 関連
    - https://developer.android.com/about/versions/13
 		
## ML の話
- オンデバイスでは MLKit / Custom ML があり、リアルタイムのポーズ検出、顔検出、手書き認識などの精度を改善している
- Text Recognition V2 では 37 か国語に対応
- Google Play Service 経由でコードスキャナー機能がリリースされ、権限なしにバーコードや QR コードなどをスキャンできるようになった
- TensorFlow Lite がアプリに埋め込むのではなく Google Play Services 経由で利用できるようになった
- 詳細は以下のセッションを参照
    - [What's new in Android machine learning](https://io.google/2022/program/b767cad5-59ef-41c2-a9e6-b2dde514c243/)


## Camera の話
- CameraX への投資を続けている
- 1.1 は RC になり、WYSIWYG コントロールやビデオキャプチャを追加
    - ビデオキャプチャはデバイスに応じてカメラの選択やオーディオのオプション、SD~4K までの解像度をサポート
- プラットフォームと CameraX の両方で機能を追加していく
    - 例えば Android 13 では HDR ビデオキャプチャが導入されていて、CameraX でもバックポート予定
- メーカーが実装する特殊効果にアクセスするための拡張機能を CameraX へ 2022 年後半に追加予定
    - 拡張機能がサポートされていない場合は Google の独自機能にフォールバックする
- 詳細は以下のセッションを参照
    - [What's new in Android Camera](https://io.google/2022/program/f4726bbd-d230-4574-abc6-211baa6aec35/)

## Media の話
- HDR 動画をサポートするデバイスが増え、キャプチャをアプリに含めるか、インポートするか、SDR にトランスコードする必要がある
- Android 13 ではキャプチャと再生に必要な HDR を標準化して、Jetpack Media で HDR の再生や編集をサポートする
- Android 13 では空間オーディオのサポートを追加
    - ExoPlayer の新機能
        - DRMキーのプリフェッチ(2.14)
        - Android 12 の互換(2.16)
        - サーバ側の広告挿入(2.17)
- ExoPlayer から Jetpack Media3 へのマイグレーションも続ける
    - Jetpack ではメディアの再生だけでなく編集とトランスコーディングをサポート
- 詳細は以下のセッションを参照
    - [What's new in Android media](https://io.google/2022/program/f6863994-eab8-489f-8d62-82c8a9c486ab/)
    - [Media streaming with ExoPlayer](https://io.google/2022/program/11094c8f-f7c5-42a6-9e8f-df94e83f5d27/)

## Accessibility の話
- Android Studio が Touch target size や contentDescription の欠落など検出する
    - Jetpack Compose にも対応
- 詳細は以下のセッションを参照
    - [What's new in Android accessibility](https://io.google/2022/program/aedbd452-b886-4ad9-af88-48f2bc01091b/)

## Google Wallet の話
- イベントチケットや搭乗券、ワクチンカードなどを Google Wallet に保存できるようになった
- 以前の Google Pay Passes API を Google Wallet API として進化させて Android の SDK を新しくリリースする
    - アプリからバックエンドなしに直接 Wallet に保存できるようになる
- 詳細は以下のセッションを参照
    - [Introducing Google Wallet and developer API features](https://io.google/2022/program/02e77298-9eb9-4ee8-b82d-f3f02e19ac09/)
- 関連
    - https://developers.google.com/wallet

## マルチデバイスの話
- さまざまなデバイスの登場でそれらの間でシームレスに機能することを期待している
- デバイスの検出、Wakeup、デバイス間通信などのシームレスな連携のためのライブラリを開発している
- 詳細は以下のセッションを参照
    - [Multi-device development](https://io.google/2022/program/2d35bc51-fef8-4f4f-830f-0dba6d30e592/)


## デバイスを跨いだシームレスな認証の話
- BlockStore はデバイス間でトークンを保存、転送できるシンプルな API で新しいデバイスでサインインなしでセットアップ可能
- OneTap はアカウントの作成とサインインが簡単になる API でプラットフォームを跨ってシームレスに認証できる
- Passkeys でパスキーが Google アカウントにバックアップ・同期される
- 詳細は以下のセッションを参照
    - [Android solutions for seamless sign-in across devices](https://io.google/2022/program/c4be021c-53ec-493e-a3c1-7db7a168317e/)


## Google Play の話
- Play Console の AndroidVitals でレポート API を提供するようになり、独自のダッシュボードを構築できるようになった
- AndroidVitals に国ごとにフィルタリングする機能や FG/BG もわかるようになった
- Firebase Crashlytics との連携も改善し、AndroidVitals を直接表示もできるようになる
- 問題に対して優先度が設定されるようになる
- Device catalog も刷新
- Custom store listing に deeplink が対応して A/B テストを細かく制御できるようになる
- サブスクリプションが見直され、オファーの適格性と価格設定のオプションが増え、複雑さが軽減された
- Play Billing Library 5.0 でサブスクリプションに関する In-App Messaging を出せるようになる(?)
- 詳細は以下のセッションを参照
    - [App quality on Google Play: New features and developer success stories](https://io.google/2022/program/4d2987b9-4a84-4e4f-8203-93867d925737/)
    - [Power your success with new acquisition, engagement and monetization tools](https://io.google/2022/program/87d1e16b-09ff-4f48-ad4e-eae333f78513/)
- 関連
    - https://android-developers.googleblog.com/2022/05/whats-new-in-google-play.html
    - https://android-developers.googleblog.com/2022/05/new-ways-to-sell-subscriptions-on-google-play.html.html

## Wear の話
- Wear の Compose がベータに
- Health Service が心拍数などの測定データを API で提供する
- 測定データをアプリごとではなく1箇所で管理できるように Health connect が一つの Android API に統合しユーザの同意を得てデータの読み書きを行う
    - Health connect は Jetpack Health を通じて提供される
- 詳細は以下のセッションを参照
    - [Creating beautiful, power-efficient apps for Wear OS](https://io.google/2022/program/7f0f4d16-b260-414d-9f2d-bd2e18ea469b/)
- 関連
    - https://android-developers.googleblog.com/2022/05/announcing-compose-for-wear-os-beta.html
    - https://android-developers.googleblog.com/2022/05/introducing-health-connect.html

## Android TV・Google TV の話
- Android 12 の変更点
    - 4K UI のサポート
    - 子供向けコンテンツのキュレーション
- Android 13 の変更点
    - AudioManager がオーディオルートの変更を予測したり、HDMI の状態で電力を消費したりする
    - 新しい Picture in picture のサポート
- 詳細は以下のセッションを参照
    - [What's new with Android TV and Google TV](https://io.google/2022/program/1e5d0560-24f2-4891-8991-0d93af8d9965/)

## Android Development Tools の話
- Dolphin
    - Logcat v2
    - Compose Recomposition in Layout Inspector 
    - などなど
- Electric Eel 以降
    - Jetpack Compose の Live Edit
    - Visual Lint for Compose
    - Compose Mutli-Preview
    - などなど
- 詳細は以下のセッションを参照
    - [What’s new in Android development tools](https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/)
- 関連
    - https://android-developers.googleblog.com/2022/05/whats-new-in-android-studio.html

## パフォーマンス改善の話
- Android Studio Dolphin に追加された CPU プロファイラーや Play Console の AndroidVitals で確認するところから始まる
- Macrobenchimarking ライブラリを使用してアプリの軌道などの計測をする
- JankStats ライブラリを使用してジャンキーフレームを検出
- Baseline profiles でアプリのパフォーマンスを大幅に向上させる
- Android フレームワークの ART の更新
    - Android 12 で ART もメインラインモジュールになり、Android OS のリリースサイクルの外で ART の更新ができる
        - これにより Open JDK の更新やパフォーマンス改善、バグ修正が提供できる
- 詳細は以下のセッションを参照
    - [What's new in app performance](https://io.google/2022/program/2cf473b7-113e-4332-a469-8dfd815eb45b/)