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 コードキャッシュのチューニング、カーネルの同じページのマージ(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 ベースのトランザクションのリーダーとして機能することもできます。
Android HCE は、非接触型 ISO/IEC 14443-4(ISO-DEP)プロトコルを使用して送信する ISO/IEC 7816 ベースのスマートカードをエミュレートします。これらのカードは、既存の EMVCO NFC 決済インフラストラクチャなど、現在多くのシステムで使用されています。Android は、ISO/IEC 7816-4 で定義されているアプリケーション ID(AID)を、トランザクションを適切な Android アプリに転送する際の基準として使用します。
アプリは、サポートする AID をマニフェスト ファイルで宣言します。その際、利用可能なサポートの種類(「支払い」など)を示すカテゴリ識別子も指定します。同じカテゴリで複数のアプリが同じ AID をサポートしている場合、Android は、使用するアプリを選択できるダイアログを表示します。
ユーザーが決済端末でタッチ決済を行うと、システムは優先 AID を抽出し、取引を正しいアプリに転送します。アプリは取引データを読み取り、ローカルまたはネットワークベースのサービスを介して取引を確認して完了できます。
Android HCE を使用するには、デバイスに NFC コントローラが必要です。HCE のサポートは、ほとんどの NFC コントローラですでに広く利用されており、HCE と SE の両方のトランザクションの動的サポートを提供しています。NFC をサポートする Android 4.4 デバイスには、HCE を使用した簡単な支払いのためのタップ&ペイが搭載されています。
印刷フレームワーク
Android アプリは、Wi-Fi 経由で、または Google Cloud Print などのクラウド ホスト型サービス経由で、あらゆる種類のコンテンツを印刷できるようになりました。印刷対応アプリでは、利用可能なプリンタの検出、用紙サイズの変更、印刷する特定のページの選択、ほぼすべての種類のドキュメント、画像、ファイルの印刷を行うことができます。
Android 4.4 では、印刷のネイティブ プラットフォーム サポートが導入され、印刷の管理と新しいタイプのプリンタのサポートの追加のための API が導入されています。このプラットフォームには、印刷をリクエストするアプリと、印刷リクエストを処理するインストール済みの印刷サービスを仲介する印刷マネージャーが用意されています。印刷マネージャーは、共有サービスと印刷用のシステム UI を提供し、ユーザーが任意のアプリから印刷を常に制御できるようにします。また、印刷マネージャーは、アプリから印刷サービスにプロセスをまたいでコンテンツが渡される際に、コンテンツのセキュリティを確保します。
プリンタ メーカーは、新しい API を使用して独自のプリント サービスを開発できます。これは、特定の種類のプリンタと通信するためのベンダー固有のロジックとサービスを追加するプラグイン可能なコンポーネントです。プリント サービスを構築して Google Play で配信することで、ユーザーがデバイスで簡単に見つけてインストールできるようになります。他のアプリと同様に、いつでもワイヤレスでプリント サービスを更新できます。
クライアント アプリでは、新しい API を使用して、最小限のコードの変更でアプリに印刷機能を追加できます。ほとんどの場合、アクションバーに印刷アクションと、印刷するアイテムを選択するための UI を追加します。また、印刷ジョブの作成、プリント マネージャーのステータスのクエリ、ジョブのキャンセルを行う API を実装します。これにより、ローカルの画像やドキュメントからネットワーク データやキャンバスにレンダリングされたビューまで、ほぼすべての種類のコンテンツを印刷できます。
幅広い互換性を確保するため、Android では印刷用の主なファイル形式として PDF を使用しています。印刷する前に、アプリはコンテンツの適切なページ設定の PDF バージョンを生成する必要があります。便宜上、印刷 API には、標準の Android 描画 API を使用して PDF を作成できるように、ネイティブ ヘルパー クラスと WebView ヘルパー クラスが用意されています。アプリがコンテンツの描画方法を把握している場合は、印刷用の PDF をすばやく作成できます。
Android 4.4 を搭載したほとんどのデバイスには、Google Cloud Print が印刷サービスとしてプリインストールされています。また、Chrome、ドライブ、ギャラリー、QuickOffice など、印刷をサポートする Google アプリもいくつかプリインストールされています。
ストレージ アクセス フレームワーク
新しいストレージ アクセス フレームワークにより、ユーザーは希望するドキュメント ストレージ プロバイダ全体を通じて簡単にドキュメント、画像などのファイルを参照して開くことができます。標準の使いやすい UI により、アプリやプロバイダを通じて一貫性のある方法でファイルを参照したり、最近使用したファイルにアクセスしたりできます。
クラウドまたはローカル ストレージ サービスをエコシステムに参加させるには、サービスをカプセル化する新しいドキュメント プロバイダ クラスを実装します。プロバイダ クラスには、プロバイダをシステムに登録し、プロバイダ内のドキュメントのブラウジング、読み取り、書き込みを管理するために必要なすべての 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 はチップセット パートナーと協力して、できるだけ早くより多くのデバイスに提供できるよう取り組んでいます。
歩行検出機能と歩数計
Android 4.4 では、2 つの新しい複合センサー(歩行検出機能と歩数計)のプラットフォーム サポートも追加されています。これにより、ユーザーが歩いている、走っている、階段を昇っているときに、アプリで歩数を記録できます。これらの新しいセンサーは、消費電力を抑えるためにハードウェアに実装されています。
歩行検出機能は、加速度計入力を分析してユーザーが歩いたタイミングを認識し、歩くたびにイベントをトリガーします。歩数計は、デバイスの最終的な再起動からの総歩数を追跡し、歩数の変化ごとにイベントをトリガーします。ロジックとセンサー管理はプラットフォームと基盤となるハードウェアに組み込まれているため、アプリで独自の検出アルゴリズムを維持する必要はありません。
歩数計センサーとカウンタ センサーは Nexus 5 で利用できます。Google はチップセット パートナーと連携して、できるだけ早く新しいデバイスに搭載できるよう取り組んでいます。
SMS プロバイダ
SMS または MMS を使用するメッセージ アプリを開発している場合は、共有 SMS プロバイダと新しい API を使用して、アプリのメッセージの保存と取得を管理できるようになりました。新しい SMS プロバイダと API は、SMS または MMS メッセージを処理するすべてのアプリに標準化されたインタラクション モデルを定義します。
Android 4.4 では、新しいプロバイダと API とともに、メッセージを受信してプロバイダに書き込むための新しいセマンティクスが導入されています。メッセージが受信されると、システムは新しい SMS_DELIVER インテントを使用して、ユーザーのデフォルトのメッセージ アプリに直接転送します。他のアプリは、SMS_RECEIVED インテントを使用して受信メッセージをリッスンできます。また、デフォルトのアプリのみがプロバイダにメッセージ データを書き込めるようになり、他のアプリはいつでも読み取りできるようになりました。ユーザーのデフォルトではないアプリでもメッセージを送信できます。システムがアプリに代わってプロバイダへのメッセージの書き込みを処理するため、ユーザーはデフォルト アプリでメッセージを確認できます。
新しいプロバイダとセマンティクスは、複数のメッセージ アプリがインストールされている場合のユーザー エクスペリエンスを向上させ、完全にサポートされ、下位互換性のある API を使用して新しいメッセージ機能の構築に役立ちます。
美しいアプリを作成するための新しい方法
全画面没入モード
アプリは、デバイスの画面上のすべてのピクセルを使用してコンテンツを表示し、タップイベントをキャプチャできるようになりました。Android 4.4 では、新しい全画面没入モードが追加されました。これにより、スマートフォンやタブレットの端から端まで広がるフルブレード UI を作成でき、ステータスバーやナビゲーション バーなどのすべてのシステム UI を非表示にできます。写真、動画、地図、書籍、ゲームなどのリッチなビジュアル コンテンツに最適です。
新しいモードでは、ユーザーがアプリやゲームを操作している間もシステム UI は非表示のままです。画面のどこからでもタッチイベントをキャプチャできます(システムバーが占有する領域でもキャプチャできます)。これにより、アプリやゲームでより大きく、より豊かで没入感のある UI を作成でき、視覚的な注意散漫を軽減できます。
ユーザーが全画面没入モードからシステム UI に常に簡単にアクセスできるように、Android 4.4 では新しいジェスチャーがサポートされています。没入モードで画面の上部または下部からエッジをスワイプすると、システム UI が表示されます。
没入モードに戻すには、バーの境界外の画面をタップするか、バーが自動的に非表示になるまでしばらく待ちます。一貫したユーザー エクスペリエンスを実現するため、新しいジェスチャーは、ステータスバーを非表示にする以前の方法でも機能します。
シーンをアニメーション化する遷移フレームワーク
ほとんどのアプリでは、さまざまなアクションを公開するいくつかの主要な UI 状態を中心にフローを構成します。多くのアプリでは、アニメーションを使用して、これらの状態の進行状況と、各状態で利用可能なアクションをユーザーが理解できるようにしています。アプリで高品質のアニメーションを簡単に作成できるように、Android 4.4 では新しい遷移フレームワークが導入されています。
遷移フレームワークを使用すると、シーン(通常はビュー階層)と遷移を定義できます。遷移は、ユーザーがシーンに移動または移動するときにシーンをアニメーション化または変換する方法を表します。事前定義された複数の遷移タイプを使用して、レイアウト境界や可視性などの特定のプロパティに基づいてシーンをアニメーション化できます。シーンの変更中にビューを自動的にフェード、移動、サイズ変更する自動遷移タイプもあります。さらに、アプリにとって最も重要なプロパティをアニメーション化するカスタム遷移を定義したり、必要に応じて独自のアニメーション スタイルをプラグインしたりできます。
遷移フレームワークを使用すると、シーンを定義しなくても、UI の変更をオンザフライでアニメーション化することもできます。たとえば、ビュー階層に一連の変更を加えて、TransitionManager がそれらの変更に対して遅延遷移を自動的に実行するようにします。
遷移を設定したら、アプリから簡単に呼び出すことができます。たとえば、1 つのメソッドを呼び出して遷移を開始し、ビュー階層でさまざまな変更を加えることができます。指定した変更をアニメーション化するアニメーションは、次のフレームで自動的に開始されます。
アプリケーション フローの特定のシーン間で実行される遷移をカスタム制御するには、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 エンジン(V8)のアップデート版も導入され、JavaScript のパフォーマンスが大幅に向上しています。
また、新しい Chromium WebView は、 Chrome DevTools を使用したリモート デバッグをサポートしています。たとえば、開発用マシンで Chrome DevTools を使用して、モバイル デバイスで WebView コンテンツをライブで検査、デバッグ、分析できます。
新しい Chromium WebView は、Android 4.4 以降を搭載したすべての対応デバイスに含まれています。新しい WebView は、既存のアプリやコンテンツに最小限の変更を加えてすぐに利用できます。ほとんどの場合、コンテンツは新しい実装にシームレスに移行されます。
新しいメディア機能
画面の録画
Android デバイスから直接、アプリの高品質な動画を簡単に作成できるようになりました。Android 4.4 では、画面録画のサポートが追加され、USB 経由で Android SDK 環境に接続されているデバイスで録画を開始および停止できる画面録画ユーティリティが提供されます。アプリのチュートリアルやウォークスルー、テスト資料、マーケティング動画などを作成する新しい方法です。
画面録画ユーティリティを使用すると、デバイスの画面コンテンツの動画を取り込み、その動画を MP4 ファイルとしてデバイスに保存できます。デバイスでサポートされている任意の解像度とビットレートで録画できます。出力ではディスプレイのアスペクト比が維持されます。デフォルトでは、ユーティリティは現在の向きでデバイスのディスプレイ解像度と同じまたはそれに近い解像度を選択します。録画が完了したら、デバイスから直接動画を共有するか、MP4 ファイルをホスト コンピュータに pull してポストプロダクションを行うことができます。
アプリで動画などの保護されたコンテンツを再生し、画面レコーダーでキャプチャしたくない場合は、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 の共通暗号化(CENC)をサポートするようになりました。これにより、コンテンツの保護を管理するための標準のマルチプラットフォーム DRM スキームが提供されます。アプリは、Android のモジュラー DRM フレームワークとプラットフォーム API を介して CENC を活用し、DASH をサポートできます。
HTTP Live Streaming
Android 4.4 では、プラットフォームの HTTP Live Streaming(HLS)サポートが、HLS 仕様のバージョン 7(プロトコルのバージョン 4)のスーパーセットに更新されました。詳細については、IETF ドラフトをご覧ください。
DSP へのオーディオ トンネリング
高パフォーマンスで低電力のオーディオ再生を実現するため、Android 4.4 では、デバイス チップセット内のデジタル シグナル プロセッサ(DSP)へのオーディオ トンネリングのプラットフォーム サポートが追加されました。トンネリングを使用すると、オーディオのデコードと出力エフェクトが DSP にオフロードされるため、アプリケーション プロセッサの起動頻度が減り、バッテリーの使用量も削減されます。
音声トンネリングは、画面をオフにした状態でヘッドセットで音楽を聴くなどのユースケースでバッテリー駆動時間を大幅に改善できます。たとえば、音声トンネリングを使用すると、Nexus 5 ではオフネットワークでの音声再生時間が最大 60 時間に達します。これは、トンネリングされていない音声と比較して 50% 以上の増加です。
メディア アプリケーションは、コードを変更しなくても、サポートされているデバイスでオーディオ トンネリングを利用できます。デバイスで利用可能な場合は、システムがトンネリングを適用して音声再生を最適化します。
オーディオ トンネリングには、デバイスのハードウェアでのサポートが必要です。現在、オーディオ トンネリングは Nexus 5 で利用できます。Google は、チップセット パートナーと協力して、できるだけ早くより多くのデバイスで利用できるように取り組んでいます。
オーディオ モニタリング
アプリは、ビジュアライザー エフェクトの新しいモニタリング ツールを使用して、デバイスで現在再生されているオーディオのピークレベルと RMS レベルの最新情報を取得できます。たとえば、音楽ビジュアライザーで創造的に使用したり、メディア プレーヤーに再生測定を実装したりできます。
音量エンハンサー
メディア再生アプリでは、新しい LoudnessEnhancer エフェクトを使用して音声コンテンツの音量を上げることができます。このエフェクトは、音声用に特別に調整された時間定数を持つコンプレッサーとして機能します。
音声タイムスタンプで AV の同期を改善
オーディオ フレームワークは、オーディオ出力 HAL からアプリにプレゼンテーション タイムスタンプを報告できるようになりました。これにより、音声と映像の同期が改善されます。音声タイムスタンプを使用すると、特定の音声フレームがデバイス外でユーザーに表示される(または表示された)タイミングをアプリで判断できます。タイムスタンプ情報を使用して、音声と動画フレームをより正確に同期できます。
Wi-Fi CERTIFIED Miracast™
Android 4.4 デバイスは、Miracast 互換として Wi-Fi Alliance Wi-Fi ディスプレイ仕様に認定されるようになりました。テストを支援するため、新しいワイヤレス ディスプレイのデベロッパー オプションで、ワイヤレス ディスプレイ認証の高度な設定を公開します。このオプションには、[設定] > [開発者向けオプション] > [ワイヤレス ディスプレイ認定] からアクセスできます。Nexus 5 は Miracast 認定のワイヤレス ディスプレイ デバイスです。
RenderScript コンピューティング
継続的なパフォーマンスの改善
アプリで RenderScript を使用すると、再コンパイルの必要がなく、RenderScript ランタイム自体で継続的なパフォーマンス チューニングのメリットが得られます。右のグラフは、2 つの一般的なチップセットにおける Android 4.4 のパフォーマンスの向上を示しています。
GPU アクセラレーション
サポート対象のデバイスで RenderScript を使用するアプリは、コードの変更や再コンパイルなしで GPU アクセラレーションを利用できます。Nexus 10 で RenderScript GPU アクセラレーションが初めて導入されて以来、さまざまなハードウェア パートナーがサポートを追加しています。
Android 4.4 では、Nexus 5 のほか、Nexus 4、Nexus 7(2013)、Nexus 10 でも GPU アクセラレーションを利用できるようになりました。Google はパートナーと協力して、できるだけ早く他のデバイスにも対応できるよう取り組んでいます。
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 プロファイルがサポートされ、アプリで低電力とメディアの幅広い操作をサポートできるようになりました。GATT を介した Bluetooth HID(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 では、組み込みの赤外線送信機のプラットフォーム サポートが導入され、それらを活用するアプリを作成できる新しい 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 を使用すると、ユーザーの字幕設定を確認、モニタリングできます。字幕管理機能では、ユーザーが設定した字幕の状態、優先する言語 / 地域、スケーリング ファクタ、テキスト スタイルを確認できます。テキスト スタイルには、前景色と背景色、エッジ プロパティ、書体が含まれます。
また、VideoView を使用するアプリは、新しい API を使用して、レンダリング用の動画ストリームとともに字幕ストリームを渡すことができます。システムは、ユーザーのシステム全体の設定に応じて、動画フレーム上の字幕の表示を自動的に処理します。現在、VideoView は WebVTT 形式の字幕の自動表示のみをサポートしています。
字幕を表示するすべてのアプリは、ユーザーのシステム全体の字幕設定を確認し、その設定にできるだけ近づけて字幕をレンダリングする必要があります。特定の設定の組み合わせがどのように表示されるかを確認するには、設定アプリでさまざまな言語、サイズ、スタイルの字幕のプレビューを表示します。
拡張 Accessibility API
Android 4.4 では、ユーザー補助 API が拡張され、より正確な構造とセマンティクスの説明と画面上要素の観察がサポートされています。新しい API を使用すると、デベロッパーは画面上の要素に関する詳細情報をユーザー補助サービスに提供することで、ユーザー補助向けのフィードバックの品質を向上させることができます。
デベロッパーは、ユーザー補助ノードで、ノードがポップアップかどうかを判断したり、入力タイプを取得したりできるようになりました。新しい API を使用して、リストやテーブルなど、グリッド状の情報を含むノードを操作することもできます。たとえば、サポートされる新しいアクション、収集情報、ライブリージョン モードなどを指定できるようになりました。
新しいユーザー補助イベントにより、デベロッパーはウィンドウ コンテンツで発生する変更をより詳細に追跡できるようになりました。また、デバイスのタップ操作モードでの変更をリッスンできるようになりました。
全世界のユーザーのサポート
RTL ロケールのドローアブルのミラーリング
アプリが RTL スクリプトを使用するユーザーをターゲットとしている場合は、新しい API を使用して、ユーザーのロケール設定に RTL 言語が含まれている場合にドローアブルを自動ミラーリングすることを宣言できます。
ドローアブルを自動ミラーリングとして宣言すると、アプリ内のアセットの重複を防ぐことができ、APK のサイズを削減できます。LTR と RTL の両方のプレゼンテーションで再利用可能なドローアブルがある場合は、デフォルト バージョンを自動ミラーリングとして宣言し、RTL リソースからそれらのドローアブルを省略できます。
アプリケーション コードで、さまざまな種類のドローアブル(ビットマップ、ナインパッチ、レイヤ、状態リスト、その他のドローアブルなど)を自動ミラーリングとして宣言できます。新しい属性を使用して、リソース ファイルでドローアブルを自動ミラーリングとして宣言することもできます。
RTL レイアウトの使用
RTL 言語に切り替えることなくレイアウト ミラーリングの問題をテストしてデバッグできるように、Android には、すべてのアプリで RTL レイアウト方向を強制的に適用する新しい開発者向けオプションが追加されています。
[RTL レイアウトを強制] オプションを使用すると、すべての言語 / 地域でデバイスが RTL レイアウトに切り替わり、現在の言語でテキストが表示されます。これにより、アプリを RTL 言語で表示しなくても、アプリ全体のレイアウトの問題を見つけることができます。このオプションには、[設定] > [開発者向けオプション] > [RTL レイアウトの向きを強制] からアクセスできます。
セキュリティの機能強化
SELinux(enforcing モード)
Android 4.4 では、SELinux 構成が「permissive」から「enforcing」に更新されました。つまり、適用ポリシーが設定されている SELinux ドメイン内のポリシー違反の可能性はブロックされます。
暗号アルゴリズムの改善
Android では、2 つの暗号アルゴリズムのサポートを追加することで、セキュリティがさらに強化されています。キーストア プロバイダに楕円曲線デジタル署名アルゴリズム(ECDSA)のサポートが追加され、デジタル署名のセキュリティが強化されました。これは、アプリケーションやデータ接続の署名などのシナリオに適用されます。Scrypt 鍵導出関数は、フルディスク暗号化に使用される暗号鍵を保護するために実装されています。
その他の機能強化
マルチユーザー デバイスで、VPN がユーザーごとに適用されるようになりました。これにより、デバイスの他のユーザーに影響を与えることなく、VPN 経由ですべてのネットワーク トラフィックをルーティングできます。また、Android で FORTIFY_SOURCE レベル 2 がサポートされるようになったため、コードはすべてこれらの保護機能でコンパイルされます。FORTIFY_SOURCE は clang で動作するように拡張されました。
メモリ使用量を分析するためのツール
Procstats
procstats という新しいツールを使用すると、アプリが使用するメモリリソースだけでなく、システムで実行されている他のアプリやサービスで使用されるリソースを分析できます。
Procstats は、アプリの実行状況の推移を追跡し、実行時間とメモリ使用量に関するデータを提供して、アプリのパフォーマンスの効率を判断できるようにします。これは、バックグラウンドで実行されるサービスを起動するアプリにとって最も重要です。実行時間と実行中に使用される RAM 量をモニタリングできるためです。また、Procstats は、フォアグラウンド アプリケーションのメモリ使用量に関するデータを収集し、アプリの全体的なメモリ プロファイルを決定します。
Procstats を使用すると、アプリによって開始されたバックグラウンド サービスを特定できます。これらのサービスが実行されている時間や、実行中に使用した RAM の量を追跡できます。また、Procstats を使用すると、アプリがフォアグラウンドにあるときにアプリをプロファイリングし、時間の経過に伴うメモリ使用量を使用して全体的なメモリ プロファイルを特定できます。
procstats には、Android SDK に含まれている adb ツール(adb shell dumpsys procstats)からアクセスできます。また、デバイス上のプロファイリングについては、以下のプロセス統計情報のデベロッパー オプションをご覧ください。
デバイス上のメモリ ステータスとプロファイリング
Android 4.4 には、デバイスまたはエミュレータでアプリが実行されているときに、アプリのメモリ プロファイルを簡単に分析できる新しい開発者向けオプションが含まれています。これは、RAM の少ないデバイスでアプリがメモリをどのように使用し、どのように動作するかを確認するのに特に役立ちます。このオプションには、[設定] > [開発者向けオプション] > [プロセス統計情報] からアクセスできます。
[プロセス統計情報] オプションには、新しい procstats サービスを使用して収集されたデータに基づいて、アプリのメモリ使用に関するさまざまな概要指標が表示されます。メイン画面には、システム メモリのステータスの概要が表示されます。緑は、RAM 使用量が少ない時間の相対的な割合を示します。黄色は、RAM 使用量が中程度であることを示します。赤は、RAM 使用量が高い(重大)ことを示します。
概要の下には、各アプリのシステムのメモリ負荷をまとめたリストが表示されます。アプリごとに、青いバーはプロセスの相対的な計算メモリ負荷(ランタイム x avg_pss)を示し、パーセンテージはバックグラウンドで費やされた相対的な時間の量を示します。リストをフィルタして、フォアグラウンド プロセス、バックグラウンド プロセス、キャッシュに保存されたプロセスのみを表示できます。また、システム プロセスを追加または除外することもできます。収集するデータの期間を 3 時間、6 時間、12 時間、24 時間に変更することも、uss メモリを含めるか除外することもできます。
特定のアプリのメモリ使用量を個別に詳しく確認するには、そのアプリをタップします。アプリごとに、消費されたメモリの概要と、アプリが実行されていた収集間隔の割合が表示されます。また、収集期間の平均使用量と最大使用量、アプリのサービスと実行時間の割合も確認できます。
プロセス統計情報のデータを使用してアプリを分析すると、問題が明らかになり、アプリの最適化案が提案される場合があります。たとえば、アプリの実行時間が想定よりも長い場合や、一定期間にわたってメモリ使用量が多すぎる場合は、コードのバグが原因でアプリのパフォーマンスが低下している可能性があります。特に、RAM の少ないデバイスで実行している場合は、バグを解決することでアプリのパフォーマンスを改善できます。