この記事は Dave Burke による Android Developers Blog の記事 "Introducing Android Q Beta" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

投稿者: エンジニアリング部門副社長、Dave Burke

2019 年は、5G、縁なし画面、折りたたみ式画面などの新技術によって、かつてない勢いでモバイルの革新が進みます。Android は、この技術革新サイクルの中心にあります。そして、数十億台の端末を展開する幅広いパートナー エコシステムのおかげで、Android はハードウェア、ソフトウェアの境界を広げることに貢献し、ユーザーに新しい体験や機能を提供しています。

Android は、モバイル エコシステムの進化とともに、最新の技術革新を提供することを重視していますが、常にユーザーのセキュリティやプライバシーを最優先にしている点は変わりません。Android Q には、Google Play プロテクトやランタイム パーミッションなどの機能をベースとして、ユーザー向けのプライバシーやセキュリティ関連のたくさんの追加機能、折りたたみ式スマートフォン向けの機能拡張、新しいネットワーク接続 API、新しいメディア コーデックとカメラ機能、NNAPI 拡張機能、Vulkan 1.1 のサポート、アプリ起動の高速化などが導入されています。

本日は、先行ユーザー向けに Android Q のベータ版 1、デベロッパー向けにプレビュー版 SDK をリリースします。Pixel 端末を登録すると、ベータ版 1 を本日よりお試しいただけます(たくさんの要望を受けてサポートを拡大したので、オリジナルの Pixel と Pixel XL も含まれています!)。フィードバックをお待ちしています!ここからは、Android Q の新機能についてご紹介します。5 月の Google I/O では、さらに多くのことをお知らせします。ぜひそこでお会いしましょう。

Android のプライバシー保護を強化

Android の設計の中核にあるのは、セキュリティとプライバシーです。Android の成熟に伴い、ファイルベースの暗号化プライベートなリソースにアクセスする前にパーミッションを要求することをアプリに義務づける OS 制御、バックグラウンドでのカメラやマイクへのアクセスの禁止、ロックダウン モード暗号化バックアップGoogle Play プロテクト(毎日 500 億以上のアプリをスキャンし、有害な可能性があるアプリを特定、削除しています)など、さまざまなユーザー保護機能を追加してきました。Android Q では、ユーザー保護機能をさらに拡張しています。この機能拡張のほとんどは、Project Strobe による成果です。

位置情報の制御の向上


Android Q では、アプリが位置情報にアクセスできる場合、ユーザーがさらに細かく制御できるようになっています。今までのバージョンの OS と同じく、アプリが位置情報を使えるのは、アプリがパーミッションをリクエストし、ユーザーがそれを許可してからになります。



特にプライバシーに関わるのは、アプリが使われていない場合(バックグラウンドにある場合)の位置情報へのアクセスです。Android Q では、位置情報にアクセスさせない、アプリが使われている(実行されている)場合のみアクセスを許可する、常に(バックグラウンドにある場合も)アクセスを許可する、というパーミッションをアプリに与えることができます。

たとえば、食料品を配達するために位置情報へのアクセスを求めるのは合理的で、ユーザーはそれを許可しようと思うでしょう。しかし、現在使われていない場合には位置情報を必要としないため、ユーザーがアクセスを許可したくないようなアプリもあります。Android Q では、そこまで細かい制御ができるようになります。アプリにこの新しい制御を組み込む方法については、デベロッパー ガイドをご覧ください。今後のベータ版では、さらにユーザー中心の改善が行われる予定です。それとともに、私たちはもっと敏感になって、デベロッパーの皆さんに向けてこういった変更についてできる限り多くのお知らせやサポートを提供したいと考えています。

Android Q のその他のプライバシー保護


位置情報の変更と合わせて、透過性を保証し、ユーザーが制御できることを増やし、個人データを保護するための更新を行っています。

