Android 10 のデベロッパー向け情報

Android 10 は、3 つの重要なテーマを軸に開発されました。まず、Android 10 は、高度な機械学習と、折りたたみ式デバイスや 5G 対応スマートフォンなどの新しいデバイスのサポートにより、最先端のモバイル イノベーションを形作っています。次に、Android 10 はプライバシーとセキュリティに重点を置いており、ユーザーの保護、透明性、管理を向上させるための約 50 の機能を備えています。最後に、Android 10 では、個人や家族がテクノロジーとのより良いバランスを取れるように、ユーザーの Digital Wellbeing 機能を拡張しています。

ここでは、デベロッパー向けの Android 10 の機能と、その活用方法について説明します。

イノベーションと新機能

Android 10 では、最新のハードウェアとソフトウェアのイノベーションを活用して、優れたアプリ エクスペリエンスをユーザーに提供できます。

Android 10 では、折りたたみ式デバイスやその他の大画面デバイス向けにアプリを最適化できます。

折りたたみ式デバイス

Android 10 では、堅牢なマルチウィンドウ サポートが構築されており、アプリ ウィンドウをまたいだマルチタスクが拡張され、デバイスの折りたたみ時または展開時にアプリの状態を維持するために画面の継続性が確保されています。Android 10 では、onResumeonPause に複数の改善が行われており、複数のアプリの再開をサポートし、アプリにフォーカスがあるときに通知できるようになっています。また、resizeableActivity マニフェスト属性の動作も変更し、折りたたみ式画面や大画面でのアプリの表示を管理しやすくします。折りたたみ式デバイス向けにビルドできるようにするには、Android Studio で折りたたみ式エミュレータを仮想デバイス(AVD)として構成します。アプリを折りたたみ式デバイス向けに最適化する方法について詳しくは、デベロッパー ガイドをご覧ください。

5Gネットワーク

5G は、常に高速かつ低レイテンシを実現します。Android 10 では、5G のプラットフォーム サポートが追加され、既存の API が拡張され、これらの機能強化を利用できます。接続 API を使用すると、デバイスに高帯域幅の接続があるかどうかを検出し、接続が従量制であるかどうかを確認できます。これにより、アプリやゲームは 5G を介して豊かで没入感のあるエクスペリエンスをユーザーに提供できます。

通知内のスマート リプライ

Android 10 では、オンデバイス ML を使用して、メッセージのスマート リプライや通知内の住所の地図を開くなど、コンテキストに応じたアクションを通知内で提案します。この機能は、何もしなくてもアプリですぐに利用できます。システムが提供するスマート リプライとアクションは、デフォルトで通知に直接挿入されます。必要に応じて、独自の返信やアクションを指定することもできます。setAllowGeneratedReplies()setAllowSystemGeneratedContextualActions() を使用して、通知ごとにスマート リプライをオプトアウトします。

スマート リプライは、通知の内容に基づいてアクションを提案できます。

ダークモード

Android 10 では、システム全体のダークモードが追加されています。これは、暗い場所に適した、バッテリーの節約に役立ちます。ユーザーは、[設定] に移動するか、バッテリー セーバーをオンにすることで、システム全体の新しいダークモードを有効にできます。これにより、システム UI がダークに変更され、それをサポートするアプリのダークモードが有効になります。アプリ用にカスタムのダークテーマを作成したり、新しいフォースダーク機能をオプトインしたりできます。これにより、既存のテーマからダーク バージョンを動的に作成できます。また、AppCompat の DayNight 機能を利用して、以前のバージョンの Android のユーザー向けにダークテーマを表示することもできます。詳しくは、デベロッパー ガイドをご覧ください。

Android 10 では、フォースダークを使用してアプリのダークモードを動的に作成できます。

ジェスチャー ナビゲーション

ジェスチャー ナビゲーションにより、アプリは全画面表示でコンテンツを表示できます。

Android 10 では、ナビゲーション バー領域がなくなった完全なジェスチャー ナビゲーション モードが導入され、アプリが全画面表示を使用して、より豊かで没入感のあるエクスペリエンスを提供できるようになりました。ボタンが表示されるのではなく、エッジスワイプによる従来の [戻る]、[ホーム]、[履歴] のナビゲーションが維持されています。ジェスチャー ナビゲーションとシームレスに融合するには、ナビゲーション バーの背後に描画して臨場感あふれるエクスペリエンスを実現し、エッジ ツー エッジを使用する必要があります。これを実装するには、アプリで setSystemUiVisibility() API を使用して全画面に配置し、必要に応じて WindowInsets を処理して UI の重要な部分が隠されないようにする必要があります。今すぐアプリの最適化を開始してください。詳細については、ブログ投稿シリーズをご覧ください。

