Android 10 は、3 つの重要なテーマを軸に開発されました。1 つ目として、高度な機械学習機能と、折りたたみスマートフォンや 5G 対応スマートフォンなどの新しいデバイスのサポートにより、最先端のモバイル イノベーションを実現しています。2 つ目として、プライバシーとセキュリティに重点を置き、約 50 種類の機能によって、データ保護能力を強化するとともに透明性や管理性を高めています。3 つ目として、Digital Wellbeing 機能の拡張により、ユーザーやその家族がテクノロジーと健康的な生活とのよりよいバランスを見いだせるようにしています。
ここでは、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 での新たな要件により、今後さらなる進展が見込まれます。
接続
ピアツーピア接続とインターネット接続の向上
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() を呼び出します。このモードでは、プラットフォームとデバイス ファームウェアの連携により、最小限の電力消費で要件を満たすことができます。
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 は Project Mainline(正式名称は Google Play システム アップデート)をサポートする初めてのバージョンです。これは、Android ユーザーを保護し、デバイスを最新状態に保つために、重要なコード変更を Google Play から直接行う新しいテクノロジーです。Google Play システム アップデートでは、Android 10 以降を搭載するすべてのデバイスについて、特定の内部コンポーネントを Google 側で更新できます。デバイス メーカーによるシステム全体の更新は必要ありません。
この変更により、デベロッパーにとっては、広範なデバイスにわたってプラットフォーム実装の一貫性が向上し、時間とともに統一性が高まることで、開発やテストのコストを削減できるというメリットが生じると考えられます。
始める
Android 10 のデベロッパー向けリソース全体については、developer.android.com/10 をご覧ください。