Android Q では、共有ファイルへのアクセスを制御することで、ユーザーが細かくアプリを制御できます。ユーザーは、新しいランタイム パーミッションを通して、アプリからの写真や動画、音声のコレクションへのアクセスを制御できます。アプリでダウンロードを行う際には、システムのファイル ピッカーを使う必要があります。これにより、ユーザーはアプリがどのダウンロード ファイルにアクセスできるかを決められるようになります。デベロッパーにとっては、アプリが外部ストレージの共有領域を使う方法が変わることになります。詳細については、ストレージのスコープ化に伴う変更点をご覧ください。

私たちは、アプリが予期せずフォアグラウンドになってフォーカスを奪い、ユーザーが(そしてデベロッパーも!)混乱する様子も見てきました。こういった中断を減らすため、Android Q では、アプリがバックグラウンドにいる間は、Activity を起動できなくなります。電話の着信を受けたり、アラームを鳴らしたりするなど、バックグラウンド状態からすばやくユーザーに注目してもらう必要があるアプリは、優先度の高い通知と全画面インテントを使うことができます。詳細については、ドキュメントをご覧ください。

端末の IMEI やシリアル番号など、リセットできない端末の識別子へのアクセスは制限しています。皆さんの使用例に適した識別子を探したい場合は、ベスト プラクティスこちらに掲載されている情報をご覧ください。また、デフォルトでは、Wi-Fi ネットワークごとに端末の MAC アドレスを乱数化しています。これは、Android 9 Pie ではオプションで選択できた設定です。

早い段階でこういった変更点をお知らせしているのは、皆さんにできるだけ時間をかけて準備していただくためです。また、デベロッパーの皆さんには、前もって詳しい情報をお伝えできるように努力しています。プライバシーの変更に関する詳しいドキュメントを確認し、すぐにテストを始めることをおすすめします。


ユーザー エンゲージメントを高める新たな方法

Android Q では、ユーザーをアプリに引き込む新たな方法を実現するとともに、他のアプリから遷移する際の動作を効率化しています。

折りたたみ式スマートフォンと画期的な新画面


折りたたみ式端末は、画期的な操作と使用法を実現します。Android Q では、アプリをこういった端末やその他の大画面端末に対応しやすくするため、たくさんの改善が行われています。たとえば、onResumeonPause が変更されて複数のレジュームに対応できるようになり、アプリがフォーカスを受け取った際に通知されるようになります。また、折りたたみ式画面や大画面でのアプリの表示方法を管理できるように、resizeableActivity マニフェスト属性の動作も変更しています。このような新しい端末向けの開発やテストを始められるように、Android Emulator を複数の画面タイプの切り替えに対応させる作業を行っています。詳細については、近日中に改めてお知らせします。



ショートカット共有

写真などのコンテンツを別のアプリで誰かと共有したい場合、それをすばやく実現できる必要があります。Android Q では、ショートカット共有によってすばやく簡単に実現できます。この機能を使うと、直接別のアプリにジャンプしてコンテンツを共有できます。デベロッパーが共有ターゲットを公開すると、コンテンツが添付された状態で自分のアプリの特定のアクティビティが起動されます。共有ターゲットは、共通の UI でユーザーに表示されます。ターゲットはあらかじめ公開されているので、共有 UI は起動時に即座に読み込まれます。

ショートカット共有の仕組みは、アプリのショートカットが動作する仕組みと同じです。つまり、ShortcutInfo API を拡張して、両方の機能を簡単に組み合わせることができます。この新しい API は、新しい ShareTarget AndroidX ライブラリでもサポートされています。これにより、アプリは Q 以前の端末でダイレクト シェアを使いつつ、新しい機能も使うことができます。こちらのソースコードから、簡単なサンプルアプリをご覧ください。

設定パネル



新しい Settings Panel API を使うと、重要なシステム設定をアプリ内のコンテキストで直接表示できます。この API は、Android 9 Pie で導入された Slices 機能が活用されています。
設定パネルは、アプリから呼び出してユーザーにとって必要なシステム設定(インターネット接続、NFC、オーディオのボリュームなど)を表示するフローティング UI です。たとえばブラウザなら、機内モード、Wi-Fi(近くのネットワークを含む)、モバイルデータなどの接続設定を含むパネルを表示できます。これにより、アプリを離れる必要はなくなり、ユーザーは必要に応じてこのパネルで設定を管理できます。設定パネルは、新たに追加された Settings.Panel アクションのいずれかを指定してインテントを起動するだけで表示できます。

