FeeeeeLog

Android 9 Pie の新機能 開発者向けハイライト

  

Android 9 Pie の開発者向けハイライトです。
特徴とAPIs」をベースに意訳を基本として、情報を削ったり、追加したりしています。Android 9 Pieの新機能・変更点をさらっとつかむためにお使いください。

より詳しく知りたい方は「特徴とAPIs」を参照してください。

スポンサーリンク

もくじ

Wi-Fi RTT による屋内測位をサポート

  • Wi-Fi Round-Trip-Time (RTT)として知られている IEEE 802.11mc Wi-Fi プロトコルをサポートした
  • アプリで屋内測位を有利に行うことができる

ディスプレイ カットアウトのサポート

画像を見てもらえれば分かりますが、カットアウトで画面の端の方に切り込み(カメラやスピーカーなどのAndroidの非機能領域)があるというディスプレイの環境をサポートします。
カットアウトのなしを含めて4つのサンプルを紹介します。

  • なし
  • ダブル ディスプレイ カットアウト
  • 画面隅のディスプレイ カットアウト
  • 縦長のディスプレイ カットアウト
ディスプレイ カットアウト

ディスプレイ カットアウト

通知

アプリの対象API レベル(targetSdkVersion)を28以上にすることで、いくつかの機能拡張を使用することができます。

メッセージングの拡張(Enhanced messaging experience)

Android 7.0 から、通知からメッセージを返信することやテキストを直接入力することができるようになりました。
Android 9 では更にこれらの改良を行っています。

  • 会話をしている人のアイコン・名前・URI等の表示
  • メッセージのタイプに画像をサポート
  • 返信のドラフトの保存
  • グループ会話の識別
  • インテントのアクションに意味付けする。削除、返信のような意味付けのこと。
  • スマートリプライ。メッセージングアプリで同一内容のサジェストができる。

チャンネルの設定、ブロードキャスト、Do Not Disturb(邪魔しないで)

Android 8.0 から通知のチャンネルが導入されました。
Android 9 では通知チャンネルをいくつか変更しました。

開発者の中ではチャンネルという概念ですが、Android 8.0 の日本語の設定では「カテゴリー」と表示されていました。

通知チャンネルグループのブロック

ユーザーがアプリの通知設定でチャンネルのグループ全体をブロックできるようになりました。isBlocked()でブロックされていることを識別できます。

通知チャンネルグループ

通知チャンネルグループ

緑の背景で「通知の表示」をON・OFFを可能になっています。ここでONにすると、チャンネルグループに含まれるすべてのチェンネルに対して通知をブロックできます。

新しいブロードキャストインテントタイプの追加

通知チャンネルとチャンネルグループのブロック状態が変更されたときにブロードキャストインテントを送信するようになりました。
インテントのアクションと追加情報の詳細は、NotificationManagerの定数を参照してください。

NotificationManager.Policyに新しく3つのDo-Not-Disturb優先順位カテゴリーを追加

NotificationManager.Policy 説明
PRIORITY_CATEGORY_ALARMS アラームを優先順位付ける。
PRIORITY_CATEGORY_MEDIA メディアソースからのサウンド(メディアと音声ナビゲーションのようなもの)を優先順位付ける。
PRIORITY_CATEGORY_SYSTEM システムサウンドを順位付ける。

NotificationManager.Policyに新しく7つのDo-Not-Disturb定数を追加

NotificationManager.Policy 説明
SUPPRESSED_EFFECT_FULL_SCREEN_INTENT 通知が全画面アクティビティを起動しないようにする。
SUPPRESSED_EFFECT_LIGHTS 通知のライトをブロックする。
SUPPRESSED_EFFECT_PEEK 通知をスライドしてのぞき見されないようにする。
SUPPRESSED_EFFECT_STATUS_BAR ステータスバーをサポートする端末のステータスバーに通知を表示しないようにする。
SUPPRESSED_EFFECT_BADGE バッジをサポートする端末のバッジをブロックする。バッジの詳細はこちら。
SUPPRESSED_EFFECT_AMBIENT アンビエント表示をサポートする端末で、アンビエント表示の通知をブロックする。
SUPPRESSED_EFFECT_NOTIFICATION_LIST 通知シェードやロック画面などのようなリストビューをサポートする端末のリストビューに通知を表示しないようにする。