設定パネル

新しい Settings Panel API を使用して、アプリのコンテキストで主要なシステム設定を直接表示できるようになりました。設定パネルはフローティング UI で、インターネット接続、NFC、音量など、ユーザーが必要とする可能性のある設定を表示するために使用できます。たとえば、ブラウザで機内モード、Wi-Fi(付近のネットワークを含む)、モバイルデータなどの接続設定を含むパネルを表示できます。設定パネルを表示するには、新しい Settings.Panel アクションのいずれかを使用してインテントを起動します。

ショートカット共有

ショートカットの共有を使用すると、共有をすばやく簡単に行うことができ、ユーザーは別のアプリに直接移動してコンテンツを共有できます。デベロッパーは、コンテンツが添付されたアプリ内で特定のアクティビティを起動する共有ターゲットを公開できます。これらは共有 UI でユーザーに表示されます。共有 UI は事前に公開されているため、起動時にすぐに読み込まれます。ショートカットの共有はアプリのショートカットに似ており、同じ ShortcutInfo API を使用します。この API は ShareTarget AndroidX ライブラリでもサポートされています。詳しくは、サンプルアプリをご覧ください。

共有ショートカットを使用すると、コンテンツが添付されているアプリ内の特定のアクティビティに、ユーザーが直接移動できます。

ユーザーのプライバシー

プラットフォームの保護の強化からプライバシーを念頭に置いた新機能まで、Android 10 ではプライバシーが重視されています。Android 10 では、以前のリリースに基づいて大幅な変更が行われ、プライバシーを保護し、ユーザーがより細かく制御できるようにしています。システム UI の改善、権限の厳格化、アプリが使用できるデータの制限が追加されています。アプリでこれらをサポートする方法について詳しくは、プライバシーの変更点をご覧ください。

アプリがフォアグラウンドにある場合、ユーザーは位置情報へのアクセスを許可できるようになりました。

ユーザーによる位置情報の管理を強化 - 新しい権限オプションにより、ユーザーは位置情報をより詳細に制御できます。アプリが実際に使用されているとき(フォアグラウンドで実行されているときのみ、アプリが位置情報にアクセスできるようにします)。これにより、ほとんどのアプリでは十分なレベルのアクセス権が提供されますが、ユーザーにとっては透明性と管理性が大幅に向上します。位置情報の変更について詳しくは、デベロッパー ガイドまたはブログ投稿をご覧ください。

ネットワーク スキャンでの位置情報の保護 - ネットワーク スキャン用のほとんどの API には、すでに大まかな位置情報の利用許可が必要でした。Android 10 では、代わりに精度の高い位置情報の利用許可が必要になることで、これらの API の保護が強化されています。

デバイス トラッキングの禁止 - アプリは、トラッキングに使用できるリセット不可能なデバイス識別子(デバイスの IMEI、シリアル番号、同様の識別子など)にアクセスできなくなりました。デフォルトでは、Wi-Fi ネットワークに接続されると、デバイスの MAC アドレスもランダム化されます。ユースケースに適した ID を選択するには、ベスト プラクティスをご覧ください。また、こちらで詳細をご確認ください。

外部ストレージ内のユーザーデータの保護 - Android 10 では、ユーザーが外部ストレージ内のファイルやその中のアプリデータをより細かく制御できるように、いくつかの変更が行われています。アプリはプライベート サンドボックスに独自のファイルを保存できますが、共有メディア ファイルにアクセスするには MediaStore を使用し、新しいダウンロード コレクション内の共有ファイルにアクセスするにはシステム ファイル選択ツールを使用する必要があります。詳しくはこちらをご覧ください。

不要な割り込みのブロック - Android 10 では、バックグラウンドからアプリが突然フォアグラウンドに飛び出し、別のアプリからフォーカスを奪うような起動を防ぐことができます。詳細はこちらをご覧ください。

セキュリティ

Android 10 では、高度な暗号化、プラットフォームの強化、認証を通じて、ユーザーのセキュリティを向上させるさまざまな機能が導入されています。詳しくは、Android 10 のセキュリティ アップデートをご覧ください。

ストレージの暗号化 - Android 10 を搭載してリリースされるすべての対応デバイスでは、ユーザーデータの暗号化が必要です。Android 10 では、これをさらに効率的にするために、新しい暗号化モードである Adiantum が搭載されています。