ネットワーク接続

Android Q では、アプリが Android の接続スタックでできることを拡張し、ネットワーク接続用の新しい API も追加しています。

接続パーミッション、プライバシー、セキュリティ

ネットワークをスキャンする API の大半は、低精度(COARSE)の位置情報パーミッションを必要とします。しかし、Android Q ではこれらの API に関連した保護が強化され、Bluetooth と携帯ネットワーク、Wi-Fi で高精度(FINE)の位置情報パーミッションが必要になります。アプリでピアツーピア接続や提案されたネットワークだけが必要になる場合は、以下の改善版 Wi-Fi API をご覧ください。この方法を使うと、簡単に接続できるだけでなく、位置情報のパーミッションも必要ありません。

Android Q では、接続する Wi-Fi ネットワークごとに MAC アドレスが乱数化されます。また、新しい Wi-Fi 標準である WPA3 と Enhanced Open のサポートも追加されているので、家庭や職場だけでなく、オープンまたはパブリックなネットワークのセキュリティも向上します。

ピアツーピア接続とインターネット接続の改善

Android Q では、Wi-Fi スタックをリファクタリングし、プライバシーとパフォーマンスを改善しました。それだけでなく、IoT 端末の管理やインターネット接続の提案などの一般的なユースケースを改善し、位置情報のパーミッションが不要になりました。

ネットワーク接続 API を使うと、ローカル Wi-Fi 経由で IoT 端末を簡単に管理し、設定、ダウンロード、印刷などのピアツーピア機能を利用できます。アプリは、WiFiNetworkSpecifier として好みの SSID や BSSID を指定し、間接的に接続リクエストを開始します。プラットフォームは Wi-Fi スキャン自体を管理し、一致するネットワーク接続を Wi-Fi ピッカーに表示します。ユーザーが選択すると、プラットフォームは自動的に接続を設定します。

アプリでネットワーク提案 API を使うと、インターネット接続用として、好みの Wi-Fi ネットワークをユーザーに表示することができます。アプリは、ランク付けされたネットワークと認証情報の一覧を WifiNetworkSuggestion として提供し、間接接続を始めます。これらのネットワークの範囲内にいる場合、プラットフォームが過去のパフォーマンスに基づいてシームレスに接続を行います。

Wi-Fi パフォーマンス モード

Android Q では、高パフォーマンス モードおよび低遅延モードを有効化することで、用途に応じて柔軟に Wi-Fi をリクエストできます。リアルタイム方式のゲームや音声通話など、ユーザー エクスペリエンスにとって低遅延が重要な場合、この機能が非常に役立ちます。

新しいパフォーマンス モードを使うには、WIFI_MODE_FULL_LOW_LATENCY または WIFI_MODE_FULL_HIGH_PERF を指定して WifiManager.WifiLock.createWifiLock() を呼び出します。この 2 つのモードでは、プラットフォームが端末のファームウェアと連動し、最低消費電力で要件を満たすように動作します。



カメラ、メディア、グラフィック

写真のダイナミック デプス形式

モバイル端末の多くのカメラは、対象物に対して前景や背景をぼかすことで、浅い被写界深度を仮想的に実現しています。つまり、イメージ上のさまざまな点で深度メタデータを取得し、イメージに静的なぼかしを適用してから、深度メタデータを破棄しています。
Android Q 以降では、アプリはダイナミック デプス イメージをリクエストできます。このイメージは、JPEG、深度に関連する要素が格納された XMP メタデータ、深度と信頼度のマップで構成され、ダイナミック デプスをサポートしている端末では、これらが同じファイルに埋め込まれます。

