• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&trade; 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>&lt;uses-feature&gt;</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] &gt; [More] &gt; [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] &gt; [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  &#64;Override
1000  public void onActivityResult(int requestCode, int resultCode,
1001    Intent resultData) {
1002      try {
1003        if (requestCode == REQUEST_CODE &amp;&amp;
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