デフォルトで TLS 1.3 - Android 10 では TLS 1.3 がデフォルトで有効になっています。これは TLS 標準のメジャー リビジョンであり、パフォーマンスの向上と強化されたセキュリティを備えています。

プラットフォームの強化 - Android 10 では、プラットフォームのいくつかのセキュリティ クリティカルな領域の強化も行われています。

生体認証の改善 - Android 10 では BiometricPrompt フレームワークが拡張され、顔認証などのパッシブ認証方法がサポートされ、暗黙的および明示的な認証フローが追加されています。明示的なフローでは、認証中にユーザーが TEE のトランザクションを明示的に確認する必要があります。暗黙的フローは、パッシブ認証を使用するトランザクション用の軽量な代替手段として設計されています。Android 10 では、必要な場合のデバイス認証情報のフォールバックも改善されています。詳しくはこちらをご覧ください。

カメラとメディア

写真用の Dynamic Depth

アプリは Dynamic Depth 画像をリクエストできるようになりました。この画像は、JPEG、奥行き関連の要素に関連する XMP メタデータ、奥行きと信頼マップが同一ファイルに埋め込まれています。これにより、アプリで特別なぼかしとボケ表現のオプションを提供できます。Dynamic Depth はエコシステムのオープン フォーマットであり、Google はパートナーと協力して、Android 10 以降を搭載したデバイスで利用できるようにしています。

Dynamic Depth 画像を使用すると、特別なぼかしとボケ加工のオプションをアプリに提供できます。

音声再生キャプチャ

音声を再生するすべてのアプリで、新しい音声再生キャプチャ API を使用して他のアプリの音声ストリームをキャプチャできるようになりました。この API を使用すると、字幕を有効にするだけでなく、ライブ ストリーミング ゲームなどの一般的なユースケースをサポートできます。この新機能はプライバシーと著作権の保護を念頭に置いて構築されているため、アプリが別のアプリの音声をキャプチャする機能には制限があり、アプリは音声ストリームをキャプチャできるかどうかを完全に制御できます。詳しくは、こちらのブログ投稿をご覧ください。

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

Android 10 では、オープンソースの動画コーデック AV1 のサポートが追加されています。これにより、メディア プロバイダは高品質の動画コンテンツを少ない帯域幅で Android デバイスにストリーミングできます。さらに、Android 10 は、Opus(音声と音楽ストリーミング用に最適化されたロイヤリティフリーのオープン コーデック)を使用した音声エンコードをサポートしています。また、サポートしているデバイスでは、ハイ ダイナミック レンジ動画用の HDR10+ をサポートしています。MediaCodecInfo API を使用すると、Android デバイスの動画レンダリング機能を簡単に特定できます。任意のコーデックについて、サポートされているサイズとフレームレートのリストを取得できます。

Native MIDI API

Android 10 では、C++ でオーディオ処理を行うアプリ向けに、NDK を介して MIDI デバイスと通信するためのネイティブ MIDI API が導入されています。この API を使用すると、非ブロック読み取りを使用してオーディオ コールバック内で MIDI データを取得し、MIDI メッセージを低レイテンシで処理できます。サンプルアプリとこちらのソースコードで試してみましょう。

指向性ズームマイク

Android 10 では、新しい MicrophoneDirection API により音声キャプチャをより細かく制御できるようになりました。API を使用すると、録音時にマイクの向きを指定できます。たとえば、ユーザーが「自撮り」動画を撮影しているときに、録音するために前面マイクをリクエストできます(存在する場合)。また、この API では、ズーム可能なマイクを制御する標準化された方法が導入され、アプリでレコード フィールドのディメンションを制御できるようになります。

Vulkan Everywhere

Android 10 では、高パフォーマンスの 3D グラフィックを実現する、低オーバーヘッドのクロス プラットフォーム API の実装により、Vulkan の効果を高めています。Vulkan 1.1 は、Android 10 以降を搭載したすべての 64 ビットデバイスで必須であり、すべての 32 ビットデバイスに推奨されています。エコシステムにおける Vulkan のサポートはすでに大きく普及しており、Android N 以降を搭載しているデバイスの 53% が Vulkan 1.0.3 以降をサポートしています。Android 10 の新しい要件により、今後 1 年間でさらなる普及が見込まれます。

接続性

ピアツーピア接続とインターネット接続の向上