JPEG + ダイナミック デプスのイメージをリクエストすると、アプリで特殊なぼかしやぼけのオプションを提供できます。将来的には、このデータから 3D イメージを作成する、AR 写真をサポートする、といったユースケースにも対応できるようになります。ダイナミック デプスは、エコシステムのためのオープンな形式にする予定で、端末メーカーのパートナーと協力して、Android Q 以降を実行するさまざまな端末で利用できるように作業を進めています。


ダイナミック デプス イメージを使うと、アプリで特殊なぼかしやぼけのオプションを提供できる。

新しいオーディオと動画のコーデック

Android Q には、オープンソース動画コーデック AV1 のサポートが追加されています。これを使うと、メディア プロバイダは高品質動画コンテンツを少ない帯域幅で Android 端末にストリーミングできます。また、Android Q は Opus を使ったオーディオ エンコードもサポートしています。このコーデックは、会話や音楽のストリーミングや、サポートされている端末ではハイ ダイナミック レンジ動画用の HDR10+ に最適です。

MediaCodecInfo API を使うと、Android 端末の動画レンダリング能力を簡単に判断できます。VideoCodecCapabilities.getSupportedPerformancePoints() に任意のコーデックを指定すると、サポートされているサイズとフレームレートの一覧を取得できます。これにより、どんな端末でも、最高の品質で動画コンテンツを選んでレンダリングできるようになります。

ネイティブ MIDI API

C++ でオーディオ処理を行うアプリのために、Android Q は NDK 経由で MIDI 端末と通信できるネイティブ MIDI API を導入しています。この API を使うと、非ブロック読み取りを使ってオーディオ コールバック内から MIDI データを取得し、MIDI メッセージを低遅延で処理することができます。サンプルアプリとこちらのソースコードで試してみてください。

Vulkan の ANGLE

ゲームやグラフィックスのデベロッパーにさらなる一貫性を提供するため、Vulkan をベースにしたすべての端末を対象として、更新可能な標準 OpenGL ドライバを導入する作業を進めています。Android Q には、Android 端末の Vulkan 上に構築した ANGLE の試験運用版サポートを追加します。ANGLE は、実装によらない高パフォーマンスな OpenGL として設計されたグラフィックス抽象化レイヤーです。OpenGL ES を使う多くのアプリやゲームは、ANGLE を通して Vulkan のパフォーマンスと安定性を活用でき、Android 端末で、ベンダーに依存しない一貫性のある ES 実装を利用できます。Android Q では OpenGL ES 2.0 をサポートする予定です。ロードマップの次の予定では ES 3.0 がサポートされる予定です。
この実装は、OpenGL 機能の追加、バグの修正、パフォーマンスの最適化によって拡張する予定です。Android の現在の ANGLE サポート状況、使用方法、今後の計画などについては、ドキュメントをご覧ください。設定のデベロッパー オプションからオプトインすると、初期サポートのテストを始めることができます。ぜひお試しください。

すべての場所に Vulkan を

Android で Vulkan のインパクトを拡大する取り組みとして、高パフォーマンス 3D グラフィックス向けの低オーバーヘッド、クロスプラットフォーム API を実装する作業が続いています。その目的は、Android の Vulkan を広くサポートされた一貫性のあるグラフィックス用デベロッパー API にすることです。現在、端末メーカーのパートナーと協力し、Vulkan 1.1 が Android Q 以降を実行するすべての 64 ビット端末で必須、すべての 32 ビット端末で推奨となるように作業を進めています。これにより、今後、統一された高パフォーマンス グラフィックス API が提供され、アプリやゲームで利用できるようになるでしょう。


Neural Networks API 1.2

2017 年に Neural Networks API(NNAPI)が導入されてからも、サポートされる操作の数の拡大と、既存機能の改善を続けています。Android Q では、さまざまなパフォーマンス最適化と合わせて、ARGMAX、ARGMIN、量子化 LSTM など、60 個の新命令を追加しています。これは、物体検知やイメージ セグメンテーションなど、数多くのモデルを高速化する土台となります。現在、NNAPI 1.2 のサポートを最適化してリリースするために、ハードウェア ベンダーや TensorFlow などの人気のある機械学習フレームワークと協力して作業を進めています。

