Android 10 は、3 つの重要なテーマを軸に開発されました。1 つ目として、高度な機械学習機能と、折りたたみスマートフォンや 5G 対応スマートフォンなどの新しいデバイスのサポートにより、最先端のモバイル イノベーションを実現しています。2 つ目として、プライバシーとセキュリティに重点を置き、約 50 種類の機能によって、データ保護能力を強化するとともに透明性や管理性を高めています。3 つ目として、Digital Wellbeing 機能の拡張により、ユーザーやその家族がテクノロジーと健康的な生活とのよりよいバランスを見いだせるようにしています。
ここでは、デベロッパー向け Android 10 の内容と、現時点での Android 10 の活用方法について説明します。
イノベーションと新機能
Android 10 では、最新のハードウェアとソフトウェアのイノベーションを利用して、優れたアプリ エクスペリエンスをユーザーに提供できます。
折りたたみ式デバイス
強力なマルチウィンドウ機能をサポートする Android 10 では、複数のアプリ ウィンドウにマルチタスクを展開できるほか、デバイスの開閉時にはアプリの状態が維持されるよう画面がスムーズに移行します。Android 10 では、onResume と onPause にいくつかの改良が加えられ、複数のアプリの再開をサポートし、アプリがフォーカスされたときにアプリに通知します。また、resizeableActivity マニフェスト属性の機能変更により、折りたたみ式画面や大きな画面でのアプリの表示方法を管理できるようになりました。折りたたみ式デバイス向けの開発に役立てるために、Android Studio で折りたたみ式エミュレータを仮想デバイス(AVD)として構成できます。アプリを折りたたみ式デバイス用に最適化する方法については、デベロッパー ガイドをご覧ください。
5Gネットワーク
5G を使用すれば、常に高速で低遅延の通信を行えます。Android 10 では、5G 用のプラットフォーム サポートが追加され、その機能を活用するために既存の API が拡張されています。接続関連の API を使用して、デバイスで高帯域幅接続が利用可能かどうか、またその接続が従量制かどうかを確認できるようになりました。アプリやゲームにこれらの機能を実装することで、5G 環境を活かした臨場感あふれる魅力的な体験をユーザーに提供できます。
通知内のスマート リプライ
Android 10 では、デバイス上での機械学習により、通知内で状況に応じたアクションの提案がなされます(メッセージにスマート リプライする、通知に記載された住所の地図を開くなど)。この機能は、何もしなくてもアプリからすぐに利用できます。システムによるスマート リプライとアクションは、デフォルトで通知に直接挿入されます。必要に応じて、独自の返信やアクションを指定することもできます。setAllowGeneratedReplies() と setAllowSystemGeneratedContextualActions() を使用して、通知ごとにスマート リプライを無効にできます。
ダークモード
Android 10 には、システムワイドのダークテーマが追加されています。暗い場所では特に見やすく、電池の節約にもなります。システムワイドのダークテーマを有効にするには、設定画面に移動するか、バッテリー セーバーをオンにします。これによりシステムのユーザー インターフェースが暗くなり、アプリのダークテーマが有効になります(アプリが対応している場合)。アプリのカスタム ダークテーマを独自に作成することはもちろん、新機能のフォースダークを有効にすることで、既存のテーマからダーク バージョンが動的に作成されるようにすることもできます。また、AppCompat の DayNight 機能を利用して、以前のバージョンの Android のユーザー向けにダークテーマを提供することもできます。詳しくは、デベロッパー ガイドをご覧ください。
ジェスチャー ナビゲーション
Android 10 には、ナビゲーション バーを非表示にしてジェスチャー ナビゲーションのみで操作するモードが導入されています。これにより、アプリを全画面に表示でき、ユーザーに対してより臨場感のある魅力的な体験を提供できます。これまでボタンで行ってきた「戻る」、「ホーム」、「最近」の操作は、エッジスワイプで行えます。違和感のないジェスチャー ナビゲーションを実現するには、ナビゲーション バーの背後も含む全画面にアプリを表示して、没入感が得られるようにすることが大切です。そのためには、setSystemUiVisibility() API を使用してアプリを全画面に表示し、重要な UI 部分が隠れないように必要に応じて WindowInsets を調整します。すぐにアプリの最適化を開始しましょう。詳しくは、Google による一連のブログ投稿をご覧ください。
設定パネル
新しい設定パネル API を使用して、重要なシステム設定をアプリのコンテキストから直接表示できるようになりました。設定パネルは、インターネット接続、NFC、音量など、ユーザーが必要としそうな設定を表示するフローティング UI です。たとえばブラウザなら、機内モード、Wi-Fi(近くのネットワークを含む)、モバイルデータなどの接続設定のパネルを表示するとよいかもしれません。設定パネルを表示するには、新しい Settings.Panel アクションのいずれかを指定してインテントを起動するだけで表示できます。
ショートカット共有
ショートカット共有とは、共有をすばやく簡単にできるようにする機能で、これによりユーザーは、コンテンツを共有する別のアプリに直接ジャンプできます。デベロッパーは共有ターゲットを公開し、そこからアプリ内の特定のアクティビティが、コンテンツを添付した状態で起動されるようにできます。共有ターゲットは、共有 UI の中でユーザーに表示されます。ターゲットはあらかじめ公開されているので、共有 UI は起動時に即座に読み込まれます。ショートカット共有はアプリのショートカットと似ており、同じ ShortcutInfo API が使用されます。この API は、ShareTarget AndroidX ライブラリでもサポートされています。詳細については、サンプルアプリをご覧ください。
ユーザーのプライバシー
プラットフォームでのさらなる保護の強化から、プライバシーを考慮して設計された種々の新機能に至るまで、Android 10 ではプライバシーに特に重点が置かれています。プライバシーを保護するとともに、ユーザーが管理できる範囲を広げるため、これまでのバージョンを基盤にして、システム UI の改良、権限の厳格化、アプリで使用できるデータの制限といった広範な変更が行われています。アプリでこれらをサポートする方法について詳しくは、プライバシーの変更点をご覧ください。
ユーザーによる位置情報の管理の厳格化 - ユーザーは、新しい権限オプションを使用して、位置情報をより厳格に管理できるようになりました。実際に使用されている(フォアグラウンドで実行中の)アプリに対してのみ、位置情報へのアクセスを許可するようにできます。これにより、ほとんどのアプリにとっては十分なアクセスレベルが得られるうえ、ユーザーにとっては透明性と管理性が大幅に向上します。位置情報関連の変更の詳細については、デベロッパー ガイドや Google によるブログ投稿をご覧ください。
ネットワーク スキャンでの位置情報を保護 - ネットワーク スキャンのためのほとんどの API には、これまでも大まかな位置情報の利用許可が必要でした。Android 10 では、代わりに精度の高い位置情報の利用許可が要求されることで、これらの API に関する保護が強化されています。
デバイス トラッキングの防止 - トラッキングに使用できる再設定不可能なデバイス ID(デバイス IMEI、シリアル番号、その他の同様な ID)には、アプリからアクセスできなくなりました。Wi-Fi ネットワークに接続する際のデバイスの MAC アドレスも、デフォルトでランダムになります。ユースケースに適した ID を選択するためのベスト プラクティスをご確認ください。また、こちらの詳細もご覧ください。
外部ストレージのユーザーデータの保護 - Android 10 では、ユーザーが外部ストレージ内のファイルやその中のアプリデータをより厳格に管理できるようにするため、さまざまな変更が行われています。アプリでは、プライベート サンドボックスに独自のファイルを保存できますが、共有メディア ファイルにアクセスするには MediaStore を使用する必要があり、また新しいダウンロード コレクション内の共有ファイルにアクセスするにはシステム ファイル ピッカーを使用する必要があります。詳しくはこちらをご覧ください。
不要な割り込みのブロック - Android 10 では、バックグラウンドでアプリが予期せずフォアグラウンドになり、別のアプリからフォーカスを引き継ぐのを防止しています。詳しくは、こちらをご覧ください。
セキュリティ
Android 10 では、高度な暗号化、プラットフォーム強化、認証を利用したさまざまな機能の導入により、ユーザーのセキュリティを確保しています。Android 10 で更新されたセキュリティの詳細についてはこちらをご覧ください。
ストレージの暗号化 - Android 10 を搭載してリリースされるすべての互換デバイスでは、ユーザーデータの暗号化が必須となっています。これを効率的に行うため、Android 10 には Google の新しい暗号化モードである Adiantum が含まれています。
TLS 1.3 のデフォルト化 - Android 10 では、デフォルトで TLS 1.3 が有効になっています。これは TLS 標準のメジャー リビジョンで、パフォーマンスの向上とセキュリティの強化が行われています。
プラットフォームの強化 - Android 10 では、プラットフォームにおいてセキュリティが重要ないくつかの領域についても強化が行われています。
生体認証の改善 - Android 10 では BiometricPrompt フレームワークが拡張され、顔認証などのパッシブな認証方法をサポートし、暗黙的な認証フローと明示的な認証フローが追加されています。明示的フローでは、認証を行う際に、ユーザーが明示的に TEE のトランザクションを確認する必要があります。暗黙的フローは、パッシブ認証を使用するトランザクション用の簡易な代替手段として設計されたものです。Android 10 では、必要時におけるデバイス認証情報のフォールバックも改善されています。詳しくはこちらをご覧ください。
カメラとメディア
写真用の Dynamic Depth
アプリから Dynamic Depth 形式の画像をリクエストできるようになりました。この形式の画像は、JPEG、深度関連の要素が格納された XMP メタデータ、深度と信頼度のマップが 1 つのファイルに埋め込まれて構成されています。これにより、特殊なぼかしなどの加工機能をアプリで提供できます。Dynamic Depth はエコシステムのためのオープンな形式です。Google では、これを Android 10 以降のデバイスで利用できるようにするための取り組みを、パートナー各社と進めています。
音声再生キャプチャ
音声を再生するアプリの音声ストリームを、新しい音声再生キャプチャ API を使用して他のアプリからキャプチャできるようになりました。この API を使用すると、字幕と字幕を有効にできるだけでなく、ゲームのライブ配信ゲームなどの一般的なユースケースもサポートできます。この新機能は、プライバシーと著作権の保護を考慮して開発されました。そのため、アプリが別のアプリの音声をキャプチャする機能には制限があり、アプリは音声ストリームのキャプチャを許可するかどうかを完全に制御できます。詳しくは、こちらのブログ投稿をご覧ください。
新しいオーディオ コーデックと動画コーデック
Android 10 では、オープンソースの動画コーデックである AV1 がサポートされました。これにより、メディア プロバイダは高品質の動画コンテンツを少ない帯域幅で Android デバイスにストリーミングできます。さらに、Android 10 は、音声と音楽のストリーミング向けに最適化されたロイヤリティフリーのオープンなコーデックである Opus を使用した音声エンコードと、ハイ ダイナミック レンジに対応するデバイスでのハイ ダイナミック レンジ動画用の HDR10+ もサポートしています。MediaCodecInfo API を使用すると、Android デバイスの動画レンダリング性能を簡単に判断できます。特定のコーデックについて、サポートされているサイズとフレームレートのリストを取得できます。
Native MIDI API
C++ でオーディオ処理を行うアプリのために、Android 10 は 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 ビット デバイスで推奨になりました。Android N 以上のデバイスの 53% が Vulkan 1.0.3 以降をサポートしており、エコシステムにおける Vulkan のサポートはすでにかなりの速度で進展しています。Android 10 の新しい要件では、今後 1 年間で導入がさらに拡大することが見込まれます。
接続
ピアツーピア接続とインターネット接続の向上
Wi-Fi スタックをリファクタリングして、プライバシーとパフォーマンスを向上させるとともに、IoT デバイスの管理やインターネット接続候補の提示といった一般的な用途での位置情報の利用許可を不要にして使い勝手を向上させました。ネットワーク接続 API を使用すると、ローカル Wi-Fi 経由で IoT デバイスを簡単に管理し、設定、ダウンロード、印刷などのピアツーピア機能を利用できます。ネットワーク候補 API を使用すると、インターネット接続のための Wi-Fi ネットワークの候補をアプリ上でユーザーに提示できます。
Wi-Fi パフォーマンス モード
高性能モードと低遅延モードを有効にすることで、アプリでアダプティブ Wi-Fi をリクエストできるようになりました。このモードは、リアルタイム ゲームやアクティブな音声通話など、低遅延が重要な場面では特に大きなメリットをもたらします。プラットフォームとデバイス ファームウェアの連携により、最小限の電力消費で要件を満たすことができます。新しいパフォーマンス モードを使用するには、WIFI_MODE_FULL_LOW_LATENCY
または WIFI_MODE_FULL_HIGH_PERF
を指定して WifiManager.WifiLock.createWifiLock() を呼び出します。この 2 つのモードでは、プラットフォームが端末のファームウェアと連動し、最低消費電力で要件を満たすように動作します。
Android の基盤強化
ART の最適化
ART ランタイムに対するいくつかの改良により、アプリをより速く起動し、メモリ消費量を抑えてよりスムーズに実行できるようになりました。デベロッパーは何もする必要はありません。Google Play で提供される ART プロファイルを使用すると、起動前でも ART によってアプリの一部が事前コンパイルされるようにできます。ランタイムには、世代別ガベージ コレクションが ART の並列コピー(CC)ガベージ コレクタに追加され、時間と CPU の点でガベージ コレクションの効率が向上します。これにより、ジャンクが減ってローエンドのデバイスでもアプリの動作が快適になります。
Neural Networks API 1.2
ARGMAX、ARGMIN、量子化 LSTM など、60 の新しい演算が追加され、さまざまなパフォーマンス最適化が可能になりました。この変更により、物体検知や画像セグメンテーションなど、さらに多くのモデルを高速化できるようになります。NNAPI 1.2 のサポート体制を整えて展開できるよう、ハードウェア ベンダーや TensorFlow などの広く利用されている機械学習フレームワークと連携した取り組みを進めています。
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 システム アップデート)をサポートする初めてのバージョンです。これは、Android ユーザーを保護し、デバイスを最新状態に保つために、重要なコード変更を Google Play から直接行う新しいテクノロジーです。Google Play システム アップデートでは、Android 10 以降を搭載するすべてのデバイスについて、特定の内部コンポーネントを Google 側で更新できます。デバイス メーカーによるシステム全体の更新は必要ありません。
この変更により、デベロッパーにとっては、広範なデバイスにわたってプラットフォーム実装の一貫性が向上し、時間とともに統一性が高まることで、開発やテストのコストを削減できるというメリットが生じると考えられます。
始める
Android 10 のデベロッパー向けリソース全体については、developer.android.com/10 をご覧ください。