マルチカメラのサポートとカメラのアップデート

マルチカメラAPIで、2つ以上の物理的なカメラに同時にアクセスできるようになりました。
デュアルフロントカメラやデュアルバックカメラを搭載した端末では、シームレスズーム、ぼけ、ステレオビジョンなどの1台のカメラでは不可能な画期的な機能を作成できます。

  • FULLまたはLIMITED機能を備えた端末のモノクロカメラをサポート

その他のカメラの改善はこれらです。

ImageDecoderでDrawableとBitmapをデコードする

BitmapFactoryとBitmapFactory.Options APIの代わりに、ImageDecoderを使用してください。
ImageDecorderは、byte buffer、ファイルやURIからDrawable、Bitmapを生成します。

ImageDecorderは、画像にカスタマイズされた複雑なエフェクトを追加することもできます。

アニメーション

AnimatedImageDrawableが導入され、GIFとWebPアニメーション画像を描画および表示することができるようになりました。

HDR VP9 ビデオ、HEIF イメージ圧縮、メディア API

  • High Dynamic Range (HDR) VP9 プロファイル2をサポート
  • HEIF (heic)画像エンコーディングをサポート
  • MediaDRMクラスにメソッドを追加
    • メトリクス・HDCPレベル・セキュリティレベルとセッション数の取得
    • セキュリティレベルのコントロールとセキュリティの強化
  • AAudio APIは、USAGE, CONTENT_TYPEINPUT_PRESETのためのAAudioStream属性を含む。これらの属性を使用すると、VoIPやビデオカメラアプリように調整されたストリームを作成できる。
  • 動的処理のためのAudioEffectが含まれる。このクラスを使用すると、イコライゼーション、マルチバンド圧縮、リミッターを含む様々なタイプのステージで構成されたチャンネルベースのオーディオエフェクトを作成できる。

JobSchedulerによるデータコストの敏感さ

JobSchedulerが、キャリアから提供されたネットワーク状態の信号を使用して、ネットワーク関連ジョブの処理を改善できます。
ジョブには、推定データサイズと信号の事前読み込みを宣言し、詳細なネットワーク要件を定義できます。JobSchedulerはネットワークの状態によって処理を管理します。例えば、渋滞しているネットワーク信号があるとき、JobSchedulerは巨大なネットワークリクエストを遅延させる可能性があります。定額制のネットワークの場合、JobSchedulerはユーザー体験を向上させるために、ヘッドラインを事前読み込みするような事前読み込みジョブを実行することができる。

ニューラルネットワーク API 1.1

ニューラルネットワーク APIは、Android 8.1から導入されました。
Android 9 では、APIを拡張し改善します。

  • 新しい9つの操作をサポート
  • 新しい関数を導入

自動入力フレームワーク

自動入力フレームワークの複数の改善でユーザー体験を改良しています。
自動入力フレームワークとは、ユーザーが端末で、アカウントやクレジットカード等の情報を自動入力してくれるフレームワークです。

セキュリティー強化

いくつかのセキュリティ機能を導入しています。

Android 保護された確認 (Protected Confirmation)

保護された確認のワークフローを使用しているとき、アプリはユーザーに短いステートメントを承認することを尋ねるプロンプトを表示します。このステートメントは、アプリに、ユーザーが支払いなどのような機密性の高い取引を完了したいと再確認することを許可します。

ユーザーがそのステートメントを受け入れると、Androidキーストアは、キー付きハッシュメッセージ認証コード(HMAC)によって保護されている暗号署名を受け取り保存します。Androidキーストアがメッセージの妥当性を確認した後、アプリは信頼された実行環境(TEE)で、trustedConfirmationRequiredから生成されたキーを使用してユーザーが受け入れたメッセージに署名します。