Android の土台の強化

ART のパフォーマンス

Android Q には、ART ランタイムに対する複数の新たな改善が含まれています。これにより、デベロッパーが何もしなくても、アプリの起動は速く、メモリ消費量は少なくなります。

Android Nougat 以来、ART はプロファイルに基づく最適化(PGO)を提供してきました。時間とともに、コードの頻繁に実行される部分が特定され、事前にコンパイルされるようになるので、アプリの起動も速くなります。最初のアプリの起動に役立てるため、Google Play が APK と合わせてクラウドベースのプロファイルを提供するようになります。これは、匿名化された集計済み ART プロファイルです。アプリが実行されなくても ART がアプリの一部を事前コンパイルできるようになるので、最適化プロセス全体をいきなり高速に始めることができます。クラウドベースのプロファイルは、すべてのアプリに役立ちます。この機能は、Android P 以降を実行している端末で既に利用できるようになっています。


ART 自体の改善も続いています。たとえば Android Q では、アプリのプロセスをあらかじめ開始し、それをセキュリティ コンテナに移動することで Zygote プロセスを最適化しています。これによって、いつでもアプリを即座に起動できるようになります。アプリのヒープイメージに、クラスなど、さらに多くの情報を格納するようにして、そのイメージをスレッドを使って高速に読み込みます。また、ART の並列コピー(CC)ガベージ コレクタに、世代別ガベージ コレクションを追加しています。世代別 CC を使うと、若い世代のオブジェクトを個別に回収するため、効率が上昇します。コストは完全ヒープ GC と比較してかなり低くなりますが、それでも十分な領域を再利用できます。時間や CPU に注目した全体的なガベージ コレクションの効率は上がり、ジャンクは減ってローエンド端末でもアプリの動作が快適になります。

アプリのセキュリティ

BiometricPrompt は、システムレベルでバイオメトリックをサポートするための統合認証フレームワークです。Android Q では、顔認証などのパッシブ認証手法のサポートを拡大するとともに、暗黙的および明示的な認証フローを追加しています。明示的フローでは、認証を行う際に、ユーザーが明示的に TEE のトランザクションを確認する必要があります。暗黙的フローは、パッシブ認証を利用してトランザクションの代わりに軽量な代替手法を使うように設計されています。また、必要な場合は、端末の認証情報にフォールバックできるように改善しました。

Android Q には、TLS 1.3 のサポートも追加しています。これは TLS 標準の大きな改訂で、パフォーマンスの向上とセキュリティの強化が含まれています。私たちのベンチマークによれば、TLS 1.3 による安全な接続の確立は、TLS 1.2 よりも 40% ほど高速になっています。デフォルトでは、すべてのTLS 接続に対して TLS 1.3 が有効になっています。詳しくはドキュメントをご覧ください。

一般公開 API による互換性維持

私たち全員が気にしているもう 1 つの点は、OS の変化や進化が起こっても、アプリがスムーズに動作し続けるようにすることです。非 SDK API を使っているアプリは、ユーザーにはクラッシュのリスクが、デベロッパーには緊急リリースのリスクがあります。Android Q では、アプリが一般公開 API のみを使うようにするための Android P から始まった長期的取り組みを継続しています。アプリで非 SDK API の使用をやめるには時間がかかることは承知しています。そのため、事前お知らせもしています。

Android Q では、アクセスを禁止する非 SDK インターフェースが増加しています。代わりに一般公開されているインターフェースを利用するようにしてください。アプリを壊さずに移行できるように、アプリが Android Q をターゲットにしている場合のみ、この制限が有効になるようにしています。代替用の一般公開 API は、今後も皆さんのリクエストに応じて追加する予定です。ユースケースを満たす一般公開 API がないという方は、お知らせください

非 SDK インターフェースの使用については、アプリをテストすることが重要です。アプリがリフレクションや JNI 経由で非 SDK API にアクセスした場合に警告されるように、StrictMode のメソッドである detectNonSdkApiUsage() を使うことをおすすめします。現時点で API が制限の対象になっていなくても(グレーリスト)、今後のために計画を立ててその API の使用をやめて、互換性の問題を減らすようにしてください。Android Q の制限の詳細については、デベロッパー ガイドをご覧ください。

