![スマートフォンまたはタブレット上の Android 4.4](https://developer.android.google.cn/static/images/kk-devices.png?authuser=9&hl=ja)
Android 4.4 KitKat へようこそ。
Android KitKat は、Android の最も革新的で、最も美しく、最も便利な機能のすべてを、世界中のより多くのデバイスで利用できるようにします。
このドキュメントでは、デベロッパー向けの新機能について簡単に紹介します。
ユーザー向けの KitKat について詳しくは、www.android.com をご覧ください。
Android をすべての人に
Android 4.4 は、これまでにないほど幅広いデバイスで高速、スムーズ、レスポンシブに動作するように設計されています。たとえば、世界中の何百万ものエントリレベルのデバイスでも、わずか 512 MB の RAM しか搭載できません。
KitKat は、すべての主要コンポーネントを合理化してメモリ使用量を削減し、革新的でレスポンシブでメモリ効率の高いアプリの作成に役立つ新しい API とツールを導入します。
次世代の Android デバイスを構築している OEM は、ターゲットを絞った推奨事項とオプションを利用することで、メモリの少ないデバイスでも Android 4.4 を効率的に実行できます。Dalvik JIT コード キャッシュのチューニング、カーネルの Samepage マージ(KSM)、zRAM へのスワップ、その他の最適化により、メモリの管理が容易になります。新しい構成オプションにより、OEM はプロセスのメモリ不足レベルの調整、グラフィック キャッシュ サイズの設定、メモリ回収の制御などを行えます。
Android 自体は、システム全体に変更を加えることでメモリ管理を改善し、メモリ使用量を削減します。コアシステム プロセスはヒープの使用量を削減するためにトリミングされ、大量の RAM を消費するアプリからシステムメモリをより積極的に保護するようになりました。ネットワーク接続が変更されたときなど、複数のサービスが同時に開始される場合、Android は、ピーク時のメモリ需要を回避するために、少人数のグループでサービスを順番に起動するようになりました。
デベロッパーの方は、Android 4.4 を使用することで、効率的でレスポンシブなアプリをすべてのデバイスに配信できます。新しい API ActivityManager.isLowRamDevice() を使用すると、デバイスのメモリ構成に合わせてアプリの動作を調整できます。エントリレベルのデバイスでサポートするユースケースに応じて、大容量メモリ機能を変更または無効化できます。低メモリデバイス向けにアプリを最適化する方法について詳しくは、こちらをご覧ください。
新しいツールでは、アプリのメモリ使用量について詳細な分析情報も得られます。procstats ツールは、メモリ使用量の推移を、フォアグラウンド アプリとバックグラウンド サービスの実行時間とメモリ使用量とともに詳細に表示します。新しい開発者向けオプションとして、デバイス上のビューも利用できます。meminfo ツールが強化され、メモリの傾向や問題を簡単に見つけられるようになりました。また、これまで見えなかった追加のメモリ オーバーヘッドも明らかになりました。
ホストカード エミュレーションによる新しい NFC 機能
Android 4.4 では、支払い、ポイント プログラム、カードアクセス、交通機関のパス、その他のカスタム サービスのために、ホストカード エミュレーション(HCE)を介した安全な NFC ベースのトランザクションを実現する新しいプラットフォーム サポートが導入されています。HCE を使用すると、Android デバイス上のすべてのアプリで NFC スマートカードをエミュレートできます。これにより、ユーザーはタップ操作で選択したアプリでトランザクションを開始できます。デバイスにセキュア エレメント(SE)をプロビジョニングする必要はありません。また、新しいリーダーモードを使用して、HCE カードやその他の NFC ベースのトランザクションのリーダーとして機能させることもできます。
![非接触型決済のマーク](https://developer.android.google.cn/static/images/kk-contactless-card.png?authuser=9&hl=ja)
Android HCE は、非接触の ISO/IEC 14443-4(ISO-DEP)プロトコルを使用して転送を行う ISO/IEC 7816 ベースのスマートカードをエミュレートします。これらのカードは、既存の EMVCO NFC 支払いインフラストラクチャを含む、現在多くのシステムで使用されています。Android は、ISO/IEC 7816-4 で定義されているアプリケーション識別子(AID)を、トランザクションを適切な Android アプリにルーティングするためのベースとして使用します。
アプリはマニフェスト ファイルで、サポートする AID と、利用可能なサポートの種類(「支払い」など)を示すカテゴリ識別子を宣言します。複数のアプリが同じカテゴリで同じ AID をサポートしている場合、Android は、ユーザーが使用するアプリを選択できるダイアログを表示します。
ユーザーが POS 端末でタップして支払うと、システムは優先 AID を抽出し、トランザクションを正しいアプリにルーティングします。アプリはトランザクション データを読み取り、任意のローカル サービスまたはネットワーク ベースのサービスを使用してトランザクションを確認し、トランザクションを完了します。
Android HCE では、デバイスに NFC コントローラが必要です。HCE のサポートは、ほとんどの NFC コントローラですでに幅広く利用可能で、HCE と SE の両方のトランザクションを動的にサポートしています。NFC をサポートする Android 4.4 デバイスにはタップ &ペイが組み込まれており、HCE を使用して簡単に支払いを行うことができます。
印刷フレームワーク
Android アプリは、Wi-Fi やクラウドホスト型サービス(Google クラウド プリントなど)を介して、あらゆる種類のコンテンツを印刷できるようになりました。印刷対応アプリでは、使用可能なプリンタの検出、用紙サイズの変更、印刷する特定のページの選択、ほぼすべての種類のドキュメント、画像、ファイルの印刷を行うことができます。
Android 4.4 では、印刷のネイティブ プラットフォーム サポートと、印刷を管理し、新しいタイプのプリンタ サポートを追加するための API が導入されています。このプラットフォームには、印刷をリクエストするアプリと、印刷リクエストを処理するインストール済みの印刷サービスの間の仲介を行う印刷マネージャーが用意されています。印刷マネージャーは、印刷用の共有サービスとシステム UI を提供し、ユーザーがアプリからの印刷を一貫して制御できるようにします。また、アプリから印刷サービスまでのプロセス間で渡されるコンテンツのセキュリティも確保します。
![プリンタのサポート機能が表示されている横向きのモバイル デバイス](https://developer.android.google.cn/static/images/kk-print-land-n5.jpg?authuser=9&hl=ja)
アプリに印刷サポートを追加したり、特定の種類のプリンタをサポートする印刷サービスを開発したりできます。
プリンタ メーカーは新しい API を使用して、独自の印刷サービスを開発できます。これは、特定の種類のプリンタと通信するためのベンダー固有のロジックとサービスを追加するプラグイン可能なコンポーネントです。また、印刷サービスを構築して Google Play で配信することで、ユーザーが簡単にそのサービスを見つけてデバイスにインストールできるようになります。他のアプリと同様に、印刷サービスはいつでも無線(OTA)で更新できます。
クライアント アプリは新しい API を使用することで、最小限のコード変更でアプリに印刷機能を追加できます。ほとんどの場合、アクションバーと、印刷するアイテムを選択するための UI に印刷アクションを追加します。また、印刷ジョブの作成、印刷マネージャーのステータスのクエリ、ジョブのキャンセルを行う API も実装します。これにより、ローカルの画像やドキュメントから、ネットワーク データ、キャンバスにレンダリングされたビューまで、ほぼすべての種類のコンテンツを印刷できます。
幅広い互換性を確保するため、Android では、印刷の主要なファイル形式として PDF を使用しています。印刷前に、アプリで適切にページ分けされた PDF 版のコンテンツを生成する必要があります。便宜上、Print API にはネイティブ クラスと WebView ヘルパークラスが用意されており、標準の Android 描画 API を使用して PDF を作成できます。アプリがコンテンツの描画方法を認識していれば、印刷用の PDF をすばやく作成できます。
Android 4.4 を搭載したほとんどのデバイスには、印刷サービスとして Google クラウド プリントがプリインストールされています。また、Chrome、ドライブ、ギャラリー、QuickOffice など、印刷をサポートする複数の Google アプリもプリインストールされています。
ストレージ アクセス フレームワーク
新しいストレージ アクセス フレームワークにより、ユーザーは任意のドキュメント ストレージ プロバイダのドキュメントや画像などのファイルを簡単に参照して開くことができます。標準の使いやすい UI により、アプリやプロバイダ間で一貫した方法でファイルを閲覧したり、最近使用したアイテムにアクセスしたりできます。
![新しいストレージ アクセス フレームワーク内でサイドバーが開いているモバイル デバイス](https://developer.android.google.cn/static/images/kk-saf2-n5.jpg?authuser=9&hl=ja)
![新しいストレージ アクセス フレームワーク内の統合 Box サービスを紹介するモバイル](https://developer.android.google.cn/static/images/kk-saf1-n5.jpg?authuser=9&hl=ja)
Box などは自社のサービスをストレージ アクセス フレームワークに統合し、ユーザーがシステム全体のアプリからドキュメントに簡単にアクセスできるようにしました。
クラウドまたはローカル ストレージ サービスは、サービスをカプセル化する新しいドキュメント プロバイダ クラスを実装することで、このエコシステムに参加できます。プロバイダ クラスには、プロバイダをシステムに登録し、プロバイダでのドキュメントの閲覧、読み取り、書き込みを管理するために必要なすべての API が含まれています。ドキュメント プロバイダは、テキスト、写真、壁紙、動画、音声など、ファイルとして表すことができるリモートまたはローカルのデータへのアクセス権をユーザーに付与できます。
クラウド サービスまたはローカル サービス用のドキュメント プロバイダを作成する場合、そのプロバイダを既存の Android アプリの一部としてユーザーに配信できます。アプリをダウンロードしてインストールすると、ユーザーはフレームワークに参加しているアプリから、そのサービスにすぐにアクセスできるようになります。これにより、ユーザーがサービスを見つけやすくなるため、アプリの認知度を高め、ユーザー エンゲージメントを高めることができます。
ファイルやドキュメントを管理するクライアント アプリを開発する場合は、新しい CREATE_DOCUMENT インテントまたは OPEN_DOCUMENT インテントを使用してファイルを開くか作成するだけで、ストレージ アクセス フレームワークと統合できます。これにより、利用可能なすべてのドキュメント プロバイダを含む、ドキュメントを閲覧するための標準 UI が自動的に表示されます。
ベンダー固有のコードなしで、すべてのプロバイダに対して 1 回だけクライアント アプリを統合できます。ユーザーはプロバイダを追加または削除しても、コードの変更や更新を行わなくても、アプリから任意のサービスにアクセスできます。
ストレージ アクセス フレームワークは既存の GET_CONTENT インテントと統合されているため、ユーザーはブラウジング用の新しいシステム UI から以前のすべてのコンテンツとデータソースにアクセスできます。アプリでは、ユーザーにデータのインポートを許可する方法として、引き続き GET_CONTENT を使用できます。ブラウジング用のストレージ アクセス フレームワークとシステム UI により、ユーザーは幅広いソースからデータを簡単に見つけてインポートできます。
Android 4.4 を搭載したほとんどのデバイスには、ドキュメント プロバイダとして事前に統合された Google ドライブとローカル ストレージが搭載されています。ファイルを操作する Google アプリでも、新しいフレームワークが使用されます。
省電力センサー
センサーのバッチ処理
Android 4.4 では、ハードウェア センサーのバッチ処理のプラットフォーム サポートが導入されています。これは、進行中のセンサー アクティビティによって消費される電力を大幅に削減できる新しい最適化です。
センサーのバッチ処理では、Android がデバイス ハードウェアと連携し、センサー イベントが検出されたときに個別に収集するのではなく、まとめてバッチで効率的に収集および配信します。これにより、バッチが配信されるまで、デバイスのアプリ プロセッサは省電力のアイドル状態のままになります。標準のイベント リスナーを使用して任意のセンサーからバッチ イベントをリクエストでき、バッチを受信する間隔を制御できます。バッチサイクル間でイベントを即時配信するようリクエストすることもできます。
センサーのバッチ処理は、フィットネス、位置情報のトラッキング、モニタリングなど、低消費電力で長時間実行されるユースケースに最適です。これにより、アプリの効率が向上し、画面がオフでシステムがスリープ状態であっても、センサー イベントを継続的に追跡できます。
現在、センサーのバッチ処理は Nexus 5 で利用できます。Google はチップセット パートナーと連携して、できるだけ早くより多くのデバイスで利用できるように取り組んでいます。
![新しい歩行検出機能のサポートを紹介するモバイル](https://developer.android.google.cn/static/images/kk-sensors-moves-n5.jpg?authuser=9&hl=ja)
![新しい歩数計のサポートを紹介するモバイル](https://developer.android.google.cn/static/images/kk-sensors-runtastic-n5.jpg?authuser=9&hl=ja)
「運動」と「Runtastic 万歩計」は、ハードウェア歩数検出器を使用して、長時間実行される低消費電力のサービスを提供します。
歩数検出機能と歩数計
Android 4.4 では、2 つの新しい複合センサー(歩数検出機能と歩数計)のプラットフォーム サポートが追加されています。これにより、アプリはユーザーが歩いているとき、走っているとき、または階段を上っているときの歩数を追跡できます。これらの新しいセンサーは、消費電力を抑えるためにハードウェアに実装されています。
歩行検出機能は、加速度計の入力を解析して 1 歩が歩いたことを認識し、歩数ごとにイベントをトリガーします。歩数計は、デバイスが最後に再起動してからの歩数の合計を追跡し、歩数が変化するたびにイベントをトリガーします。ロジックとセンサーの管理はプラットフォームと基盤となるハードウェアに組み込まれているため、アプリで独自の検出アルゴリズムを維持する必要はありません。
歩行検出センサーとカウンタ センサーは Nexus 5 で利用できます。Google はチップセット パートナーと連携して、できるだけ早く新しいデバイスに搭載できるよう取り組んでいます。
SMS プロバイダ
SMS や MMS を使用するメッセージ アプリを開発する場合、共有 SMS プロバイダと新しい API を使用して、アプリのメッセージの保存と取得を管理できるようになりました。新しい SMS プロバイダと API は、SMS または MMS メッセージを処理するすべてのアプリ向けに標準化されたインタラクション モデルを定義します。
Android 4.4 では、新しいプロバイダと API に加えて、メッセージの受信とプロバイダへの書き込みのための新しいセマンティクスが導入されています。メッセージを受信すると、システムは新しい SMS_DELIVER インテントを使用して、そのメッセージをユーザーのデフォルト メッセージ アプリに直接転送します。他のアプリは引き続き SMS_RECEIVED インテントを使用して受信メッセージをリッスンできます。また、プロバイダにメッセージ データを書き込むことができるのはデフォルト アプリのみになりましたが、他のアプリはいつでも読み取ることができます。ユーザーのデフォルトではないアプリでも、メッセージを送信できます。アプリに代わってシステムがプロバイダへのメッセージの書き込みを処理するため、ユーザーはデフォルトのアプリでメッセージを表示できます。
新しいプロバイダとセマンティクスは、複数のメッセージ アプリをインストールしたときのユーザー エクスペリエンスの向上に役立ちます。また、完全にサポートされた上位互換の API を使用して新しいメッセージ機能を構築することもできます。
美しいアプリを作成するための新しい方法
![新しい没入モード機能が表示されたモバイル](https://developer.android.google.cn/static/images/kk-immersive-n5.jpg?authuser=9&hl=ja)
新しい没入モードを使用すると、アプリは画面上のすべてのピクセルを使用してコンテンツを表示し、タッチイベントをキャプチャできます。
全画面表示の没入モード
これで、アプリはデバイス画面上のすべてのピクセルを使用してコンテンツを表示し、タッチイベントをキャプチャできます。Android 4.4 では、新しい全画面没入モードが追加されています。これにより、ステータスバーやナビゲーション バーなどのすべてのシステム UI を隠して、スマートフォンやタブレットで端から端まで伸びる全画面 UI を作成できます。写真、動画、地図、書籍、ゲームなど、ビジュアル性の高いコンテンツに最適です。
新しいモードでは、ユーザーがアプリやゲームを操作している間も、システム UI は非表示のままになります。そのため、画面上の任意の場所(通常はシステムバーが占有する領域を含む)からタッチイベントをキャプチャできます。これにより、アプリやゲームでより大きく、情報量が多く、没入感のある UI を作成し、視覚的な煩わしさを減らすことができます。
ユーザーが全画面没入モードから常にシステム UI に簡単かつ一貫してアクセスできるように、Android 4.4 では新しい操作がサポートされています。没入モードでは、画面の上部または下部からエッジスワイプするとシステム UI が表示されるようになりました。
没入モードに戻るには、ユーザーはバーの境界の外側で画面をタップするか、バーが自動的に非表示になるまでしばらく待ちます。一貫したユーザー エクスペリエンスを実現するため、新しい操作はステータスバーを非表示にする以前のメソッドでも機能します。
シーンをアニメーション化するための遷移フレームワーク
ほとんどのアプリは、さまざまなアクションを公開する複数の重要な UI 状態を中心にフローを構築しています。また、多くのアプリではアニメーションを使用して、ユーザーが各状態の進行状況と、各で使用可能なアクションを理解できるようにしています。アプリで高品質のアニメーションを簡単に作成できるように、Android 4.4 には、新しい遷移フレームワークが導入されています。
遷移フレームワークを使用すると、シーン(通常はビュー階層)と遷移を定義できます。遷移は、ユーザーがシーンを開始または終了するときにシーンをアニメーション化または変換する方法を記述します。事前定義されたいくつかの遷移タイプを使用して、レイアウト境界や可視性などの特定のプロパティに基づいてシーンをアニメーション化できます。シーンの変更中にビューのフェード、移動、サイズ変更を自動的に行う自動遷移タイプもあります。さらに、アプリにとって最も重要なプロパティをアニメーション化するカスタム遷移を定義することも、必要に応じて独自のアニメーション スタイルを挿入することもできます。
遷移フレームワークを使用すると、シーンを定義することなく、UI の変更をオンザフライでアニメーション化することもできます。たとえば、ビュー階層に一連の変更を加えると、その変更に応じて TransitionManager で遅延遷移を自動的に実行できます。
遷移を設定したら、アプリから簡単に呼び出すことができます。たとえば、遷移を開始するために 1 つのメソッドを呼び出し、ビュー階層にさまざまな変更を加えると、次のフレームで、指定した変更をアニメーション化するアニメーションが自動的に開始されます。
![半透明のシステム UI](https://developer.android.google.cn/static/images/kk-home.jpg?authuser=9&hl=ja)
アプリは新しいウィンドウ スタイルを使用して、半透明のシステムバーをリクエストできます。
アプリフローの特定のシーン間で実行される遷移をカスタム制御するには、TransitionManager を使用します。TransitionManager を使用すると、シーン間の関係と、特定のシーンの変化で実行される遷移を定義できます。
半透明のシステム UI のスタイル設定
コンテンツを最大限に活用するために、新しいウィンドウのスタイルとテーマを使用して、ステータスバーとナビゲーション バーの両方を含む半透明のシステム UI をリクエストできるようになりました。ナビゲーション バーのボタンやステータスバーの情報を読みやすくするために、システムバーの背後にわずかなグラデーションが表示されます。一般的なユースケースは、壁紙に表示できるアプリです。
通知アクセスの強化
通知リスナー サービスで、通知ビルダー API を使用して作成された受信通知に関する詳細情報を表示できるようになりました。リスナー サービスは、通知のアクションや新しいエクストラ フィールド(テキスト、アイコン、画像、進行状況、クロノメーターなど)にアクセスして、通知に関するよりわかりやすい情報を抽出し、別の方法で情報を表示できます。
Chromium WebView
Android 4.4 には、Chromium をベースとしたまったく新しい WebView の実装が含まれています。新しい Chromium WebView は、ウェブベースのコンテンツを構築して表示するための最新の標準サポート、パフォーマンス、互換性を提供します。
Chromium WebView は HTML5、CSS3、JavaScript を幅広くサポートしています。Chrome for Android 30 で利用できる HTML5 のほとんどの機能をサポートしています。また、JavaScript のパフォーマンスが大幅に改善された最新バージョンの JavaScript Engine(V8)も導入されています。
さらに、新しい Chromium WebView では Chrome DevTools を使用したリモート デバッグがサポートされています。たとえば、開発マシンで Chrome DevTools を使用して、モバイル デバイスで WebView コンテンツをライブで検査、デバッグ、分析できます。
新しい Chromium WebView は、Android 4.4 以降を搭載するすべての対応デバイスに含まれています。既存のアプリやコンテンツに最小限の変更を加えるだけで、新しい WebView をすぐに利用できます。ほとんどの場合、コンテンツは新しい実装にシームレスに移行されます。
新しいメディア機能
画面の録画
Android デバイスから直接、アプリの高品質な動画を簡単に作成できるようになりました。Android 4.4 では、画面の録画のサポートが追加され、USB 経由で Android SDK 環境に接続されているデバイス上で録画を開始および停止できる画面録画ユーティリティが用意されています。アプリのチュートリアルやチュートリアル、テスト資料、マーケティング動画などを作成するための優れた新しい方法です。
画面録画ユーティリティを使用すると、デバイスの画面コンテンツの動画をキャプチャし、その動画を MP4 ファイルとしてデバイスに保存できます。デバイスがサポートする任意の解像度とビットレートで録画でき、出力ではディスプレイのアスペクト比が維持されます。デフォルトでは、現在の向きでデバイスのディスプレイ解像度と同じか近い解像度が選択されます。録画が完了したら、デバイスから直接動画を共有するか、MP4 ファイルをホスト コンピュータに取り込んでポストプロダクションを行います。
スクリーン レコーダーでキャプチャしたくない動画などの保護されたコンテンツをアプリで再生する場合は、SurfaceView.setSecure() を使用してコンテンツをセキュアとしてマークできます。
画面の録画にアクセスするには、Android SDK に組み込まれている adb ツールで、adb shell screenrecord コマンドを使用します。Android Studio の logcat から起動することもできます。
アダプティブ再生による解像度の切り替え
Android 4.4 では、Android メディア フレームワークでアダプティブ再生が正式にサポートされています。アダプティブ再生は、MPEG-DASH やその他の形式の動画デコーダのオプション機能であり、再生中に解像度をシームレスに変更できます。クライアントはデコーダへの新しい解像度の入力動画フレームへのフィードを開始することができ、出力バッファの解像度は大きなギャップなしに自動的に変更されます。
Android 4.4 では解像度の切り替えにより、メディアアプリのストリーミング動画のエクスペリエンスが大幅に向上しています。アプリは、既存の API を使用して実行時にアダプティブ再生のサポートをチェックし、Android 4.4 で導入された新しい API を使用して解像度の切り替えを実装できます。
DASH のための一般的な暗号化
Android は、MPEG-DASH 用の Common Encryption(CENC)をサポートするようになりました。これにより、コンテンツの保護を管理するための標準のマルチプラットフォーム DRM スキームが提供されます。アプリは、Android のモジュラー DRM フレームワークと DASH をサポートするプラットフォーム API を介して CENC を利用できます。
HTTP Live Streaming
Android 4.4 では、プラットフォームの HTTP Live Streaming(HLS)サポートが、HLS 仕様のバージョン 7(プロトコルのバージョン 4)のスーパーセットに更新されます。詳しくは、IETF ドラフトをご覧ください。
DSP へのオーディオ トンネリング
Android 4.4 では、高性能で低消費電力のオーディオ再生を実現するために、デバイス チップセットのデジタル シグナル プロセッサ(DSP)にオーディオ トンネリングのプラットフォーム サポートが追加されています。トンネリングでは、オーディオ デコードと出力エフェクトが DSP にオフロードされるため、アプリ プロセッサが起動する頻度とバッテリー使用量が少なくなります。
オーディオ トンネリングは、画面をオフにしてヘッドセットで音楽を聴くなどのユースケースにおいて、バッテリー駆動時間を大幅に改善できます。たとえば、オーディオ トンネリングにより、Nexus 5 では、ネットワーク以外での音声再生時間が最大 60 時間となり、トンネリングされていない音声と比べて 50% 以上長くなります。
メディア アプリでは、コードを変更せずに、サポートされているデバイスでオーディオ トンネリングを利用できます。デバイス上で利用可能なオーディオの再生は、常にトンネリングによって最適化されます。
![ラウドネス エンハンサーのオーディオ エフェクトを示すビジュアライザー](https://developer.android.google.cn/static/images/kk-loudnessEnhancerAnnotated.png?authuser=9&hl=ja)
ラウドネス エンハンサー効果によって音声コンテンツの可聴性が増す仕組みの可視化
オーディオ トンネリングは、デバイス ハードウェアでのサポートが必要です。現在、オーディオ トンネリングは Nexus 5 で利用できます。Google はチップセット パートナーと連携して、できるだけ早くより多くのデバイスで利用できるように取り組んでいます。
音声モニタリング
アプリは、ビジュアライザー エフェクトの新しいモニタリング ツールを使用して、デバイスで現在再生中のオーディオのピークレベルと RMS レベルに関する最新情報を取得できます。たとえば、これを音楽ビジュアライザーでクリエイティブに使用したり、メディア プレーヤーで再生メータリングを実装したりできます。
ラウドネス エンハンサー
メディア再生アプリでは、新しい LoudnessEnhancer エフェクトを使用して音声コンテンツの音量を上げることができます。このエフェクトは、音声用に特別に調整された時定数を持つコンプレッサーとして機能します。
音声タイムスタンプによる AV 同期の改善
オーディオ フレームワークで、オーディオ出力 HAL からアプリにプレゼンテーション タイムスタンプを報告できるようになりました。これにより、音声と動画の同期が改善されます。音声タイムスタンプを使用すると、特定の音声フレームがデバイス外でユーザーに提示される(または提示された)タイミングをアプリで判断できます。タイムスタンプ情報を使用すると、音声と動画フレームをより正確に同期できます。
Wi-Fi CERTIFIED MiracastTM
Android 4.4 デバイスは、Wi-Fi Alliance Wi-Fi Display Specification に対して Miracast 互換として認定されるようになりました。テストを容易にするため、新しいワイヤレス ディスプレイ 開発者向けオプションでは、ワイヤレス ディスプレイ認証向けの高度な構成コントロールと設定が公開されます。このオプションには、[設定] > [開発者向けオプション] > [ワイヤレス ディスプレイ認証] からアクセスできます。Nexus 5 は、Miracast 認定のワイヤレス ディスプレイ デバイスです。
RenderScript コンピューティング
![Renderscipt の最適化のグラフ](https://developer.android.google.cn/static/images/kk-rs-chart-versions.png?authuser=9&hl=ja)
Android 4.4 と Android 4.3 のパフォーマンス ベンチマークは、同じデバイス(Nexus 7、Nexus 10)で実行されます。
継続的なパフォーマンスの向上
アプリで RenderScript を使用すると、RenderScript ランタイム自体で継続的なパフォーマンス調整が行われるため、再コンパイルの必要はありません。右のグラフは、Android 4.4 で 2 つの一般的なチップセットを使用した場合のパフォーマンスの向上を示しています。
GPU アクセラレーション
サポート対象デバイスで RenderScript を使用するアプリでは、コードの変更や再コンパイルを行わずに GPU アクセラレーションを利用できます。Nexus 10 で初めて RenderScript GPU アクセラレーションがリリースされて以来、他のさまざまなハードウェア パートナーがサポートを追加しています。
Android 4.4 を搭載し、GPU アクセラレーションは Nexus 5、Nexus 4、Nexus 7(2013)、Nexus 10 で使用できるようになりました。Google はパートナーと協力して、できる限り早くより多くのデバイスで GPU アクセラレーションをご利用いただけます。
Android NDK の RenderScript
これで、RenderScript をネイティブ コードから直接利用できるようになりました。Android Native Development Kit(NDK)の新しい C++ API を使用すると、スクリプト組み込みやカスタム カーネルなど、フレームワーク API で使用できるものと同じ RenderScript 機能にアクセスできます。
ネイティブ コードで大規模かつパフォーマンス集約型のタスクを処理する場合は、RenderScript を使用してそれらのタスクを実行し、ネイティブ コードと統合できます。RenderScript は、マルチコア CPU、GPU、その他のプロセッサを自動的にサポートし、幅広いデバイスで優れたパフォーマンスを実現します。
NDK を通じて RenderScript を使用するアプリをビルドすると、フレームワーク API で利用可能な RenderScript サポート ライブラリと同様に、Android 2.2 以降を搭載しているすべてのデバイスにアプリを配布できます。
グラフィック
GLES2.0 SurfaceFlinger
Android 4.4 の SurfaceFlinger は OpenGL ES 1.0 から OpenGL ES 2.0 にアップグレードされます。
仮想ディスプレイ向けの新しい Hardware Composer のサポート
Android Hardware Composer の最新バージョンである HWComposer 1.3 では、プライマリの外部(HDMI など)ディスプレイに加えて、1 つの仮想ディスプレイのハードウェア合成がサポートされており、OpenGL ES の相互運用性が改善されています。
新しい接続タイプ
新しい Bluetooth プロファイル
Android 4.4 では、2 つの新しい Bluetooth プロファイルがサポートされ、アプリで省電力およびメディアに関する幅広いインタラクションをサポートできるようになりました。Bluetooth HID over GATT(HOGP)は、マウス、ジョイスティック、キーボードなど、低消費電力の周辺機器と低レイテンシのリンクをアプリに提供します。Bluetooth MAP を使用すると、アプリは付近のデバイス(ハンズフリー用の自動車用端末や別のモバイル デバイスなど)とメッセージを交換できます。Bluetooth AVRCP 1.3 の拡張機能として、ユーザーは Bluetooth デバイスからシステムの絶対音量を設定できるようになりました。
HOGP、MAP、AVRCP のプラットフォーム サポートは、Android 4.2 で Google と Broadcom によって導入された Bluedroid Bluetooth スタック上に構築されています。Nexus デバイスのほか、互換性のある Bluetooth 機能を提供するその他の Android 互換デバイスですぐにサポートをご利用いただけます。
IR ブラスター
Android 4.4 では、組み込みの IR ブラスターのプラットフォーム サポートに加えて、それらを活用するためのアプリを作成できる新しい API とシステム サービスが導入されています。
新しい API を使用して、付近のテレビ、チューナー、スイッチ、その他の電子機器をユーザーがリモートで制御できるアプリを構築できます。この API を使用すると、アプリは、スマートフォンやタブレットに赤外線エミッターが搭載されているかどうかを確認し、その携帯通信会社の周波数を照会して、赤外線信号を送信できます。
この API は Android 4.4 以降を搭載する Android デバイスで標準となっているため、カスタムの統合コードを記述しなくても、アプリは可能な限り幅広いベンダーをサポートできます。
Wi-Fi TDLS のサポート
Android 4.4 では、Wi-Fi Tunneled Direct Link Setup(TDLS)がサポートされ、同じ Wi-Fi ネットワーク上にあるデバイス間でメディアやその他のデータをより高速にストリーミングするシームレスな方法が導入されています。
ユーザー補助
字幕に関するシステム全体の設定
Android 4.4 では、クローズド キャプションに関するシステム全体の設定を追加することで、さまざまなアプリにおけるユーザー補助機能の利便性が向上しています。ユーザーは [設定] > [ユーザー補助] > [字幕] に移動して、字幕を表示するかどうか、使用する言語、テキストサイズ、テキスト スタイルなど、字幕のグローバルな設定を行うことができます。
動画を使用するアプリは、ユーザーの字幕設定にアクセスして、ユーザーの好みに合わせて表示を調整できるようになります。新しい字幕マネージャー API を使用すると、ユーザーの字幕設定を確認、モニタリングできます。字幕マネージャーは、ユーザーが希望する字幕の状態のほか、優先する言語 / 地域、スケーリング ファクタ、テキスト スタイルを提供します。テキスト スタイルには、前景色と背景色、エッジのプロパティ、書体が含まれます。
![システム全体の字幕設定に字幕を表示する横向きのモバイル デバイス](https://developer.android.google.cn/static/images/kk-captions-n5.jpg?authuser=9&hl=ja)
アプリは、ユーザーのシステム全体の字幕設定を参照できるようになりました。想定される表示スタイルの例を設定画面に直接表示します。
さらに、VideoView を使用するアプリでは、新しい API を使用して、レンダリング用の動画ストリームとともに字幕ストリームを渡すことができます。システムは、ユーザーのシステム全体の設定に従って、動画フレーム上の字幕の表示を自動的に処理します。現在、VideoView は WebVTT 形式の字幕の自動表示のみをサポートしています。
字幕を表示するすべてのアプリは、ユーザーのシステム全体の字幕設定を確認し、その設定に可能な限り近くで字幕をレンダリングする必要があります。設定の特定の組み合わせがどう表示されるかを詳しく知りたい場合は、設定アプリで直接、さまざまな言語、サイズ、スタイルの字幕のプレビューをご覧ください。
ユーザー補助の拡張 API
Android 4.4 ではユーザー補助 API が拡張され、より正確な構造的、セマンティックな説明と画面上の要素の監視がサポートされています。デベロッパーは新しい API を使用して、画面上の要素に関するより多くの情報をユーザー補助サービスに提供することで、ユーザー補助機能に対するフィードバックの質を向上させることができます。
ユーザー補助ノードでは、デベロッパーはノードがポップアップであるかどうかを判別したり、その入力タイプを取得したりできるようになりました。新しい API を使用して、リストやテーブルなど、グリッドのような情報を含むノードを操作することもできます。たとえば、サポートされている新しいアクション、収集情報、ライブ リージョン モードなどを指定できます。
新しいユーザー補助イベントにより、デベロッパーはウィンドウ コンテンツで行われる変更にきめ細かく追跡できるようになり、デバイスのタッチ探索モードの変更をリッスンできるようになりました。
海外ユーザーのサポート
RTL ロケール向けのドローアブル ミラーリング
アプリが RTL 記述法を使用するユーザーを対象としている場合、ユーザーのロケール設定に RTL 言語が含まれている場合に、新しい API を使用してドローアブルの自動ミラーリングを宣言できます。
ドローアブルを自動ミラーリングとして宣言すると、アプリ内のアセットの重複を防止し、APK のサイズを削減できます。LTR プレゼンテーションと RTL プレゼンテーションの両方で再利用可能なドローアブルがある場合は、デフォルト バージョンを自動ミラーリングとして宣言し、それらのドローアブルを RTL リソースから除外できます。
![](https://developer.android.google.cn/static/images/kk-pseudolocale-rtl.png?authuser=9&hl=ja)
[RTL レイアウトを使用] オプションを使用すると、アプリのローカライズのテストが容易になります。
ビットマップ、9-patch、レイヤ、状態リストなど、さまざまなタイプのドローアブルをアプリコード内で自動ミラーリングとして宣言できます。また、新しい属性を使用して、リソース ファイル内でドローアブルを自動ミラーリングとして宣言することもできます。
RTL レイアウトの使用
RTL 言語に切り替えずにレイアウト ミラーリングの問題を簡単にテストおよびデバッグできるように、Android には、すべてのアプリで RTL レイアウト方向を強制的に適用する新しい開発者向けオプションが用意されています。
[RTL レイアウトを使用] オプションを選択すると、すべてのロケールでデバイスを RTL レイアウトに切り替え、現在の言語でテキストが表示されます。これにより、アプリを RTL 言語で表示することなく、アプリ全体のレイアウトの問題を見つけることができます。このオプションには、[設定] > [開発者向けオプション] > [RTL レイアウト方向を使用] からアクセスできます。
セキュリティの機能強化
SELinux(適用モード)
Android 4.4 では、SELinux 構成が「permissive」から「enforcing」に更新されます。つまり、enforcing ポリシーがある SELinux ドメイン内の潜在的なポリシー違反はブロックされます。
暗号アルゴリズムの改善
Android は、さらに 2 つの暗号アルゴリズムのサポートを追加することで、セキュリティをさらに強化しました。キーストア プロバイダに楕円曲線デジタル署名アルゴリズム(ECDSA)のサポートが追加され、アプリやデータ接続の署名などのシナリオに適用可能な、デジタル署名のセキュリティが改善されました。Scrypt 鍵導出関数は、フルディスク暗号化に使用される暗号鍵を保護するために実装されます。
その他の機能強化
マルチユーザー デバイスで、VPN がユーザーごとに適用されるようになりました。これにより、デバイスの他のユーザーに影響を与えることなく、VPN 経由ですべてのネットワーク トラフィックをルーティングできます。また、Android で FORTIFY_SOURCE レベル 2 がサポートされるようになりました。また、すべてのコードはこれらの保護機能でコンパイルされます。FORTIFY_SOURCE は clang で動作するように拡張されました。
メモリ使用量を分析するためのツール
Procstats
procstats という新しいツールを使用すると、アプリが使用するメモリリソースと、システムで実行されている他のアプリやサービスが使用するリソースを分析できます。
Procstats は、アプリの動作状況を追跡し、実行時間とメモリ使用量に関するデータを提供して、実行効率の判断に役立てます。これは、バックグラウンドで実行されるサービスを開始するアプリにとって最も重要なことです。実行中の時間と、その間に使用されている RAM の量をモニタリングすることができるためです。Procstats は、フォアグラウンド アプリのメモリ使用量の推移も収集して、アプリの全体的なメモリ プロファイルを判断します。
Procstats は、アプリによって開始されたバックグラウンド サービスを特定するのに役立ちます。これらのサービスが実行中である時間と、その間に使用されている RAM の量を追跡できます。Procstats を使用すると、フォアグラウンドにあるアプリをプロファイリングできます。また、経時的なメモリ使用量を使用して全体的なメモリ プロファイルを判断できます。
![](https://developer.android.google.cn/static/images/kk-procstats.png?authuser=9&hl=ja)
新しい procstats ツールを使用すると、アプリとサービスのメモリ使用量の推移を確認できます。
![](https://developer.android.google.cn/static/images/kk-meminfo.png?authuser=9&hl=ja)
強化された meminfo ツールを使用すると、アプリのメモリ使用量の詳細を確認できます。
procstats には、Android SDK に含まれる adb ツールの adb shell dumpsys procstats からアクセスできます。また、オンデバイス プロファイリングについては、下記の Process Stats 開発者向けオプションをご覧ください。
デバイス上のメモリのステータスとプロファイリング
Android 4.4 には、任意のデバイスやエミュレータで実行しているアプリのメモリ プロファイルの分析を容易にする新しい開発者向けオプションが用意されています。アプリがメモリをどのように使用し、RAM の少ないデバイスでのパフォーマンスを把握することは特に便利です。このオプションには、[設定] > [開発者向けオプション] > [プロセスの統計情報] からアクセスできます。
![新しい [Process Stats] オプションを紹介するモバイル](https://developer.android.google.cn/static/images/kk-proc-device-overview-n5.jpg?authuser=9&hl=ja)
![新しい [Process Stats](プロセスの統計情報)オプション内に使用状況の詳細を示すモバイル](https://developer.android.google.cn/static/images/kk-proc-device-detail-n5.jpg?authuser=9&hl=ja)
プロセス統計情報は、アプリのメモリ使用量を簡単に確認できる方法です。自分のアプリを他のアプリと比較したり、アプリやアプリのバックグラウンド サービスに関する特定のデータを拡大したりできます。
[Process Stats] オプションには、新しい procstats サービスを使用して収集されたデータに基づいて、アプリのメモリ使用量に関するさまざまな大まかな指標が表示されます。メイン画面には、システムメモリのステータスの概要が表示されます。緑色は RAM 使用量の少ない相対時間を示し、黄色は RAM 使用量が中程度であること、赤は RAM 使用率が高い(重要)であることを示します。
概要の下には、各アプリのシステム上のメモリ負荷をまとめたリストが表示されます。アプリごとに、青色のバーはプロセスで計算された相対的なメモリ負荷(runtime x avg_pss)を示し、パーセンテージの数値はバックグラウンドで費やした相対的な時間を示します。フォアグラウンド プロセス、バックグラウンド プロセス、キャッシュ プロセスのみを表示するようにリストをフィルタできます。また、システム プロセスを含めたり除外したりできます。また、収集するデータの期間は 3 時間、6 時間、12 時間、24 時間に変更でき、uss メモリを含めることも除外することもできます。
特定のアプリのメモリ使用量を個別に詳しく確認するには、アプリをタップします。アプリごとに、消費されたメモリの概要と、アプリが実行している収集間隔の割合が表示されます。また、収集期間の平均使用量と最大使用量、およびアプリのサービスとそれらの実行時間の割合の下にも表示されます。
Process Stats のデータを使用してアプリを分析すると、問題を発見し、アプリの最適化を提案できます。たとえば、アプリが必要以上に長く実行されている場合や、一定期間にわたって大量のメモリを使用している場合、特に RAM の少ないデバイスで実行している場合、アプリのパフォーマンスを改善するために解決できるバグがコードに存在する可能性があります。