詳細は、Android Protected Confirmationを参照してください。

統一的な生体認証ダイアログ

アプリの代わりにシステムが生体認認証ダイアログを提供します。
アプリがユーザーに指紋認証ダイアログを表示するためにFingerprintManagerを使用するならば、代わりにBiometricPromptを使用してください。

ハードウェアセキュリティモジュール

ハードウェアセキュリティーモジュールに含まれるKeymaster HALの実装であるStrongBox Keymasterを使用できます。
このモジュールは次のものを含みます。

  • CPU
  • セキュアーストレージ
  • 乱数ジェネレーター
  • パッケージの改ざんとアプリの不正なサイドローディングに対抗するための追加メカニズム

詳細は、Android Keystore システムを参照してください。

キーストアへの安全なキーのインポート

ASN.1でエンコードされたキー形式を使用して暗号化されたキーを安全にキーストアにインポートする機能を追加しました。

キーローテーションによるAPK署名方式

APK署名方式 v3をサポートします。
この方式は、各署名証明書の署名ブロックにローテーションの証明レコードを含めるオプションがあります。

詳細は、apksignerを参照してください。

ロックされていない端末でのみキーの復号を許可するオプション

unlockDeviceRequiredフラグを導入します。
このオプションは、指定されたキーを使用して使用中や格納されたデータを復号する許可をする前に、キーストアが画面のロックを解除する必要があるかどうかを決定します。これらのタイプのキーは、健康や企業データのようなディスクに保存する機密性の高いデータを暗号化するのに適しています。そのフラグは、スマートフォンを紛失または盗難された場合に、端末がロックされている間はデータを復号できないという高い保証を提供します。

レガシー暗号のサポート

Androidバックアップ

バックアップと復元に関する新しい機能と開発者オプションを追加します。

クライアント側の暗号化バックアップ

クライアント側でAndroidバックアップの暗号化をサポートします。
次の条件が満たされると自動的に有効になります。

  • Android 9 以上で、ユーザーがバックアップを有効にする
  • ユーザーが、PIN、パターン、パスワードでアンロックが必要なスクリーンロックを設定する

バックアップに必要な端末の条件を定義する

アプリに機密情報や設定が含まれている場合、クライアント側の暗号や有効になっている場合や、ローカルの端末から端末への転送が行われている場合など、アプリのデータがユーザーのバックアップに含まれる条件を定義できます。詳細は、データバックアップの概要を参照してください。

利便性(アクセシビリティ)

アクセシビリティフレームワークの機能を強化し、アプリのユーザーにさらなる快適な体験を提供しやすくなりました。

ナビゲーション セマンティクス

追加された属性によって、アクセシビリティサービス、特にスクリーンリーダーが画面のある部分から別のところにナビゲートする方法を簡単に定義できます。
例えば、ショッピングアプリにおいて、スクリーンリーダーはカテゴリ内のすべてのアイテムを読み込んで次のカテゴリに移動する必要なく、ユーザーがある商品のカテゴリーから次のカテゴリーの商品へ直接ナビゲートすることができます。

アクセシビリティペインのタイトル

Android 8.1 以下では、アクセシビリティサービスはアクティビティのあるフラグメントが別のフラグメントに置き換えられたときのように、スクリーンの特定のペインがいつ更新されたかを常に判断できるわけではありません。ペインは、論理的にグループ化され、典型的には1つのフラグメントを含む視覚的に関連するUI要素で構成されます。

アクセシビリティペインのタイトルまたは個別の識別タイトルをこれらのペインのために提供することができる。1つのペインがアクセシビリティペインのタイトルをもつならば、アクセシビリティサービスは、そのペインの変更があるときにより詳細な情報を受け取る。この機能により、サービスはUIの変更された内容についてユーザーにより粒度の細かい情報を提供できます。