Wi-Fi スタックをリファクタリングして、プライバシーとパフォーマンスを向上させ、IoT デバイスの管理やインターネット接続の提案などの一般的なユースケースを改善しました(位置情報の利用許可は不要)。Network Connections API を使用すると、構成、ダウンロード、印刷などのピアツーピア機能で、ローカル Wi-Fi 経由で IoT デバイスを簡単に管理できます。ネットワーク候補 API を使用すると、アプリはインターネット接続用に優先 Wi-Fi ネットワークをユーザーに表示できます。

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

アプリから高パフォーマンス モードと低遅延モードを有効にすることで、アダプティブ Wi-Fi をリクエストできるようになりました。リアルタイムのゲーム、アクティブな音声通話、同様のユースケースなど、ユーザー エクスペリエンスにとって低レイテンシが重要な場合、これらは大きなメリットとなります。プラットフォームはデバイスのファームウェアと連携し、消費電力を最小限に抑えて要件を満たします。新しいパフォーマンス モードを使用するには、WIFI_MODE_FULL_LOW_LATENCY または WIFI_MODE_FULL_HIGH_PERF を指定して WifiManager.WifiLock.createWifiLock() を呼び出します。これらのモードでは、プラットフォームはデバイスのファームウェアと連携して、消費電力を最小限に抑えて要件を満たします。

Android の基盤強化

ART の最適化

ART ランタイムの改善により、アプリの起動が速くなり、メモリの消費量が削減され、実行がスムーズになります。ユーザーが何もする必要はありません。Google Play によって提供される ART プロファイルを使用すると、実行前に ART がアプリの一部をプリコンパイルできます。Android 10 では実行時に、世代別ガベージ コレクションが ART の同時コピー(CC)ガベージ コレクタに追加され、時間と CPU の観点からガベージ コレクションの効率が向上し、ジャンクが減少し、ローエンド デバイスでのアプリの動作が改善されています。

このグラフは、Play プロファイルを使用してテストした場合に、特定のアプリの起動時間の改善率を示しています。

Neural Networks API 1.2

ARGMAX、ARGMIN、量子化 LSTM など 60 個の新しい演算が追加され、さまざまなパフォーマンス最適化が行われました。これは、オブジェクト検出や画像セグメンテーションなど、はるかに幅広いモデルを高速化するための基盤となります。Google はハードウェア ベンダーや TensorFlow などの一般的な機械学習フレームワークと協力して、NNAPI 1.2 のサポートを最適化し、展開しています。

Thermal API

デバイスが熱くなりすぎると、CPU や GPU がスロットリングされ、アプリやゲームが予期しない方法で影響を受ける可能性があります。Android 10 では、アプリとゲームが Thermal API を使用してデバイス上の変更をモニタリングし、通常の温度に戻すための措置を講じることができるようになりました。たとえば、ストリーミング アプリでは解像度/ビットレートやネットワーク トラフィックを削減でき、カメラアプリではフラッシュや集中的な画像補正を無効にできます。また、ゲームではフレームレートやポリゴン テッセレーションを低減できます。詳しくはこちらをご覧ください。

公開 API による互換性

Android 10 では引き続き非 SDK インターフェースに対する制限が拡大され、アプリは公開 API のみを使用するように徐々に移行しています。現在使用しているインターフェースが制限されている場合は、代わりにそのインターフェースの新しい公開 API をリクエストできます。移行を促進し、アプリの互換性を損なわないように、アプリが Android 10(API 29)をターゲットとしている場合にのみ制限が有効になります。制限事項の詳細については、デベロッパー ガイドをご覧ください。

迅速な更新、最新のコード

Android 10 は、プロジェクト Treble を通じてアップデートを高速化するために構築されています。プロジェクト Treble は、デバイス メーカーとシリコン メーカーが提供する、Android と基盤となるデバイスコードとの間に整合性のあるテスト可能なインターフェースを提供します。デバイス メーカーは Treble を使用することで、Android 10 を Treble 対応のデバイスに迅速かつ低コストで実装できます。

Android 10 は、プロジェクト Mainline(正式名称は Google Play システム アップデート)をサポートする最初のリリースでもあります。これは、Google Play から直接、重要なコード変更によって Android ユーザーを保護し、デバイスを最新の状態に保つための新しいテクノロジーです。Google Play システム アップデートにより、デバイス メーカーによるフルシステム アップデートを行わなくても、Android 10 以降を搭載したすべてのデバイスの特定の内部コンポーネントをアップデートできます。

デベロッパーにとっては、Android 10 のこれらのアップデートにより、デバイス間でのプラットフォーム実装の一貫性が促進され、時間の経過とともに、開発とテストのコストを削減できる均一性が向上することが期待されます。

始める

Android 10 のデベロッパー向けリソース全体については、developer.android.com/10 をご覧ください。