1page.title=Android N for Developers 2meta.tags="preview", "androidn" 3page.tags="preview", "developer preview" 4page.image=images/cards/card-n-apis_2x.png 5@jd:body 6 7 8 9 10<div id="tb-wrapper"> 11<div id="tb"> 12 <h2>主なデベロッパー機能</h2> 13 <ol> 14 <ul style="list-style-type:none;"> 15 <li><a href="#multi-window_support">マルチ ウィンドウのサポート</a></li> 16 <li><a href="#notification_enhancements">通知</a></li> 17 <li><a href="#jit_aot">JIT / AOT コンパイル</a></li> 18 <li><a href="#quick_path_to_app_install">アプリの高速インストール</a></li> 19 <li><a href="#doze_on_the_go">どこでも機能する Doze</a></li> 20 <li><a href="#background_optimizations">バックグラウンド処理の最適化</a></li> 21 <li><a href="#data_saver">データセーバー</a></li> 22 <li><a href="#vulkan">Vulkan API</a></li> 23 <li><a href="#tile_api">クイック設定タイル API</a></li> 24 <li><a href="#number-blocking">電話番号のブロック</a></li> 25 <li><a href="#call_screening">通話スクリーニング</a></li> 26 <li><a href="#multi-locale_languages">ロケールと言語</a></li> 27 <li><a href="#emoji">新しい絵文字</a></li> 28 <li><a href="#icu4">Android の ICU4J API</a></li> 29 <li><a href="#gles_32">OpenGL ES 3.2 API</a></li> 30 <li><a href="#android_tv_recording">Android TV の録画機能</a></li> 31 <li><a href="#android_for_work">Android for Work</a></li> 32 <li><a href="#accessibility_enhancements">ユーザー補助機能</a></li> 33 <li><a href="#direct_boot">ダイレクト ブート</a></li> 34 <li><a href="#key_attestation">キーの構成証明</a></li> 35 <li><a href="#network_security_config">ネットワーク セキュリティ構成</a></li> 36 <li><a href="#default_trusted_ca">既定の信頼される証明機関</a></li> 37 <li><a href="#apk_signature_v2">APK 署名スキーム v2</a></li> 38 <li><a href="#scoped_directory_access">特定のディレクトリへのアクセス</a></li> 39 <li><a href="#keyboard_shortcuts_helper">キーボード ショートカット ヘルパー</a></li> 40 <li><a href="#sustained_performance_api">パフォーマンス維持 API</a></li> 41 <li><a href="#vr">VR サポート</a></li> 42 <li><a href="#print_svc">印刷サービス機能の強化</a></li> 43 <li><a href="#virtual_files">仮想ファイル</a></li> 44 <li><a href="#framemetrics_api">FrameMetricsListener API</a></li> 45 </ol> 46</div> 47</div> 48 49 50 51<p>Android N は現在も開発中ですが、N Developer Preview の一部として Android N を試用できます。 52以下のセクションでは、デベロッパー向けの新しい機能の一部を紹介しています。 53 </p> 54 55<p> 56 <a href="{@docRoot}preview/behavior-changes.html">動作の変更点</a>を確認して、プラットフォームの変更がアプリに影響を及ぼす可能性のある領域について把握してください。また、デベロッパー ガイドを参照して主な機能について詳しく学習し、<a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>をダウンロードして、新しい API の詳細を理解してください。 57 58 59 60</p> 61 62<h2 id="multi-window_support">マルチ ウィンドウのサポート</h2> 63 64 65<p>Android N では、多くのユーザーから求められていたマルチタスク機能がプラットフォームに新しく導入されました。つまり、マルチ ウィンドウがサポートされるようになりました。 66 </p> 67 68 <p>ユーザーは同時に 2 つのアプリを画面に開くことができます。 </p> 69 <ul> 70 <li>Android N が動作している携帯端末やタブレットでは、分割画面モードで 2 つのアプリを左右や上下に並べて実行できます。 71 72また、2 つのアプリの間にある分割線をドラッグしてアプリのサイズを変更することもできます。 73 </li> 74 75<li>Android TV 端末では、アプリを<a href="{@docRoot}preview/features/picture-in-picture.html">ピクチャ イン ピクチャ モード</a>にすると、アプリにコンテンツを表示したまま、他のアプリをブラウジングまたは操作することができます。 76 77</li> 78 </ul> 79 80<div class="col-4of10"> 81<img src="{@docRoot}images/android-7.0/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" /> 82<p class="img-caption"> 83 <strong>図 1.</strong> 分割画面モードで実行されているアプリ 84</p> 85 86 </div> 87 88<p>特にタブレットや大画面の端末では、マルチ ウィンドウのサポートにより、ユーザーを引き付ける新しい方法が提供されます。 89アプリでドラッグ アンド ドロップを有効にすると、ユーザーはアプリとの間でコンテンツを簡単にドラッグすることができるので、快適な使い心地を実現することができます。 90 91 </p> 92 93<p>マルチ ウィンドウのサポートをアプリに追加して、マルチ ウィンドウ ディスプレイを処理する方法を設定するのは簡単です。 94たとえば、アクティビティの最小許容ディメンションを指定すると、ユーザーはアクティビティをそのサイズより小さく変更できなくなります。 95 96また、アプリに対してマルチ ウィンドウ ディスプレイを無効にし、アプリを全画面モードのみで表示することもできます。 97</p> 98 99<p> 100 詳細については、<a href="{@docRoot}preview/features/multi-window.html">マルチ ウィンドウのサポート</a>に関するデベロッパー向けドキュメントをご覧ください。 101 102</p> 103 104<h2 id="notification_enhancements">通知の機能強化</h2> 105 106<p>Android N では、通知が再設計されており、さらに使いやすくなっています。 107次のような点が変更されました。</p> 108 109<ul> 110 <li> 111 <strong>テンプレートのアップデート</strong>:通知テンプレートは、ヒーロー イメージやアバターを中心としたデザインにアップデートされています。 112デベロッパーは、コードに最小限の変更を加えるだけで、この新しいテンプレートを活用できます。 113 114 </li> 115 116 <li> 117 <strong>メッセージ スタイルのカスタマイズ</strong>:<code>MessageStyle</code> クラスを使用して、通知に関連付けられているさらに多くのユーザー インターフェース ラベルをカスタマイズできます。 118 119メッセージ、会話、タイトル、コンテンツ ビューを設定できます。 120 121 </li> 122 123 <li> 124 <strong>バンドル通知</strong>:メッセージをグループ化できます。たとえば、メッセージをトピックごとにグループ化して、各グループを表示できます。 125ユーザーは、各グループに対して、消去やアーカイブといったアクションを実行できます。 126Android Wear 向けの通知を実装したことがある場合は、このモデルはおなじみでしょう。 127 128 129 </li> 130 131 <li> 132 <strong>ダイレクト リプライ</strong>:Android システムでは、インライン リプライがサポートされています。リアルタイム通信アプリを使用しているユーザーは、通知インターフェース内で直接 SMS やテキスト メッセージにすばやく応答できます。 133 134 135 </li> 136 137 <li> 138 <strong>カスタムビュー</strong>:2 つの新しい API を使用すると、通知でカスタムビューを使用するときに、通知ヘッダーやアクションなどのシステム デコレーションを活用できます。 139 140 141 </li> 142</ul> 143 144<div class="col-4of12"> 145 <img src="{@docRoot}images/android-7.0/notifications-1.png" alt="" style="padding:.5em;max-width:226px"> 146</div> 147 148<div class="col-4of12"> 149 <img src="{@docRoot}images/android-7.0/notifications-3.png" alt="" style="padding:.5em;max-width:226px"> 150</div> 151 152<div class="col-4of12"> 153 <img src="{@docRoot}images/android-7.0/notifications-2.png" alt="" style="padding:.5em;max-width:226px"> 154</div> 155 156 157<p class="img-caption"> 158 <strong>図 2.</strong> バンドル通知とダイレクト リプライ 159</p> 160 161<p>以上の新しい機能を実装する方法の詳細については、<a href="{@docRoot}preview/features/notification-updates.html">通知</a>に関するガイドをご覧ください。 162 163</p> 164 165 166 167<h2 id="jit_aot">プロファイルに基づいた JIT / AOT コンパイル</h2> 168 169<p>Android N では、コード プロファイリングにも対応した Just in Time(JIT)コンパイラーが ART に追加されており、Android アプリを実行するときのパフォーマンスが向上しています。 170 171JIT コンパイラーは、ART で現在使用されている Ahead of Time(AOT)コンパイラーを補完するものであり、ランタイム パフォーマンスの向上、ストレージ スペースの削減、アプリとシステムのアップデートの高速化に貢献します。 172 173</p> 174 175<p>プロファイルに基づいたコンパイルを使用すると、アプリの実際の使用方法や端末上での状態に応じて、ART が各アプリの AOT / JIT コンパイルを管理します。 176たとえば、ART は各アプリのホット メソッドのプロファイルを維持し、これらのメソッドをプリコンパイルしてキャッシュに保存することにより、パフォーマンスを最適化します。 177 178また、アプリの他の部分は、実際に使用されるときまでコンパイルされません。 179</p> 180 181<p>プロファイルに基づいたコンパイルは、アプリの主要部分のパフォーマンスを向上させ、関連するバイナリなど、アプリの全体的な RAM 使用量を削減します。 182 183この機能は、メモリが少ない端末で特に重要です。</p> 184 185<p>ART は、端末の電池への影響が最小限になるようにプロファイルに基づいたコンパイルを管理します。 186端末がアイドル状態および充電中のときにのみ、プリコンパイルが事前に実行されるため、時間と電池が節約できます。 187</p> 188 189<h2 id="quick_path_to_app_install">アプリの高速インストール</h2> 190 191<p>ART の JIT コンパイラーの最も明確な利点の 1 つは、アプリのインストールとシステム アップデートの速度です。 192Android 6.0 では最適化とインストールの実行に数分かかっていたサイズの大きいアプリでも、数秒でインストールできるようになりました。 193 194最適化のステップが不要になったため、システム アップデートも高速化されています。 </p> 195 196<h2 id="doze_on_the_go">どこでも機能する Doze</h2> 197 198<p>Android 6.0 では Doze システムモードが導入されています。これにより、端末が机に置かれているときや引き出しに収められているときなどのアイドル時にアプリの CPU とネットワーク通信の実行を保留し、電池を節約します。 199 200 </p> 201 202<p>Android N では Doze が改良され、外出中でも電池を節約できるようになっています。画面をしばらくオフにしたり端末を電源から抜いたりすると、Doze により、通常の CPU およびネットワーク制限の一部がアプリに適用されます。つまり、端末をポケットに入れて持ち歩いているときでも電池を節約できます。 203 204 205 206</p> 207 208 209<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" /> 210<p class="img-caption"> 211 <strong>図 3.</strong> Doze により、端末が静止していないときでも制限が適用され、電池の寿命が延長される 212 213</p> 214 215 216<p>端末が電池で動作しているときに画面をしばらくオフにすると、Doze はネットワーク アクセスを制限し、ジョブと同期を保留します。 217アプリはメンテナンス ウィンドウと呼ばれる短い時間にネットワークにアクセスしたり、保留中のジョブや同期を実行したりします。 218 219画面をオンにするか、端末を電源に接続すると、端末の Doze モードは解除されます。 220</p> 221 222<p>電池で動作している端末が再び静止状態になり、画面がしばらくオフになると、Doze は完全な CPU およびネットワーク制限を {@link 223android.os.PowerManager.WakeLock}、{@link android.app.AlarmManager} アラーム、GPS / Wi-Fi スキャンに適用します。 224 225</p> 226 227<p>アプリを Doze に対応させるためのベスト プラクティスは端末を持ち歩いているかどうかには関係ありません。そのため、Doze が適切に処理されるようにアプリを既にアップデートしている場合は、追加の対応は必要ありません。 228 229そうでない場合は、<a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">アプリの Doze 対応</a>を行ってください。 230</p> 231 232<h2 id="background_optimizations">Project Svelte:バックグラウンド処理の最適化</h2> 233 234<p>Project Svelte は、Android エコシステムのさまざまな端末でシステムやアプリによる RAM の使用を最小限にする取り組みです。 235Android N での Project Svelte は、アプリをバックグラウンドで実行する方法を最適化することに重点を置いています。 236 </p> 237 238<p>ほとんどのアプリでは、バックグラウンド処理が非常に重要になります。バックグラウンド処理を適切に実行すると、状況に応じて高速に実行できるなどユーザー エクスペリエンスが大幅に向上します。バックグラウンド処理が不適切な場合は、RAM(と電池)が必要以上に消費され、他のアプリのシステム パフォーマンスに影響を及ぼす可能性があります。 239 240 241 </p> 242 243<p>Android 5.0 以降では、ユーザーに適した方法でバックグラウンド処理を実行する {@link android.app.job.JobScheduler} が推奨されています。 244 245これによって、メモリ、電源、接続の状態に基づいてシステムを最適化しながら、アプリでジョブをスケジュールできます。 246JobScheduler はシンプルな制御を提供するため、すべてのアプリで JobScheduler を使用することが効果的です。 247 </p> 248 249<p> 250 もう 1 つの適切な選択肢は、Google Play サービスの一部である <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager"><code>GCMNetworkManager</code></a> です。この機能も同様のジョブ スケジュール機能を提供しますが、こちらは以前のバージョンの Android とも互換性があります。 251 252 253 254</p> 255 256<p>さらに多くのユースケースに対応するために、<code>JobScheduler</code> と <code>GCMNetworkManager</code> の拡張は継続されています。たとえば、Android N では、コンテンツ プロバイダの変更に基づいてバックグラウンド処理をスケジュールできるようになりました。 257 258 259また、特にメモリの少ない端末でシステム パフォーマンスを低下させる可能性のある一部の古いパターンの廃止も開始されています。 260 261</p> 262 263<p>一般的に使用される暗黙的なブロードキャストである 264{@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}、{@link 265 android.hardware.Camera#ACTION_NEW_PICTURE}、{@link 266 android.hardware.Camera#ACTION_NEW_VIDEO} は複数のアプリのバックグラウンド処理を同時に起動するので、メモリと電池に負荷をかける可能性があります。そのため、Android N では、この 3 つのブロードキャストが削除されています。 267アプリがこれらのブロードキャストを受信する場合は、N Developer Preview を使用して、<code>JobScheduler</code> とそれに関連する API に移行してください。 268 269 </p> 270 271<p> 272 詳細については、<a href="{@docRoot}preview/features/background-optimization.html">バックグラウンド処理の最適化</a>に関するドキュメントをご覧ください。 273 274</p> 275 276 277<h2 id="data_saver">データセーバー</h2> 278 279<div class="col-5of12" style="margin-right:1.5em;"> 280<img src="{@docRoot}images/android-7.0/datasaver.png" style="border:2px solid #ddd"> 281 282<p class="img-caption" style="padding-right:2em;"> 283 <strong>図 4.</strong> [Settings] でのデータセーバー 284</p> 285 </div> 286 287<p>一般的に、モバイル端末のライフサイクル全体では、モバイルデータ通信プランのコストが端末自体のコストを上回ります。 288多くのユーザーにとって、モバイルデータ通信は、節約する必要のある高価なリソースです。 289 </p> 290 291<p>Android N では、ローミング、課金サイクルの終了近く、または短期間のデータパックであるかどうかに関係なく、アプリによるモバイルデータ通信の使用を削減する新しいシステム サービスであるデータセーバー モードが導入されています。 292 293データセーバーを使用すると、アプリによるモバイルデータ通信の使用方法をユーザーが制御できます。また、デベロッパーは、データセーバーがオンのときに、より効率よく通信するサービスを提供できるようになります。 294 295 </p> 296 297<p>ユーザーが [<strong>Settings</strong>] でデータセーバーを有効にし、端末が従量制課金ネットワークに接続されている場合、システムは、ストリーミングのビットレートを制限したり、画質を低下させたり、オプティミスティックなプレキャッシングを保留したりすることにより、バックグラウンドでのデータ使用をブロックし、フォアグラウンドでのデータ使用をなるべく抑えるようにアプリに指示します。 298 299 300 301ユーザーは特定のアプリをホワイトリストに登録することにより、データセーバーがオンになっているときでも、バックグラウンドで従量制データ通信を使用できます。 302</p> 303 304<p>Android N は {@link android.net.ConnectivityManager} を拡張することで、<a href="{@docRoot}preview/features/data-saver.html#status">ユーザーのデータセーバー設定を取得</a>する方法と、<a href="{@docRoot}preview/features/data-saver.html#monitor-changes">設定の変更を監視</a>する方法を提供しています。 305 306 307すべてのアプリは、ユーザーがデータセーバーを有効にしているかどうかを確認し、フォアグラウンドおよびバックグラウンドでのデータ使用を制限する必要があります。 308</p> 309 310 311<h2 id="vulkan">Vulkan API</h2> 312 313<p> 314 Android N では、新しい 3D レンダリング API である <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a> がプラットフォームに統合されています。<a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™ ES</a> と同様に、Vulkan は Khronos グループによって管理されている 3D グラフィックおよびレンダリングのオープン スタンダードです。 315 316 317 318</p> 319 320<p> 321 Vulkan は、ドライバの CPU オーバーヘッドを最小化するため、およびアプリケーションが GPU の動作をより直接的に制御できるように設計されています。 322また、Vulkan は、複数のスレッドが作業を実行できるようにする(コマンド バッファの作成を同時に行うなど)ことによって、より優れた並列処理が可能です。 323 324 325</p> 326 327<p> 328 Vulkan 開発ツールおよびライブラリは、Android NDK に含まれています。次のようなものが含まれます。 329 330</p> 331 332<ul> 333 <li>ヘッダー 334 </li> 335 336 <li>検証レイヤ(デバッグ ライブラリ) 337 </li> 338 339 <li>SPIR-V シェーダー コンパイラー 340 </li> 341 342 <li>SPIR-V シェーダーのランタイム コンパイル ライブラリ 343 </li> 344</ul> 345 346<p> 347 Vulkan は、Nexus 5X、Nexus 6P、Nexus Player などの Vulkan 対応ハードウェアを備えた端末上のアプリでのみ利用できます。 348Vulkan を可能な限りより多くの端末に導入するためにパートナーと緊密に協力し合っています。 349 350</p> 351 352<p> 353 詳細については、<a href="{@docRoot}ndk/guides/graphics/index.html">API ドキュメント</a>をご覧ください。 354</p> 355 356<h2 id="tile_api">クイック設定タイル API</h2> 357 358 359<div style="float:right;max-width:320px"> 360<img src="{@docRoot}images/android-7.0/quicksettings.png" style="padding-left:1.5em;"> 361 362<p class="img-caption" style="padding-left:2em;"> 363 <strong>図 5.</strong> 通知シェードにあるクイック設定タイル 364</p> 365 366 367 </div><p>クイック設定は、通知シェードから主要な設定とアクションを直接公開するための一般的で簡単な方法です。 368Android N では、クイック設定の範囲が拡大され、さらに使いやすく便利な機能になっています。 369 </p> 370 371<p>クイック設定タイル用のスペースが広くなったので、ユーザーは、左または右にスワイプして、ページ分割された表示領域でこれらのタイルにアクセスできます。 372また、ユーザーは、表示するクイック設定タイルとその表示場所を制御できるようになっています。ユーザーはタイルをドラッグ アンド ドロップして、追加または移動できます。 373 374 </p> 375 376<p>Android N では、デベロッパーが独自のクイック設定タイルを定義できる新しい API が追加されており、ユーザーはこの API を通じて、アプリの主なコントロールとアクションに簡単にアクセスできます。 377</p> 378 379<p> 380 クイック設定タイルは、緊急に必要な、または頻繁に使用されるコントロールやアクション用に用意されたものであり、アプリを起動するためのショートカットとして使用するべきではありません。 381 382 383</p> 384 385<p> 386 タイルの定義が完了すると、ユーザーにタイルを公開できるようになります。ユーザーはタイルをドラッグ アンド ドロップするだけで、クイック設定にタイルを追加できます。 387 388</p> 389 390<p> 391 アプリタイルを作成する方法については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>に掲載されている <code>android.service.quicksettings.Tile</code> のドキュメントをご覧ください。 392 393</p> 394 395 396 397<h2 id="number-blocking">電話番号のブロック</h2> 398 399<p>Android N では、プラットフォームで電話番号のブロックがサポートされており、サービス プロバイダがブロックされた電話番号のリストを保持するためのフレームワーク API が提供されています。 400デフォルトの SMS アプリ、デフォルトの電話アプリ、携帯通信会社アプリは、ブロックされた電話番号のリストを読み込んだり、このリストに書き込んだりできます。 401 402その他のアプリはこのリストにアクセスできません。</p> 403 404<p>Android では、電話番号のブロックをプラットフォームの標準の機能にすることにより、幅広い端末で電話番号をブロックできるようにする一貫した方法がアプリに提供されています。 405 406その他にアプリは次のような機能も利用できます。</p> 407 408<ul> 409 <li> ブロックされた電話番号は、テキスト メッセージでもブロックされる 410 <li> ブロックされた電話番号は、リセットした端末や、バックアップおよびリストア機能で移行したデバイスでも保持される 411 412 <li> 複数のアプリが同じブロックリストを使用できる 413</ul> 414 415<p>また、Android に携帯通信会社のアプリが組み込まれていると、携帯通信会社は端末上のブロックリストを読み込んで迷惑な電話やテキスト メッセージをサービス側でブロックできます。これによって、VOIP エンドポイントや転送電話などいかなる媒体を介しても、ブロックされた番号はユーザーに到達できなくなります。 416 417 418</p> 419 420<p> 421 詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>の <code>android.provider.BlockedNumberContract</code> をご覧ください。 422 423 424</p> 425 426<h2 id="call_screening">通話スクリーニング</h2> 427 428<p> 429 Android N では、デフォルトの電話アプリで着信をスクリーニングできます。新しい <code>CallScreeningService</code> を実装することによって、電話アプリは着信をスクリーニングします。これにより、電話アプリは着信する電話の {@link android.telecom.Call.Details Call.Details} に基づいて次のようなアクションを実行できます。 430 431 432 433</p> 434 435<ul> 436 <li> 着信を拒否する 437 <li> 着信を通話履歴に含めない 438 <li> 着信通知をユーザーに表示しない 439</ul> 440 441<p> 442 詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>の <code>android.telecom.CallScreeningService</code> をご覧ください。 443 444 445</p> 446 447 448<h2 id="multi-locale_languages">マルチロケールのサポートと言語の追加</h2> 449 450 451<p>Android N では、[Settings] で<strong>マルチロケール</strong>を選択できるようになり、複数言語を使用するユーザーへのサポートが強化されました。 452アプリで新しい API を使用して、ユーザーが選択したロケールを取得すると、複数のロケールを設定しているユーザーに対してより洗練されたユーザー エクスペリエンスを提供できます。たとえば、検索結果を複数の言語で表示したり、ユーザーが理解している言語のウェブページでは翻訳の提案を行わないようにしたりすることが可能になります。 453 454 455 456</p> 457 458<p>また、Android N では、マルチロケールのサポートに加えて、ユーザーが利用できる言語が追加されています。 459英語、スペイン語、フランス語、アラビア語などの一般的な言語に対して、それぞれ 25 以上のバリエーションが提供されます。 460100 以上の新しい言語も部分的にサポートされています。 461</p> 462 463<p>アプリは、<code>LocaleList.GetDefault()</code> を呼び出すことにより、ユーザーが設定したロケールのリストを取得できます。 464Android N では、ロケール数の増加に対応するために、リソースを解決する方法が変更されています。 465この新しいリソース解決ロジックでアプリが想定どおりに動作することをテストおよび確認してください。 466</p> 467 468<p>新しいリソース解決動作と順守する必要のあるベスト プラクティスの詳細については、<a href="{@docRoot}preview/features/multilingual-support.html">複数言語のサポート</a>をご覧ください。 469</p> 470 471 472<h2 id="emoji">新しい絵文字</h2> 473 474<p> 475 Android N では、肌色の異なる絵文字や異体字セレクターのサポートなど、絵文字の追加と絵文字関連機能が導入されています。 476 477アプリで絵文字をサポートする場合は、以下のガイドラインに従い、これらの絵文字関連機能を利用します。 478 479</p> 480 481<ul> 482 <li> 483 <strong>絵文字を挿入する前に端末に絵文字が含まれていることを確認する。</strong> 484 システム フォントで表示される絵文字を確認するには、{@link android.graphics.Paint#hasGlyph(String)} メソッドを使用します。 485 486 </li> 487 <li> 488 <strong>絵文字が異体字セレクターをサポートしていることを確認する。</strong> 489 異体字セレクターを使用すると、特定の絵文字をカラーまたは白黒で表示できます。 490 491 アプリは、モバイル端末では白黒よりもカラーで絵文字を表示する必要があります。ただし、アプリでテキスト メッセージを使用して絵文字を表示する場合は、白黒バージョンを使用する必要があります。 492 493 絵文字に異体字があるかどうかを確認するには、異体字セレクターを使用します。 494 異体字のある文字の完全なリストについては、<a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">異体字に関する Unicode ドキュメント</a>の<em>絵文字異体字シーケンス</em> セクションを確認してください。 495 496 497 498 </li> 499 <li> 500 <strong>絵文字が肌色をサポートしていることを確認する。</strong>Android N では、レンダリングされる絵文字の肌色を好みの色に変更できます。 501キーボード アプリでは、肌色が複数ある絵文字をわかりやすく表示して、ユーザーが好みの肌色を選択できるようにする必要があります。 502 503肌色修飾子を持つシステムの絵文字を確認するには、{@link android.graphics.Paint#hasGlyph(String)} メソッドを使用します。 504 505肌色を使用する絵文字を確認するには、<a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html">Unicode ドキュメント</a>をご覧ください。 506 507 508 </li> 509</ul> 510 511 512<h2 id="icu4">Android の ICU4J API</h2> 513 514<p> 515 Android N では、Android フレームワーク内で <a href="http://site.icu-project.org/">ICU4J</a> API のサブセットが提供されており、<code>android.icu</code> パッケージにあります。 516移行は簡単で、ほとんどの場合、名前空間を <code>com.java.icu</code> から <code>android.icu</code> に変更するだけです。 517 518アプリで ICU4J バンドルを既に使用している場合は、Android フレームワークで提供されている <code>android.icu</code> API に移行すると、APK サイズを大幅に削減できます。 519 520 521</p> 522 523<p> 524 Android ICU4J API の詳細については、<a href="{@docRoot}preview/features/icu4j-framework.html">ICU4J のサポート</a>をご覧ください。 525</p> 526 527 528 529<h2 id="gles_32">OpenGL™ ES 3.2 API</h2> 530 531<p>Android N では、OpenGL ES 3.2 用の以下のようなフレームワーク インターフェースとプラットフォーム サポートが追加されています。</p> 532 533<ul> 534 <li> <code>EXT_texture_sRGB_decode</code> を除く <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">Android エクステンション パック</a></a>(AEP)のすべての拡張機能 535 536 <li> HDR および遅延シェーディング用の浮動小数点フレームバッファ 537 <li> 一括処理とストリーミングを向上させるための BaseVertex 描画呼び出し 538 <li> WebGL のオーバーヘッドを低減するための堅牢なバッファ アクセス コントロール 539</ul> 540 541<p>Android N の OpenGL ES 3.2 用のフレームワーク API は、<code>GLES32</code> クラスで提供されます。 542OpenGL ES 3.2 を使用する場合、<code><uses-feature></code> タグと <code>android:glEsVersion</code> 属性を使用してマニフェスト ファイルで要件を宣言する必要があります。 543 544 </p> 545 546<p>端末でサポートされる OpenGL ES のバージョンを実行時に確認する方法など、OpenGL ES の使用方法については、<a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API ガイド</a>をご覧ください。 547</p> 548 549 550<h2 id="android_tv_recording">Android TV の録画機能</h2> 551 552<p>Android N では、新しい recording API を介して Android TV 入力サービスからコンテンツを録画して再生する機能が追加されています。 553TV 入力サービスでは、録画できるチャンネル データや録画したセッションを保存する方法の制御、ユーザーによる録画されたコンテンツの操作の管理を行うことができます。このサービスは、既存の time-shifting API を使用して構築されています。 554 555 </p> 556 557<p>詳細については、<a href="{@docRoot}preview/features/tv-recording-api.html">Android TV Recording API</a> をご覧ください。</p> 558 559 560<h2 id="android_for_work">Android for Work</h2> 561 562<p>Android for Work は、Android N を実行している端末に多くの新しい機能と API を追加するものです。主要な機能の一部を以下に紹介します。変更点の完全なリストについては、<a href="{@docRoot}preview/features/afw.html">Android for Work のアップデート</a>をご覧ください。 563 564</p> 565 566<h3 id="work_profile_security_challenge">仕事用プロファイルによるセキュリティ確認 </h3> 567 568<p> 569 N SDK を対象としているプロファイル オーナーは、仕事用プロファイルで実行しているアプリで個別にセキュリティ確認を行うよう指定することができます。 570 571ユーザーが仕事用アプリを開こうとすると、仕事用プロファイル用のセキュリティ確認画面が表示されます。 572セキュリティの確認に成功すると、仕事用プロファイルのロックが解除され、必要に応じて暗号化も解除されます。 573プロファイル オーナーは、<code>ACTION_SET_NEW_PASSWORD</code> でユーザーに仕事用プロファイル用のセキュリティ確認を設定するように求めたり、<code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> でユーザーに端末のロックを設定するように求めたりします。 574 575 576 577</p> 578 579<p> 580 プロファイル オーナーは、<code>setPasswordQuality()</code>、<code>setPasswordMinimumLength()</code>、および関連するメソッドを使用して、仕事用プロファイル用のセキュリティ確認に個別のパスコード ポリシー(PIN に必要な長さや、指紋によるプロファイルのロック解除が可能かどうかなど)を設定できます。 581 582 583また、新しい <code>getParentProfileInstance()</code> メソッドが返す <code>DevicePolicyManager</code> インスタンスを使用して端末のロックを設定できます。 584 585 586 さらに、新しい <code>setOrganizationColor()</code> メソッドおよび <code>setOrganizationName()</code> メソッドを使用して仕事用プロファイル用のセキュリティ確認画面をカスタマイズすることができます。 587 588 589</p> 590<h3 id="turn_off_work">ワークモードのオフ </h3> 591 592<p>ユーザーは、仕事用プロファイルがある端末でワークモードを切り替えることができます。ワークモードがオフになると、管理されているユーザーが一時的にシャットダウンされ、仕事用プロファイルのアプリ、バックグラウンドでの同期、通知が無効になります。 593 594これには、プロファイル オーナーのアプリが含まれます。 595また、ワークモードがオフになると、仕事用アプリを起動できないことをユーザーに示すステータス アイコンが表示されたままになります。 596ランチャーは、仕事用アプリとウィジェットにアクセスできないことを示します。 597 </p> 598 599<h3 id="always_on_vpn">Always on VPN </h3> 600 601<p>デバイス オーナーとプロファイル オーナーは、指定した VPN を介して仕事用アプリが常時接続するように設定できます。 602端末が起動すると、システムは VPN を自動的に開始します。 603</p> 604 605<p> 606 <code>setAlwaysOnVpnPackage()</code> と <code>getAlwaysOnVpnPackage()</code> は新しい <code>DevicePolicyManager</code> のメソッドです。 607 608 609</p> 610 611<p>システムがアプリの介入なしに VPN サービスを直接バインドするため、Always on VPN の新しいエンドポイントは VPN クライアント側で処理する必要があります。 612以前と同じように、システムへのサービスの通知はインテント フィルタのマッチング アクション <code>android.net.VpnService</code> で行います。 613 614 </p> 615 616<p> 617 プライマリ ユーザーは、<strong>[Settings] > [More] > [Vpn]</strong> から、<code>VPNService</code> のメソッドを実装した Always on VPN クライアントを手動で設定することもできます。 618 619 620</p> 621 622<h3 id="custom_provisioning">カスタマイズされたプロビジョニング</h3> 623 624<p> 625 アプリでは、コーポレート・カラーやロゴを含むプロファイル オーナーとデバイス オーナーのプロビジョニング フローをカスタマイズできます。<code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> はフローカラーをカスタマイズします。<code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code> は、コーポレート ロゴを含むフローをカスタマイズします。 626 627 628 629 630</p> 631 632<h2 id="accessibility_enhancements">ユーザー補助機能の強化</h2> 633 634<p>Android N では、新しい端末のセットアップのオープニング画面に [Vision Settings] が直接表示されます。 635これにより、ユーザーは、ズーム操作、フォントサイズ、ディスプレイ サイズ、TalkBack など、端末のユーザー補助機能を簡単に見つけて設定できるようになっています。 636 637 </p> 638 639<p>このようなユーザー補助機能が目立つ場所に配置されたため、ユーザーがこれらの機能を有効にしてアプリを試用する可能性が高まりました。 640これらの設定を有効にして、アプリを事前にテストするようにしてください。 641これらの設定は、[Settings] > [Accessibility] で有効にできます。 642</p> 643 644<p>Android N では、ユーザー補助機能サービスにより、運動障害のあるユーザーが画面をタップすることを支援できます。 645この新しい API を使用すると、顔追跡、視線追跡、ポイント スキャンなどの機能を備えたサービスを構築して、これらのユーザーのニーズに対応することができます。 646 647</p> 648 649<p>詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>の <code>android.accessibilityservice.GestureDescription</code> をご覧ください。 650</p> 651 652 653<h2 id="direct_boot">ダイレクト ブート</h2> 654 655<p>ダイレクト ブートは端末のスタートアップ時間を短縮し、予期しない再起動後でも、登録されたアプリの一部の機能が使用できるようにします。たとえば、ユーザーの就寝中に暗号化された端末が再起動した場合でも、登録したアラーム、メッセージ、電話の着信をユーザーに通常どおり通知することができます。 656 657 658 659また、再起動後にユーザー補助機能サービスをすぐに使用することもできます。 660</p> 661 662<p>ダイレクト ブートでは、Android N のファイルベースの暗号化を活用して、システムとアプリのデータに対してきめ細かい暗号化ポリシーを有効にします。システムは、一部のシステムデータと明示的に登録されたアプリデータに端末暗号化ストアを使用します。 663 664 665デフォルトでは、他のすべてのシステムデータ、ユーザーデータ、アプリ、アプリデータには、認証情報暗号化ストアが使用されます。 666 </p> 667 668<p>システムは起動時に端末暗号化データのみにアクセスできる制限モードになります。この状態では、アプリやデータへの一般的なアクセスは許可されません。このモードで実行する必要のあるコンポーネントがある場合、マニフェストにフラグを設定することでコンポーネントを登録できます。 669 670 671再起動後、システムは、<code>LOCKED_BOOT_COMPLETED</code> インテントをブロードキャストすることにより、登録済みのコンポーネントをアクティベートします。 672 673システムは、ロック解除する前に、登録済みの端末暗号化アプリデータを利用できるようにします。 674他のすべてのデータは、ユーザーがロック画面の認証情報を確認して暗号化を解除するまで利用できません。 675 </p> 676 677詳細については、<a href="{@docRoot}preview/features/direct-boot.html">ダイレクト ブート</a>をご覧ください。</p> 678</p> 679 680 681<h2 id="key_attestation">キーの構成証明</h2> 682 683<p>ハードウェアがサポートするキーストアは、Android 端末で暗号化キーを作成、格納、使用するためのより安全な方法を提供します。 684このキーストアは、Linux カーネル、Android の潜在的な脆弱性、ルート権限を取得された端末からの抽出からキーを保護します。 685 686</p> 687 688<p>ハードウェアがサポートするキーストアの使用をさらに簡単かつ安全にするために、Android N では、キーの構成証明が導入されています。 689アプリや別の端末は、キーの構成証明を使用して RSA または EC キーペアがハードウェアでサポートされているかどうか、キーペアのプロパティはどのようなものか、使用方法や有効性にどのような制限が適用されるかを積極的に確認することができます。 690 691 692 </p> 693 694<p>アプリや別の端末のサービスは、有効な構成証明キーによって署名された X.509 構成証明書を通じて、キーペアについての情報をリクエストできます。 695 696この構成証明キーは、出荷前に端末のハードウェアがサポートするキーストアに挿入される ECDSA 署名キーです。したがって、有効な構成証明キーによって署名される構成証明書により、ハードウェアがサポートするキーストアの存在に加えて、そのキーストアのキーペアの詳細が確認されます。 697 698 699 700</p> 701 702<p>端末が Android の安全な公式ファクトリー イメージを使用していることを確認するために、キーの構成証明では、端末の<a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">ブートローダー</a>が以下の情報を <a class="external-link" href="https://source.android.com/security/trusty/index.html">Trusted Execution Environment(TEE)</a>に提供することが要求されます。 703 704 705</p> 706 707<ul> 708<li>端末にインストールされる OS のバージョンとパッチレベル</li> 709<li><a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">セキュアブート</a>の公開キーとロック ステータス</li> 710 </ul> 711 712<p>ハードウェアがサポートするキーストアの機能の詳細については、<a href="https://source.android.com/security/keystore/" class="external-link">ハードウェアがサポートするキーストア</a>に関するガイドをご覧ください。 713</p> 714 715<p>Android N では、キーの構成証明に加えて、指紋にバインドされたキーが導入されています。このキーは、指紋を登録しても無効になることはありません。 716</p> 717 718<h2 id="network_security_config">ネットワーク セキュリティ構成</h2> 719 720<p>Android N では、エラーが発生しやすいプログラムによる従来の API(X509TrustManager など)ではなく、宣言型のネットワーク セキュリティ構成を使用することにより、コードを変更することなく、セキュアな(HTTPS、TLS)接続の動作をアプリで安全にカスタマイズできます。<em></em> 721 722 723</p> 724 725 <p>以下の機能がサポートされます。</p> 726<ul> 727<li><b>カスタム トラスト アンカー。</b>アプリのセキュアな接続にどの証明機関(CA)を信頼するかをカスタマイズできます。 728たとえば、特定の自己署名証明書や制限された一連の公的 CA を信頼できます。 729 730</li> 731<li><b>デバッグ限定のオーバーライド。</b>アプリのデベロッパーは、インストール ベースに対する追加リスクなしに、アプリのセキュアな接続を安全にデバッグできます。 732 733 734</li> 735<li><b>クリアテキスト トラフィックのオプトアウト。</b>クリアテキスト トラフィックの意図しない使用からアプリを保護できます。 736</li> 737<li><b>証明書のピン留め。</b>アプリのセキュアな接続で信頼するサーバーキーを制限できる高度な機能です。 738</li> 739</ul> 740 741<p>詳細については、<a href="{@docRoot}preview/features/security-config.html">ネットワーク セキュリティ構成</a>をご覧ください。 742</p> 743 744<h2 id="default_trusted_ca">既定の信頼される証明機関</h2> 745 746<p>既定では、Android N 用アプリは、システムが提供する証明書のみを信頼し、ユーザーが追加した証明機関(CA)を信頼しません。 747ユーザーが追加した CA を信頼する必要がある Android N 向けのアプリは、<a href="{@docRoot}preview/features/security-config.html">ネットワーク セキュリティ構成</a>を使用して、ユーザー CA を信頼する方法を指定する必要があります。 748 749 750</p> 751 752<h2 id="apk_signature_v2">APK 署名スキーム v2</h2> 753 754<p> 755 Android N では、APK 署名スキーム v2 というアプリのインストール時間を高速化したり、APK ファイルに無許可の変更が行われないようにしたりする新しいアプリ署名スキームが導入されています。 756 757既定では、Android Studio 2.2 と Gradle 2.2 用の Android プラグインで APK 署名スキーム v2 と従来の署名スキーム(JAR 署名を使用する)の両方を使用してアプリに署名します。 758 759 760</p> 761 762<p> 763 APK 署名スキーム v2 をアプリに適用することをお勧めしますが、この新しいスキームは必須ではありません。 764APK 署名スキーム v2 を使用するときにアプリが正しくビルドされていない場合は、この新しいスキームを無効にできます。 765無効化プロセスにより、Android Studio 2.2 と Gradle 2.2 用の Android プラグインでアプリへの署名に従来の署名スキームのみが使用されるようになります。 766 767従来のスキームのみを使用して署名するには、モジュール レベルの <code>build.gradle</code> ファイルを開き、<code>v2SigningEnabled false</code> という行をリリース用署名構成に追加します。 768 769 770 771</p> 772 773<pre> 774 android { 775 ... 776 defaultConfig { ... } 777 signingConfigs { 778 release { 779 storeFile file("myreleasekey.keystore") 780 storePassword "password" 781 keyAlias "MyReleaseKey" 782 keyPassword "password" 783 <strong>v2SigningEnabled false</strong> 784 } 785 } 786 } 787</pre> 788 789<p class="caution"><strong>警告:</strong> APK 署名スキーム v2 を使用してアプリに署名し、さらにアプリに変更を加える場合、アプリの署名は無効になります。 790 791そのため、APK 署名スキーム v2 を使用してアプリに署名する場合は、署名後ではなく署名前に <code>zipalign</code> などのツールを使用します。 792 793</p> 794 795<p> 796 詳細については、Android Studio で<a href="{@docRoot}studio/publish/app-signing.html#release-mode">アプリに署名する</a>方法や、Gradle 用の Android プラグインを使用して<a href="{@docRoot}studio/build/build-variants.html#signing">アプリへの署名用ビルドファイルを構成する</a>方法を説明する Android Studio ドキュメントをご覧ください。 797 798 799 800</p> 801 802<h2 id="scoped_directory_access">特定のディレクトリへのアクセス</h2> 803 804<p>Android N では、アプリで新しい API を使用して、SD カードなどのリムーバブル メディア上のディレクトリといった特定の<a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">外部ストレージ</a> ディレクトリへのアクセスをリクエストできるようになりました。 805 806この新しい API は、アプリが <code>Pictures</code> ディレクトリなどの標準の外部ストレージ ディレクトリにアクセスする方法を大幅に簡略化します。 807写真アプリなどのアプリでは、<code>READ_EXTERNAL_STORAGE</code> の代わりに、この API ですべてのストレージ ディレクトリやストレージ アクセス フレームワークにアクセスできるため、ユーザーはそのディレクトリに移動できます。 808 809 810 811</p> 812 813<p>また、この新しい API は、ユーザーがアプリに外部ストレージへのアクセスを付与するステップを簡素化します。 814この新しい API を使用する場合、アプリがどのディレクトリへのアクセス許可を求めているかをわかりやすく説明するシンプルな UI が使用されます。 815 816</p> 817 818<p>詳細については、<a href="{@docRoot}preview/features/scoped-folder-access.html">特定のディレクトリへのアクセス</a>に関するデベロッパー向けドキュメントをご覧ください。 819 820</p> 821 822<h2 id="keyboard_shortcuts_helper">キーボード ショートカット ヘルパー</h2> 823 824<p> 825Android N では、ユーザーは Alt キー + / キーを同時に押して<em>キーボード ショートカット</em>画面をトリガーできます。この画面には、システムとアプリから使用できるすべてのショートカットが表示されます。 826 827これらは使用可能な場合はアプリのメニューから自動的に取得されますが、デベロッパーは独自に微調整したショートカットのリストを画面に表示することもできます。 828 829ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>で説明するように、新しい <code>Activity.onProvideKeyboardShortcuts()</code> メソッドをオーバーライドしてこれを実行することができます。 830 831 832</p> 833 834<p> 835アプリ内のどこででもキーボード ショートカット ヘルパーをトリガーするには、関連アクティビティの {@code Activity.requestKeyboardShortcutsHelper()} を呼び出します。 836 837</p> 838 839<h2 id="sustained_performance_api">パフォーマンス維持 API</h2> 840 841<p> 842長時間実行するアプリではパフォーマンスが大幅に変動する可能性があります。これは、端末のコンポーネントがその温度制限に達するとシステムによりシステムオンチップ エンジンが抑制されるためです。 843 844この変動は、高性能で長時間実行するアプリを作成するアプリのデベロッパーの移動目標となります。 845 846</p> 847 848<p> 849これらの制限に対処するために、Android N には、<em>パフォーマンス維持モード</em>のサポートが含まれており、OEM は長時間実行するアプリに端末のパフォーマンスに関するヒントを提供することができます。 850 851アプリのデベロッパーはこれらのヒントを使用して、長時間にわたる予測可能な一定レベルの端末のパフォーマンスに合わせてアプリを調整できます。 852 853 854</p> 855 856<p> 857アプリのデベロッパーが N Developer Preview でこの新しい API を試すことができるのは、Nexus 6P 端末上でのみです。 858この機能を使用するには、パフォーマンス維持モードで実行するウィンドウにパフォーマンス維持ウィンドウ フラグを設定します。 859 860このフラグは {@code Window.setSustainedPerformanceMode()} メソッドを使用して設定します。 861このウィンドウがフォーカスされていない場合、このモードは自動的に無効になります。 862 863</p> 864 865<h2 id="vr">VR サポート</h2> 866 867<p> 868Android N には、新しい VR モードのためのプラットフォーム サポートと最適化が追加され、デベロッパーは高品質モバイル端末 VR 体験をユーザーのために生み出すことができます。 869多数のパフォーマンス強化があり、VR アプリ用の CPU コアへの排他アクセスが含まれます。アプリでは、VR 用に動作するインテリジェントなヘッド トラッキングやステレオ方式の通知を利用できます。 870 871 872最も重要な点は、Android N によって大幅に遅延の少ないグラフィックが実現される点です。 873Android N 向け VR アプリのビルドの詳細については、<a href="https://developers.google.com/vr/android/">Google VR SDK for Android</a> を参照してください。 874 875</p> 876 877 878<h2 id="print_svc">印刷サービス機能の強化</h2> 879 880<p> 881 Android N では、印刷サービスのデベロッパーが、各プリンターや印刷ジョブに関する追加情報を公開できるようになりました。 882 883</p> 884 885<p> 886 各プリンターを一覧表示する場合、印刷サービスでは以下の 2 つの方法で各プリンターのアイコンを設定できます。 887 888</p> 889 890<ul> 891 <li><code>PrinterInfo.Builder.setResourceIconId()</code> を呼び出すことにより、リソース ID からアイコンを設定できます 892 893 </li> 894 895 <li><code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code> を呼び出して、<code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code> を使用してアイコンがリクエストされた場合のコールバックを設定することにより、ネットワークからアイコンを表示できます 896 897 898 899 </li> 900</ul> 901 902<p> 903 また、追加情報を表示する各プリンターのアクティビティを提供する場合は、<code>PrinterInfo.Builder.setInfoIntent()</code> を呼び出します。 904 905</p> 906 907<p> 908 印刷ジョブ通知に印刷ジョブの進捗状況やステータスを表示する場合は、<code>android.printservice.PrintJob.setProgress()</code> と <code>android.printservice.PrintJob.setStatus()</code> をそれぞれ呼び出します。 909 910 911 912</p> 913 914<p> 915 これらのメソッドの詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>をご覧ください。 916</p> 917 918<h2 id="framemetrics_api">FrameMetricsListener API</h2> 919 920<p> 921FrameMetricsListener API を使用すると、アプリでその UI レンダリング パフォーマンスを監視できます。 922この API は、アプリの現在のウィンドウのフレーム タイミング情報を転送するストリーミング Pub / Sub API を公開することにより、この機能を提供します。 923返されるデータは、<code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a> 924dumpsys gfxinfo framestats</code> によって表示される内容と同じですが、過去の 120 フレームに制限されません。 925 926</p> 927 928<p> 929FrameMetricsListener を使用すると、USB 接続を使用せずに、本番環境のインタラクション レベルの UI パフォーマンスを計測できます。 930この API により、{@code adb shell dumpsys gfxinfo} を実行するより粒度の高いデータの収集が可能になります。 931 932アプリの特定のインタラクション データを収集できるため、この粒度の高さが可能となります。アプリのパフォーマンス全体の包括的な概要を取得したり、包括的な状態を明確にしたりする必要はありません。 933 934 935この機能を使用して、パフォーマンス データを収集したり、アプリでの実際のユースケースにおける UI パフォーマンスの低下を検出したりすることができます。 936 937 938</p> 939 940<p> 941ウィンドウを監視するには、<code>FrameMetricsListener.onMetricsAvailable()</code> コールバック メソッドを実装して、これを対象のウィンドウに登録します。 942詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>の {@code FrameMetricsListener} クラスのドキュメントをご覧ください。 943 944 945</p> 946 947<p> 948この API は {@code FrameMetrics} オブジェクトを提供します。これには、レンダリング サブシステムがフレーム ライフサイクル内のさまざまなマイルストーンで報告するタイミング データが含まれます。サポートされているメトリックは、{@code UNKNOWN_DELAY_DURATION}、{@code INPUT_HANDLING_DURATION}、{@code ANIMATION_DURATION}、{@code LAYOUT_MEASURE_DURATION}、{@code DRAW_DURATION}、{@code SYNC_DURATION}、{@code COMMAND_ISSUE_DURATION}、{@code SWAP_BUFFERS_DURATION}、{@code TOTAL_DURATION}、{@code FIRST_DRAW_FRAME} です。 949 950 951 952 953 954 955</p> 956 957 958<h2 id="virtual_files">仮想ファイル</h2> 959 960<p> 961 旧バージョンの Android では、アプリはストレージ アクセス フレームワークを使用して、ユーザーが Google ドライブなどのクラウド ストレージ アカウントからファイルを選択できるようにしていました。 962 963ただし、バイトコードの直接表現がなかったファイルを表示する方法はありませんでした。すべてのファイルは入力ストリームの提供が必要でした。 964 965 966</p> 967 968<p> 969 Android N では、ストレージ アクセス フレームワークに<em>仮想ファイル</em>の概念が追加されています。 970仮想ファイル機能を使用すると、バイトコードの直接表現がなくても、{@link android.content.Intent#ACTION_VIEW} インテントで使用できるドキュメント URI を {@link android.provider.DocumentsProvider} で返すことができます。 971 972 973また、Android N では、ユーザー ファイル(仮想またはそれ以外)に別の形式を提供できます。 974 975</p> 976 977<p> 978 アプリで仮想ドキュメントの URI を取得するには、{@link android.content.Intent} を作成してからファイル ピッカーの UI を開きます。 979アプリでは {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()} メソッドを使用して仮想ファイルを直接開くことができないため、{@link android.content.Intent#CATEGORY_OPENABLE} カテゴリが含まれている場合はどの仮想ファイルも受信されません。 980 981 982 983 984</p> 985 986<p> 987 ユーザーが選択した後で、{@link android.app.Activity#onActivityResult onActivityResult()} メソッドが呼び出されます。 988 989 以下のコード スニペットに示すように、アプリは仮想ファイルの URI と入力ストリームを取得できます。 990 991</p> 992 993<pre> 994 // Other Activity code ... 995 996 final static private int REQUEST_CODE = 64; 997 998 // We listen to the OnActivityResult event to respond to the user's selection. 999 @Override 1000 public void onActivityResult(int requestCode, int resultCode, 1001 Intent resultData) { 1002 try { 1003 if (requestCode == REQUEST_CODE && 1004 resultCode == Activity.RESULT_OK) { 1005 1006 Uri uri = null; 1007 1008 if (resultData != null) { 1009 uri = resultData.getData(); 1010 1011 ContentResolver resolver = getContentResolver(); 1012 1013 // Before attempting to coerce a file into a MIME type, 1014 // check to see what alternative MIME types are available to 1015 // coerce this file into. 1016 String[] streamTypes = 1017 resolver.getStreamTypes(uri, "*/*"); 1018 1019 AssetFileDescriptor descriptor = 1020 resolver.openTypedAssetFileDescriptor( 1021 uri, 1022 streamTypes[0], 1023 null); 1024 1025 // Retrieve a stream to the virtual file. 1026 InputStream inputStream = descriptor.createInputStream(); 1027 } 1028 } 1029 } catch (Exception ex) { 1030 Log.e("EXCEPTION", "ERROR: ", ex); 1031 } 1032 } 1033</pre> 1034 1035<p> 1036 ユーザー ファイルへのアクセスの詳細については、<a href="{@docRoot}guide/topics/providers/document-provider.html">ストレージ アクセス フレームワークのガイド</a>をご覧ください。 1037 1038 1039</p> 1040