sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

Android 4.4 KitKat

10日も前に発表されたのですが、やっと全部に目を通し終わりました。

Android KitKat | Android Developers

英語の勉強のためにあえて原文を読んでみただけですので、正確な内容に関しては、ちゃんとした 日本語の訳がされているサイトへ行かれる事をおすすめします(^^;

んで、KitKatの新機能をいろいろ見たところ、ハードウェア的にNexus5でしか試せない機能が割とあります。 開発者にとっては、Nexus5は必須といえる端末になりそうです。

とういわけで始まり。あんまり真面目に見直してないのでいろいろ間違ってる所はありそうですが、 ぼちぼちと気がついたら直していくことにします。

Making Android for everyone

4.4は、これまでよりももっと幅広いデバイス(512MBのメモリしかないような入門機を含む)上で、 速くて滑らかで、よりレスポンスよく動くように設計されている。

KitKatは、メモリ使用量を削減するために全ての主要なコンポーネントを見直し、 革新的で応答性が高く、メモリ効率のよいアプリを作成するための新しいAPIとツールを 導入している。

次世代のアンドロイド端末を作るOEMは、4.4を効率的で低メモリの端末でも動くようにするための 手法を採用できる。Dalvik JITコードキャッシュ調整や、Kernel Samepage Merging(KSM)、 zRAMへのスワップ、そしてメモリ管理を助けるその他の最適化手法がある。

Android自身においても、システム全般を変更し、メモリ管理を改善してメモリ使用量を 削減している。コアのシステムプロセスはより少ないヒープを使うように改善され、 多くのメモリを消費するアプリから、より積極的にシステムメモリを保護するようになった。

ネットワーク接続を変更するときのように、複数のサービスを一度に起動する場合には、 メモリ需要が一気に高まるのを避けるために、小さなグループにまとめて順次起動するようになっている。

開発者にとっても、4.4は全ての端末に対して効率的で応答性の良いアプリを作る助けとなる。 新しいAPIのActivityManager.isLowRamDevice()は、端末のメモリ設定に則した動作と なるように調整される。 エントリレベルの端末での動作をサポートしている場合に、必要に応じて大量のメモリを 必要とする機能を変更したり無効にしたりできる。低メモリの端末用のアプリを最適化する方法を もっと知りたいのなら、ここを参照。

新しいツールはメモリ使用状況を知るのに役立つ。procstats ツールは、フォアグランドの アプリとバックグラウンドのサービスのメモリ利用の詳細がわかる。 新しい開発オプションとして、on-device viewも利用可能。meminfoはより簡単にメモリの 傾向と問題点を発見するために強化され、以前ではわからなかったようなメモリの オーバーヘッドを明らかにする。

New NFC capabilities through Host Card Emulation

Android4.4は、Host Card Emulation(HCE)を通して、NFCベースのセキュアな通信の プラットフォームをサポートし、支払いや各種ポイント、カードアクセス、交通、その他の サービスに対応する。

端末上のどんなアプリケーションでも、HCEによってユーザーが通信を開始するためのタップで NFCスマートカードのエミュレートが可能となる。デバイスにはSecureElement(SE)は 不要である。

HCEカードや他のNFCベースの通信のためのリーダーとして振る舞うために、アプリは新しい リーダーのモードを使用する事も可能である。

Android HCEは、伝送プロトコルとして非接触のISO/IEC 14443-4を利用した ISO/IEC 7816ベースのスマートカードをエミュレートする。

これらのカードは、今日ではEMVCo NFC決済インフラを含む 多くのシステムで使われている。

Androidは、正しいAndroidアプリケーションにトランザクションを割り当てる基本として ISO/IEC 7816-4で定義された識別子(AIDs)を使用する。

アプリでは、利用可能な(例えばpaymments)種類のカテゴリ識別子をmanifestファイルで宣言する。 同じカテゴリで同じAIDをサポートする複数のアプリが存在する場合、ユーザーが使用するアプリを 選択するためのダイアログが表示される。

ユーザーがPOS端末で支払いをタップする時に、システムは、正当なアプリに対して、適したAIDと 通信経路を抽出する。アプリはトランザクションデータを読み取り、照会するために ローカルもしくはネットワークのサービスを使用し、トランザクションを完了させる。

Android HCEは、端末にNFCコントローラーが存在する必要がある。HCEとSEの トランザクションが動的にサポートされており、既にほとんどのNFCコントローラーで 利用可能である。 NFCをサポートしているAndroid4.4端末は、HCEを使って簡単にタッチで支払いが できるようになるだろう。

Printing framework

Androidアプリは、WiFiGoogle Cloud Printのようなクラウドサービスを利用して どんな種類のコンテンツでも印刷ができる。

印刷可能なアプリでは、ユーザーは利用可能なプリンターや紙のサイズ、 印刷するページを指定して、ほとんどの種類の文書や画像、ファイルを印刷可能である。

Android4.4では、印刷の管理と新しいタイプのプリンタサポートを追加するためのAPI等の ネイティブプラットフォームが導入されている。

このプラットフォームは、アプリの印刷要求と、印刷要求を処理するインストール済の 印刷サービスとの間を仲介するためのプリントマネージャを提供する。

このプリントマネージャは、任意のアプリからの印刷に対して、共有サービスと一貫性のある コントロールをユーザーに与えるためのシステムUIを提供する。 また、アプリからサービスというプロセス間通信のようなコンテンツのセキュリティの確保も行う。

プリンタメーカーは、独自の印刷サービスを開発する為に新しいAPIを利用して、 特定のプリンタと通信するためのベンダー固有の処理やサービスを追加したりする コンポーネントといった印刷サービスを開発可能である。 彼らは、印刷サービスを構築し、ユーザーが検索してデバイスにインストールしやすくするために Google Playで配布することもでき、他のアプリと同じように、いつでもOTAによって 印刷サービスをアップデートができる。

クライアントアプリでは、新しいAPIを使って最小限のコードの変更でアプリに印刷機能を 追加できる。 多くの場合、印刷する項目を選択するためにActionBarやUIに印刷のアクションを追加するだろう。 また、印刷ジョブを作成し、プリントマネージャに状態を問い合わせ、ジョブを キャンセルするためにAPIを実装するだろう。

これは、ローカルのイメージや文書からネットワークデータやCanvasにレンダリングされた Viewといった、ほぼ全ての種類のコンテンツを印刷可能な事を意味する。

広く互換性を維持するため、アンドロイドは、印刷用の主なフォーマットとしてPDFを 採用している。 印刷を行う前に、コンテンツを適切に改ページ処理したPDFを生成する必要がある。

便宜上、印刷用APIは、標準的なAndroidの描画APIを使ってPDFを作る為のnativeとWebView用の ヘルパークラスを用意している。アプリがコンテンツの描画方法を知っているなら、 印刷の為のPDFもすぐに作成可能である。

Android 4.4が動く多くの端末では、プリインストールされた印刷サービスとして、 Google Cloud Printが含まれるだろう。 ChromeやDrive,GalleryそしてQuickOfficeといった Google Appsも同様である。

Storage Access Framework

新しいストレージアクセスフレームワークは、適切なストレージプロバイダを通して、文書、 イメージ、他の形式のファイルへのアクセスをユーザーが簡単に行えるようにする。

標準化された使い勝手のよいUIは、アプリとプロバイダ間の一貫した方法による ファイル操作と最近使用したファイルへのアクセスを簡単にする。

クラウドやローカルのストレージサービスは、それらのサービスをカプセル化した新しい ドキュメントプロバイダクラスを実装することで、このエコシステムに参加できる。

プロバイダクラスには、システムへのプロバイダの登録や、プロバイダによるファイルの管理や ドキュメントの読み書きに必要なAPIの全てが含まれる。

ドキュメントプロバイダによって、リモートやローカルの、テキストや写真、壁紙、動画、 オーディオ等のファイルとして表される全てのデータにアクセスが可能となる。

クラウドやローカルサービスのためにドキュメントプロバイダを構築する場合、 既存のAndroidアプリの一部としてユーザーに提供が可能である。 アプリをダウンロードしてインストールした後は、フレームワークに参加した任意の アプリによって、すぐにあなたのサービスへのアクセスが可能となる。

ユーザーがより簡単にあなたのサービスを見つけやすくなるため、より多くの露出と 導入の助けとなる。

ファイルやドキュメントを管理するクライアントアプリを開発する場合は、ファイルオープンや 新規作成を行う為に、CREATE_DOCUMENTやOPEN_DOCUMENTのintentによる sctorage access frameworkとの接続が可能である。システムは、利用可能な ドキュメントプロバイダを含んだドキュメントを一覧するための標準UIを表示する。

ベンダー固有のコードを一行も書くことなく、一度の操作で全てのプロバイダに対して接続が 可能となる。ユーザーがプロバイダを追加もしくは削除した場合でも、コードの変更や更新を 行わなくてもアプリからは優先サービスへのアクセスが可能となる。

Storage Access Frameworkは、既存のGET_CONTENTによるIntentと統合されるため、 以前のコンテンツやデータソースに対して、新しいシステムUIでのアクセスも可能である。

ユーザーに対してデータをインポートさせる方法としてGET_CONTENTを使うことでき、 Storage Access FrameworkとシステムUIで、広範囲のソースからインポート対象のデータを 簡単に見つけることが可能である。

Android4.4が動くほとんどの端末では、Document ProviderとしてGooge Driveと ローカルストレージが含まれる。 ファイルと共に働くGoogleAppsもまた、新しいフレーウワークで使われる。

Low-power sensors

Sensor batching

Android4.4ではハードウェアセンサーのバッチ処理という、センサーが稼働中でも劇的に電力消費を 減らすための新しい最適化をサポートしたプラットフォームを導入している。

センサーバッチ処理では、効率的にセンサーイベントを収集し配布するために、個々ではなく バッチによってデバイスのハードウェアで動作する

これによって端末のアプリケーションプロセッサは、バッチが配信されるまで、低電力なアイドル状態の ままでいられる。

任意のセンサーから標準的なイベントリスナーを使ってバッチイベントを要求したり、バッチを受け取る 間隔を制御したりできる。また、バッチサイクルの間に即座にイベントの配信を要求もできる。

センサーのバッチ処理は、フィットネスや位置情報のトラッキング、監視といった省電力で 長時間実行されるケースに適している。バッチ処理は、アプリをもっと効率的にし、スクリーンオフの 時やスリープ時でも継続的にセンサーイベントを追跡できるようにする。

センサーバッチは、今はNexus 5で利用可能。できるだけ早く他の多くのデバイスへも搭載するために、 メーカーと協力して動いている。

Step Detector and Step Counter

Android 4.4では、ユーザーが歩いたり走ったり、階段を登った時の歩数をアプリで計測するための、 ステップセンサと歩数計の二つの新しい復号センサーのサポートも追加されている。

これらの新しいセンサーは、省電力化のためにハードウェアで実装されている。

ステップの検出では、ユーザーのステップを検出するために、加速度センサからの値を分析し、 各ステップ毎にイベントを発生させる。

歩数計は、端末がリブートしてからのトータルのステップを保持し、ステップ数が変化する度に イベントを発生させる。

ロジックとセンサーの管理はプラットフォームとハードウェア側で構築されているため、アプリ内で アルゴリズムを考える必要はない。

ステップの検出とカウンターはNexus 5で利用可能。できるだけ早く新しい端末に普及させるため、 メーカーと協力して動いている。

SMS provider

SMSやMMSを使用するメッセージアプリを開発する場合、共有のSMSプロバイダと新しいAPIを、 メッセージの保存や検索の為に利用できる。

新しいSMSプロバイダとAPIは、SMSやMMSのメッセージを処理する全てのアプリのための標準的な 応答モデルを定義している。

新しいプロバイダとAPIと共に、Android4.4はメッセージの受信とプロバイダへの送信の 新しいやり方を導入している。 メッセージを受け取ると、システムはSMS_DELIVERのインテントを使ってデフォルトの メッセージアプリに対して直接通知する。他のアプリも、SMS_RECEIVEDによってメッセージの 受信を検知可能である。

今のところ、プロバイダからのメッセージの読み出しは、他のアプリでもいつでも可能だが、 メッセージの書き込みは、システムによってデフォルトアプリにのみ制限されている。

デフォルトアプリではないものでも、システムが肩代わりしてメッセージをプロバイダへ 書き込む事により送信が可能である。 そして、ユーザーはそれをデフォルトアプリで読める。

新しいプロバイダと概念は、メッセージアプリが複数インストールされている環境において、 ユーザーエクスペリエンスの改善と、完全に後方互換な新しいAPIを使って 新しいメッセージ機能を実装するのに役立つ。

New ways to build beautiful apps

Full-screen Immersive mode

コンテンツの表示とタッチイベントを捕まえる為に、デバイススクリーンの全てのピクセルを 利用できるようになった。

Android 4.4では、ステータスバーやナビゲーションバーのようなシステムUIを隠して、 スマホやタブレットのスクリーンの隅から隅までを利用した、没入型のフルスクリーンに対応した。

これは写真や動画、地図や本、そしてゲームといった、視覚的なコンテンツに適している。

新しいモードにおいては、ユーザーがアプリやゲームを操作している間でさえもシステムUIが隠され、 システムによって専有される領域さえも含んだ、スクリーン上のどこからでもタッチイベントを 捕まえられる。

これは、アプリやゲームにより広くリッチで没入型のUIを作る方法を与え、視覚的に他に注意が削がれる ことを軽減する。

ユーザが常にフルスクリーン没入モードから簡単に一貫性のある方法でシステムUIにアクセスできるように するために、Android4.4は 没入モードで上端または下端からスワイプすることでシステムUIを再表示する 新しいジェスチャをサポートしている。

バーの領域の外をタッチするか数秒待てば、バーが自動的に消えて没入モードに戻る。 一貫したユーザーエクスペリエンスを保つ為に、新しいジェスチャーは、ステータスバーを隠すための 以前のメソッドでも動作する。

Transitions framework for animating scenes

ほとんどのアプリは、個々のアクションを表現するためいくつかの主要なUIの状態のフローを構築している。

各場面で状態と使用可能なアクションを通して進捗をユーザーに示す為に、多くのアプリが アニメーションを利用している。

アプリで高品質なアニメーションを作りやすくするために、Android4.4では新しいトランジション フレームワークを導入している。

トランジションフレームワークでは、シーンや階層化されたViewや移動を、ユーザーが それらを開始/終了する際に、どのようにアニメーションや遷移させるのかを定義できる。

レイアウトのboundsやvisibilityといった特定のプロパティに基づいてアニメーションを行う為の、 いくつかの定義済みのトランジションタイプの利用が可能である。 シーン変更時に、自動的にViewをフェード、移動、サイズ変更を行う為のauto-transitionというものも 定義されている。 加えて、アプリに対して重要なプロパティをアニメーションするためのカスタムトランジションを定義し、 必要であれば、独自のアニメーションスタイルを差し込むことも可能である。

トランジションフレームワークによって、シーンをせずにその場でUIの変更をアニメーションすることが できる。たとえば、View階層に一連の変更を行う際に、TransitionManagerに対して自動的に これらの変更を遅延実行させることも可能である。

一度トランジションを設定したら、アプリから呼び出すのは簡単である。たとえば、View階層の値を変更し、 指定した変更のアニメーションを次フレームから自動的にアニメーションするトランジションを始める為に、 ひとつのメソッドを呼ぶことができる。

アプリケーションの中で、特定のシーンとシーンの間のトランジションをカスタムにコントロールするために、 TransitionManagerを利用できる。TransitionManagerは、特定のシーン間の関係を定義が可能でる。

Translucent system UI styling

コンテンツをもっと目立たせるため、ステータスバーとナビゲーションバーの両方を含む トランスルーセントシステムUIを要求するために、新しいウィンドウスタイルとテーマを利用可能である。

ナビゲーションバーのボタンやステータスバーの情報の視認性を確保するため、システムバーの背景は 微かにグラデーションをさせている。典型的な例としては、壁紙アプリである。

Enhanced notification access

通知リスナーサービスは、通知生成のAPIによって作られた通知のより詳細な情報を示すものである。

リスナーサービスは、通知アクション並びに新しい拡張フィールド(テキスト、アイコン、画像、 進捗、クロノメーター、等々)に対し、通知の除去情報を抽出し、他の方法で情報を 提示するためのアクセスが可能である。

Chromium WebView

Android4.4には、Chromiumをベースとする、 完全に新しいWebViewの実装が含まれている。 新しいChromiumのWebView使うと、webベースのコンテンツを作り表示するための、 最新規格への準拠とパフォーマンス、互換性が手に入る。

Chromium WebViewは、HTML5, CSS3, JavaScriptを広くサポートしており、 Android版のChrome30で利用可能なHTML5のほとんどの機能が利用可能である。 また、劇的にパフォーマンスの改善された、更新版のJavaScript Engine(V8)も提供される。

加えて、新しいChromium WebViewは、Chrome DevToolsを使ったリモートデバッグをサポートしている。 例えば、開発用マシン上でChrome DevToolsを使って、モバイル端末上のWebViewのコンテンツを ライブで検査、デバッグ、分析ができる。

新しいChromium WebViewは、Android 4.4とそれ以上が動く全ての互換性のある端末に含まれる。 既存のアプリやコンテンツに対して、最小の修正で新しいWebViewをすぐに活用できる。 ほとんどのケースで、コンテンツを新しい実装にシームレスに移行が可能である。

New media capabilities

Screen recording

Androidデバイスから、直接アプリの高品質なビデオを簡単に作成可能である。 Anddroid4.4では画面の録画機能が追加され、USBによって開発環境に接続された端末の 録画開始/終了を行うユーティリティが提供されている。 これは、アプリのウォークスルーやチュートリアル、テスト用資料、マーケティング用の ビデオ等を作るのにとてもよい新しい方法である。

画面録画ユーティリティで、端末の画面の内容を動画として保存し、MP4形式で端末内に保存できる。 動画のアスペクト比はディスプレイのものが保たれ、端末がサポートしている任意の解像度と ビットレートでの出力が可能である。 デフォルトでは、動画の解像度は現在の端末の向きでディスプレイと同じか最も近い物となる。 録画が終わったら、端末から動画をダイレクトに共有したり、後で使うためにホストマシンへMP4ファイル として取り出せる。

アプリ内で、ScreenRecordingによって記録されたくないビデオや保護されたコンテンツを再生する場合、 セキュアなコンテンツの印をつけるためにSurfaceViewのsetSecure()メソッドが使える。

Android SDKに含まれるadbツールの"adb shell screenrecord"を使って、Screen Recording機能に アクセスが可能である。Android StudioのDDMSパネルには、Screen Recordingを起動するボタンもある。

Resolution switching through adaptive playback

Android 4.4では Android Media Frameworkで最適再生(adaptive playback)が 正式にサポートされている。 Adaptive Playbackは、再生中に解像度をシームレスに変化させることが可能な、MPEG-DASHや他の フォーマットに対するオプション機能である。 クライアントは新しい解像度のビデオの入力フレームをデコーダーに供給を開始し、 出力バッファの解像度を自動的に大きなギャップ無しに変化させることが可能である。

Android 4.4での解像度の変更は、メディア系のアプリに対して、よりよい動画再生の環境を提供する。 アプリは、Android 4.4が提供している新しいAPIを使って、AdaptivePlaybackのAPIが存在し、 解像度変更の機能が実装されているかどうかどうかのチェックが可能である。

Common Encryption for DASH

Androidは、保護コンテンツを管理するための標準的なマルチプラットフォームDRMのスキームを 提供するために、 MPEG-DASHの共通暗号方式(CENC)をサポートしている。 アプリは、DASHをサポートするために、AndroidDRMフレームワークとプラットフォームAPIを 使ってCENCを活用可能である。

HTTP Live Streaming

Android 4.4は、プラットフォームのHTTP Live Streaming(HLS)を、プロトコルバージョン4の規格の バージョン7のスーパーセットに対応したものに更新している。 詳細はIETF draft

Audio Tunneling to DSP

高性能で省電力なオーディオ足性のために、Android 4.4はデバイスチップセットの デジタルシグナルプロセッサ(DSP)にAudio Tunnelingのサポートをプラットフォームへ追加している。 トンネリングによって、アプリケーションプロセッサの駆動とバッテリーの消費を抑えるために、 オーディオのデコードと出力用のエフェクトはDSPで処理される。

Audio Tunnelingによって、スクリーンoffでヘッドホンで音楽を聞くような場合に、 劇的にバッテリー消費を改善できる。 たとえば、Audiot Tunnelingを有効にしたNexus 5で、ネットワークオフで最大60時間、 無効時に比べて50%以上の増加となる。

Audio Tunnelingがサポートされた端末では、メディアアプリは既存のコードに手を加える事無く それを利用出来る。 端末上でTunnelingが有効なときは、音楽の再生の最適化のためにシステムによって利用される。

Audio Tunnelingはハードウエアによってサポートされている必要がある。 現在、Autio Tunneligは Nexus 5で利用可能である。早期により多くの端末で有効にするために、 メーカーと協力して動いている。

Audio monitoring

端末上で再生中のオーディオのピークとRMSレベルを得るために、Visualizerの機能の中の 新しいモニタツールが利用可能である。例えば、メディアプレーヤーで、music visualizerや 再生メーターを実装するためにこの機能を利用できる。

Loudness enhancer

メディアを再生するアプリでは、新しいLoudnessEnhancerの機能を使って、会話の大きさを増加させる ことができる。具体的には、会話用に調整された時間定数で圧縮回路として機能させる。

Audio timestamps for improved AV sync

Audio Frameworkは、音声と動画の同期をよりよくするために、オーディオ出力の HAL(Hardware Abstraction Layer)からアプリケーションへ現在のタイムスタンプを報告させられる。 Audioタイムスタンプは、指定されたオーディオフレームが出現する(した)時に、 ユーザーにデバイスを停止するよう決められるようにする。 より正確にビデオとオーディを同期させるために、タイムスタンプ情報を使用可能である。

Wi-Fi CERTIFIED Miracast™

Android 4.4の端末は、Miracast互換機として、Wi-Fi AllianceのWi-Fi Display規格の認証を 受けることが可能である。 テストを支援する為に、新しいWireless Display Developer Optionは、Wireless Display 認証のための 高度なコントロールと設定を公開している。 Setting > Developer Optionss > Wireless Display Certification オプションへの アクセスが可能。Nexus 5は、 Miracast認証の Wireless Display 端末である。

RenderScript Compute

Ongoing performance improvements

アプリでRenderScriptを使うときに、RenderScriptのランタイム自身の継続的な パフォーマンスチューニングによって、リコンパイルなしにその恩恵をうける。 このチャートの右側は 二つの人気のチップセットでAndroid 4.4のパフォーマンスの向上を示す。

GPU acceleration

サポートされている端末上でRenderScriptが使用する全てのアプリで、コードの修正やリコンパイルを 行う事無く、GPUアクセラレーションの恩恵を受ける。 最初にNexus 10でRenderScriptのGPUアクセラレーションがデビューしてから、様々な他の ハードメーカーもサポートを追加してきました。

現在、Android 4.4でのGPUアクセラレーションは、Nexus5, Nexus4, Nexus7(2013年製), Nexus10で 利用可能であり、早期により多くの端末で有効にするために、メーカーと協力して動いている。

RenderScript in the Android NDK

ネイティブコードからも直接RenderScriptを活用可能である。NDKの新しいC++ の APでIは、 スクリプトの組み込み関数やカスタムカーネルその他を含むフレームワークAPIを通してRenderScriptの 機能にアクセスできる。

巨大でパフォーマンスが集中するタスクをネイティブコード内で処理する場合、これらのタスクで RenderScriptを使って、ネイティブコードと統合することもできる。 RenderScriptは、自動的にマルチコアのCPUやGPU、その他のプロセッサの自動的なサポートによって、 デバイスの広範囲で優れたパフォーマンスを発揮する。

NDKでRenderScriptを利用するアプリを作る場合、RenderScriptサポートライブラリで利用可能な APIだけにすることで、Android 2.2以降の端末に対して配布が可能となる。

Graphics

GLES2.0 SurfaceFlinger

Android 4.4は FurfaceFlingerを OpenGL ES 1.0から 2.0へとアップグレードしている。

New Hardware Composer support for virtual displays

Android Hardware Composerの最新バージョンである HWComposer 1.3は、プライマリ、 外部(例えばHDMI)に加えて、一つの仮想ディスプレイのハードウェアの構成をサポートし、 OpenGL ESの運用性を改善した。

New Types of Connectivity

New Bluetooth profiles

Android 4.4は、広範囲の省電力とメディア応答性をアプリにサポートさせるために、二つの新しい Bluetoothプロファイルを追加した。 Bluetooth HID over GATT(HOGP)は、マウスやジョイスティック、キーボードのような 低消費電力な周辺機器との低レイテンシなリンクをアプリに提供する。

Bluetooth MAPによって、アプリは、例えばハンズフリー用の車載端末や他のモバイル端末といった 近くにある端末とのメッセージの交換が可能となる。 Bluetooth AVRCP 1.3の拡張機能によって、ユーザーが自分のデバイスからシステムの音量を セットすることもできる。

HOGPやMAP、そしてAVRCPをサポートするプラットフォームは、Android 4.2でGoogleBroadcomが 導入したBluedroid Bluetoothスタック上に構築されている。 これらの機能は、Nexusデバイスや、他のBluetooth機能の互換性のあるAndroid端末で利用可能である。

IR Blasters

Android 4.4は、プラットフォームに赤外線通信機能のサポートを導入したおり、新しいAPIとシステム サービスを利用するアプリが作成可能である。

新しいAPIの使用によって、近くのTVやチューナー、スイッチ、そして他の電化製品のコントロールを リモートで行うアプリこ作成が可能となる。 APIによって、アプリから電話やタブレットが赤外線発光部を持つかどうかを調べ、その搬送波の周波数を 問い合わせ、赤外線信号の送信が可能となる。

Android 4.4以降の動作するAndroid端末では標準のAPIとなるため、アプリ側では Custom Integration Codeを書かずに幅広いベンダーをカバーすることが可能となる。

Wi-Fi TDLS support

Wi-Fi Tunneled Direct Link Setup(TDLS)のサポートによって、 Android 4.4は、同一のWi-Fiネットワーク上のデバイスの間でのより高速な ストリーミングやデータ転送を行う為のシームレスな方法を導入している。

Accessibility

System-wide settings for closed captioning

Android 4.4は、字幕に関するシステム全体の設定を追加して、アプリによりよいAccessibilityを 追加している。 ユーザーは、"設定 > ユーザー補助 > 字幕" で、字幕を表示するかどうかや言語や、 文字サイズ、色等のスタイルの設定が可能である。

動画を使用するアプリでは、ユーザーの字幕設定にアクセスして、ユーザーの嗜好を満たすように 表示を調整可能となった。 新しいCaption Manger APIは、ユーザーの字幕設定の確認と監視が可能であり、設定と同じ言語、 文字サイズ、テキストスタイルを提供する。 テキストスタイルには、前景食と背景色、エッジの設定と書体が含まれる。

加えて、VideoViewを使用するアプリでは、レンダリング時にビデオストリームと共に字幕用の ストリームを渡すための新しいAPIの利用が可能である。ユーザーのシステム設定 に基づいて、システムは自動的にビデオフレームの上に字幕を表示する。 現在、VideoViewはWebVTTフォーマットでのみ、字幕の自動表示に対応している。

字幕を表示する全てのアプリは、システムの字幕設定を確認し、その好みに可能な限り近い字幕を 表示するように心掛けるべきである。

設定の組み合わせがどのように見えるべきかをより理解するために、他の言語やサイズ、スタイルは、 設定アプリのプレビューで確認が可能である。

Enhanced Accessibility APIs

Android 4.4は、構造と意味の説明と、画面上の要素の観測をより正確にサポートするために、 Accessibility APIを拡張している。画面上の要素に関するより詳細な情報を伴った Accessibilityサービスを提供する事で、アクセス可能なフィードバックの質を改善することが可能である。

Accessibility Nodeでは、開発者は nodeがポップアップかどうかを判断し、その入力タイプの 取得が可能である。 また、リストやテーブルといったGridのような情報を含むノードで動作させるために、新しいAPIを 使用することもできる。例えば、サポートするアクションやコレクション情報、ライブリージョンモード等を 指定可能である。

新しいAccessibilityイベントを使うと、開発者がWindow内で起きた変化をより詳しくフォローし、 端末上でのタッチの変化を取得することが可能となる。

Support for international Users

Drawable mirroring for RTL locales

アプリがRTL文字圏のユーザーをターゲットとしているのならば、ユーザーの言語設定がRTLの言語を含んで いる時に、auto-mirroredなDrawableを宣言するために新しいAPIが使用可能である。

auto-mirroredとしてDrawableを宣言すれば、アプリのassetsの重複を防いでAPKのサイズを 減らせる。 LTRとRTLの両方で使用可能なdrawableを持つ場合、auto-mirroredとしてデフォルトバージョンを 定義し、その後RTLリソースからそれらのDrawableを省略することが可能である。

アプリケーションでは、ビットマップ、ナインパッチ、レイヤ、ステートリスト、 そしてその他、様々なタイプのauto-mirroredのDrawableを定義可能である。また、リソースファイルでも 新しい属性を使用することでauto-mirroredのdrawableを定義できる。

Force RTL Layout

レイアウトのテストとデバッグをより簡単にするために、Androidは、全てのアプリでRTL レイアウト強制するための開発者オプション含んでいる。

強制RTLレイアウトオプションは、現在の言語のまま、全てのロケールとテキスト表示をRTLレイアウトに 変更する。これは、RTL言語でアプリを表示せずに、アプリでレイアウトのバグを発見するのに役立つ。 "設定 > 開発者オプション > RTLレイアウト方向を使用"で、RTLにアクセス可能である。

Security enhancements

SELinux (enforcing mode)

Android 4.4は、SELinuxの設定を"permissive"から"enforcing"へと変更した。 これは、"enforcing"ポリシーを持つSELinuxドメイン内の潜在的なポリシー違反がブロックされる ことを意味する。

Improved cryptographic algorithms

Androidは、二つのより強力な暗号化アルゴリズムのサボートを加えて、セキュリティーを さらに向上させている。

Elliptic Curve Digital Signature Algorithm (ECDSA)のサポートが、アプリケーションや データ接続の署名で用いられるデジタル署名のセキュリティ向上のために、KeyStoreプロパイダへ 追加されている。

Script Key Derivation Function は、ディスク暗号化の際に用いられる暗号鍵を保護するために 実装されている。

Other enhancements

マルチユーザー端末においては、VPNはユーザー毎に適用される。これにより、端末上のあるユーザーが、 他のユーザーに影響を与えずに、VPNによって全てのネットワークトラフィックのルート設定を 許可することが可能となる。 また、AndroidはFORTIFY_SOURCE level 2をサポートし、全てのコードがこれらのprotectionで コンパイルされている。FORTIFY_SOURCEは、clangで動作するように強化されてきた。

Tools for analyzing memory use

Procstats

Procstatsと呼ばれる新しいツールは、あなたのアプリだけでなく、システム上で動いている 他のアプリやサービスによって使用されるメモリリソースの分析に役立つ。

Procstatsは、アプリの経時的な稼働状況と、どれくらい効率的に使用しているかを 知る手助けとなるデータを提供する。 これは、バックグラウンドで動くサービスを開始するアプリには最も重要。なぜなら、 それらが動作中にどのくらい長く動いていて、どのくらいRAMを使用しているかを モニターできるからである。 また、Procstatsは、アプリの全体的なメモリプロファイルを決定するために、 フォアグラウンドアプリの経時的なメモリ使用データの収集も行う。

Procstatsは、あながのアプリが開始したバックグラウンドサービスを識別するのに役立つ。 これらのサービスがどの程度の期間動き続け、どの位RAMを使用するかを記録できる。 また、Procstatsはあなたのアプリがフォアグラウンドにいる間、全体的なメモリプロファイルを 決定するための経時的なメモリ使用状況を記録する。

Procstatsは、SDKに含まれるadbツールから"adb shell dumpsys procstats"でアクセス可能である。 また、デバイスでの分析は、以下の開発者向けオプションの"プロセスの統計情報"を見る事。

On-device memory status and profiling

Android 4.4は、アプリがデバイスやエミュレータで動いている間のメモリプロファイルを、 簡単に分析するための新しい開発者向けオプションを用意している。 それは、特に少ないRAMの端末での動作とメモリ使用状況を確認するのに有用である。 "設定 > 開発者向けオプション > プロセスの統計情報"でアクセスが可能。

統計情報オプションは、新しいProcstatsサービスによって収集されたデータに基づいて、 様々な高レベルのアプリのメモリ使用状況を表示する。 メインスクリーンでは、システムメモリの状態の概要を見る事ができる。 緑は、低メモリでの稼働時間、黄色は適度、赤は高(クリティカル)メモリでの稼働時間を表す

その下は、システム上の各アプリのメモリ付加の概要であり、各アプリは、青いバーで そのプロセスのメモリ負荷(稼働時間 x avg_pss)と、バックグラウンドでの稼働時間の割合が表示される。 フォアグラウンド、バックグラウンド、キャッシュのプロセスをフィルタリングしたり、システムプロセスを 含めたり外したりが可能である。 また、データ収集の期間を3,6,12,24時間と変更と、USSメモリを含めたり外したりも可能。

特定のアプリのメモリの状況を詳しく見るにはアプリをタップする。 アプリが消費したメモリの概要と実行時間の割合が表示される。 また、データ収集期間中の平均と最大のメモリ使用量と、稼働させたサービスも表示される。

アプリが使用した統計情報のデータの分析は、問題を明らかにしアプリの最適化の 可能性を示す事となる。 例えば、アプリが予定よりも長時間動いたり、メモリを使いすぎている場合は、 コード内にバグがあるかもしれない。特に低メモリの端末での動作は、 パフォーマンスの改善を決意させるだろう。