accessibilityPaneTitle属性を使用することで、ペインのタイトルを識別します。

見出しベースナビゲーション

アプリが論理的見出し含むテキストコンテント表示するならば、これらの見出しを表すViewのインスタンスに対して、accessibilityHeading属性にtrueを設定してください。これらの見出しを追加することによって、ユーザーがある見出しから次の見出しへの直接的なナビゲートするのに役立つアクセシビリティサービを許可します。アクセシビリティサービスでは、この機能を使用することでユーザーのUIナビゲーション体験を向上させることができます。

グループナビゲーションと出力

スクリーンリーダーは、伝統的にfocusable属性を使用してViewGroupやViewオブジェクトのコレクションを1つのシングルユニットとして読むタイミングを決定していました。

Android 8.1以前では、ViewGroupに含まれる各Viewオブジェクトをフォーカス不可能、そしてViewGroup自体はフォーカス可能としてマークする必要があります。この方法により、Viewのいくつかのインスタンスにフォーカス可能とマークされることで、キーボードナビゲーションがより煩雑になりました。

Android 9からは、Viewオブジェクトをフォーカス可能にすると好ましくない状況でscreenReaderFocusable属性を使用することができます。スクリーンリーダーは、screenReaderFocusableまたはfocusableをtrueに設定したすべての要素にフォーカスを当てます。

便利なアクション

ユーザーの代わりに、便利なアクションを実行するためのサポートを追加しました。

ツールチップによるインタラクション

アプリのUIで、ツールチップにアクセスすることができるようになりました。ツールチップの内容を取得したり、ツールチップの表示・非表示を指示することができます。

グローバルアクションの追加

AccessibilityServiceに2つの端末アクションを追加しました。

ウィンドウの変更点の詳細

複数のウィンドウを同時に再描画するときに、アプリのウィンドウの更新を簡単にトラッキングできるようになりました。
アプリがViewオブジェクトのためにアクセシビリティペインのタイトルを定義したら、サービスはアプリのUIが更新されたときを認識することができます。

回転

意図しない回転をなくすために、端末の向きが変わっても向きを固定するモードを追加しました。
ユーザは、端末を回転後、システムバーに表示される向きのボタンを押すことで回転することができます。

回転前

回転前

回転前の状態を縦方向とします。

回転後 ステータスバーに回転ボタンが表示

回転後 ステータスバーに回転ボタンが表示

横向きに回転するとステータスバーに回転するボタンが表示されます。
このボタンをタップすることで回転し、タップしなければスクリーンは回転されません。

より詳細と関連する情報は、スクリーンの回転の振る舞いの変更を参照してください。

テキスト

次のテキスト関連の機能を追加しました。

  • PrecomputedText は、事前に必要な情報を計算してキャッシュすることで、テキストレンダリングのパフォーマンスを改善する。
  • Magnifierは、すべてのアプリで一貫した拡大機能を使用するためのAPIを提供するプラットフォームウィジットである。
  • TextClassifierを強化。機械学習を利用して選択されたテキストのエンティティを識別し、アクションを提案する。例えば、ユーザーが電話番号を選択したことをアプリが検出できるようになる。アプリはその電話番号を使って電話をかけることを提案することができる。
  • テキストレイアウトに関するいくつかの便利なメソッドと属性が追加される。詳細は、TextViewを参照し、「28」で検索してください。

DEXファイルのART事前(ahead-of-time)変換

Android runtime (ART) ahead-of-time コンパイラーは、Dalvik Executable format (DEX)ファイルの圧縮にさらなる最適化を行う。
この変更により、アプリの起動速度が向上し、ディスク容量とRAMの使用量を軽減します。

この改善は、特にディスクI/Oが遅いローエンド端末にとって有用です。

端末によるシステムトレース

端末のシステムトレースを記録し、開発チームと共有することができます。このレポートはHTMLを含む複数のフォーマットをサポートしています。

このツールに関する詳細は、端末によるシステムトレースを実行するを参照してください。