最新の Android

私たちは、すべてのアプリが最新版 Android のセキュリティ機能やパフォーマンス機能をすべて利用できるようにする努力を続けています。今年、Google Play では、新規アプリやアップデートで、アプリの targetSdkVersion を 28(Android 9 Pie)に設定することが求められるようになる予定です。この変更と合わせて、Android Q では API レベル 23(Android Marshmallow)より前のプラットフォームをターゲットにしているアプリを初めて実行した際に、ダイアログで警告が表示されるようになります。アプリの移行に役立つリソースのチェックリストはこちらです。

エコシステムも、64 ビット端末対応に向けて動いています。今年中に Google Play では、すべてのアプリで 64 ビットのサポートが必須になります。アプリでネイティブの SDK やライブラリを使っている方は、64 ビット対応版のSDK やライブラリを使う必要があることを覚えておいてください。対応方法の詳細については、デベロッパー ガイドをご覧ください。


Android Q ベータ版を使ってみる

アプリに影響する可能性が高い重要なプライバシー機能があるので、すぐにテストを始めることをおすすめします。特に、Android Q のストレージの変更、位置情報パーミッションの新たなステータス、バックグラウンド アプリ起動の制限、端末識別子の制限を有効にしてテストしてみるといいでしょう。詳細については、プライバシーに関するドキュメントをご覧ください。

まずは、Android Q ベータ版を実行している端末または Android Virtual Device に、Google Play から現在のアプリをインストールして、ユーザーフローを試してみます。すべてのアプリについて、適切な見栄えで動作し、Android Q の動作の変更点に問題なく対応できるようにしてください。問題を見つけた場合は、ターゲット レベルを変更せずに、現在のアプリを修正することをおすすめします。手順や推奨スケジュールについては、移行ガイドをご覧ください。

次に、できるだけ早くアプリの targetSdkVersion を 'Q' にアップデートします。これにより、アプリですべての Android Q のプライバシー機能やセキュリティ機能に加え、その他の Q を対象としたアプリの動作の変更点もテストできるようになります。

新しい機能と API を試してみる

準備ができたら、Android Q に移行し、アプリで使うことができる新しい機能や API について学習してください。まずは、API 差分レポート、Android Q ベータ版 API リファレンス、デベロッパー ガイドを確認するといいでしょう。また、Android Q ベータ版デベロッパー サイトには、リリースノートや問題を報告するためのサポート リソースも掲載されています。

Android Q でビルドを行うには、Android Q ベータ版 SDK およびツールを Android Studio 3.3 以降にダウンロードし、 こちらの手順に従って環境を設定します。Android Q に関連する変更点の最新の修正を手に入れたい場合は、Android Studio 3.5 以降を使うことをおすすめします。

Android Q ベータ版の入手方法

Android Q ベータ版の OTA アップデートを受け取るのは簡単です。Pixel 端末をこちらから登録してください(今年は、Pixel 3、Pixel 2 に加え、オリジナルの Pixel も含めた 3 世代すべての Pixel をサポートします!)。これらの端末用のダウンロード可能なシステム イメージも公開されています。Pixel 端末をお持ちでない方は、Android Emulator を使うことができます。Android Studio の SDK Manager から、最新のエミュレータのシステム イメージをダウンロードしてください。

プレビュー システム イメージと SDK は、プレビュー期間中、定期的にアップデートされる予定です。ベータ版プログラムの進行と合わせて、他の機能についてもお知らせします。
いつものように、皆さんのフィードバックは重要です。お気づきの点はぜひお知らせください。早めにお知らせいただければより多くのフィードバックを反映できます。問題を見つけた場合は、こちらから報告をお願いします。ホットリストは、プラットフォームの問題アプリの互換性の問題サードパーティ SDK の問題のそれぞれを記録できるように分割されています。


Reviewed by Takeshi Hagikura - Developer Relations Team