はじめに

 前回に引き続き、Android 4.4 の新機能の紹介を行います。

 今回の内容は、追加されたライブラリの紹介やデバッグを便利にするツールなどといったように、前回と比べてより技術者よりのコアな話になると思います。

 それでは早速見て行きましょう。   


UI 関係の変更点

 今回も、まずはUIへの変更についてまとめたいと思います。前回の内容で大体の変更点は上げたのですが、ここではより技術者に密接に関わってくる変更についてまとめます。

アニメーションフレームワークを追加

 アプリの中で、高品質な画面の遷移アニメーションを簡単に実装できるフレームワークが追加されました。このフレームワークでは、いくつかのアニメーションパターンがすでに用意されています。その他にも、自分でカスタムしてアニメーションを作ることもできます。

 このフレームワークの追加は、「画面が切り替わるときにはアニメーションをしてほしい」という google の意図が伝わってくるような気がします。

SurfaceFlinger が OpenGL ES 2.0 にアップグレード

 SurfaceFlinger が使用する OpenGL ES が、1.0 から 2.0 にアップグレードされました。これによりパフォーマンスの向上や、カラーキャリブレーションの改善による、より高度な特殊効果のサポートなどを得ることができます。

 つまり、SurfaceViewのパフォーマンスの向上を期待することができます。


各種ユーティリティの変更点

 ここに関しても前回で少し触れましたが、今回は技術者にとって更に便利になり得るユーティリティ関係の変更についてまとめようと思います。

画面を録画

 Android 4.4 では、画面のスクリーンショットだけではなく録画をすることができるようになりました。これにより、チュートリアルを動画として作成することができ、ユーザもアプリの使い方に困ることはなくなるのではないでしょうか。

 USB で接続された Android SDK 上でデバイスの録画を開始・停止させる Screen recording utirity を提供しています。

 Android SDK に含まれている adb シェルの scerrnrecord を使用する、もしくは Android Studio のDDMS パネルによってこの Screen recording utirity を実行することができます。

Storage Access Framework が追加

 Strage Access Frameworkは、アプリ間でのファイルのやりとりを助ける開発ライブラリです。ファイルを選択するためのピッカーと呼ばれるUIがシステムから提供されます。

ストレージ

 ストレージを提供するアプリでは、DocumentsProvider と呼ばれる ContentProvider を拡張した仕組みを用意します。そうしておくだけで、ユーザはピッカーを使用し、全ての DocumentsProvider を横断的に使用することができます。

 ストレージは、Google Drive や、Dropbox と言ったオンラインストレージサービスから、SDカードやUSB接続と言った物理ストレージのプロバイダーを作成することもできます。

 将来的に、オンラインストレージサービスが DocumentProvider に対応すれば、Storage Access Framework に対応したアプリを作成することで、オンラインストレージサービスを保存先として選択することもできるようになるでしょう。

Google Cloud Print API が追加

 Kitkat では、Wi-Fi などから検出したプリンタと連携して印刷をすることができる Google Cloud Print API が追加されました。印刷機能があるアプリでは、プリンターの発見、用紙サイズの変更、印刷するページの指定などを行い、様々なドキュメントや画像ファイルを印刷することができます。

 API としては、アプリの印刷リクエストと、印刷サービスの間を取り扱うPrintManager を提供します。
このPrint Manager は印刷のために共有サービスとシステムUIを提供していて、印刷を行うあらゆるアプリに一環したコントロールを提供します。

Google Cloud Print

 今回のKitkat の設計思想でもある幅広い互換性のために、Android は主要のフォーマットとしてPDF を使用します。そのためアプリでは、コンテンツから正しくページ付けされたPDFを作る必要があります。
これは、Printing API のネイティブのコードや、WebView の helper class で標準的な Android の drawing API を使用するなどの方法で、簡単に PDF ファイルを作ることもできます。

改善された通知アクセス

 Notification listener service は、従来の Notification Builder を使って作成されたnotificationより、詳細な情報を見ることができます。そこには、テキストはもちろんアイコンや、写真、進捗やクロノメーター 等を設定することができます。そのために新しい extras field というフィールドが追加されています。


センサ 関係

 Android 端末には様々なセンサが搭載されています。これに関しても変更や追加が行われていますのでまとめてみたいと思います。

万歩計機能の追加

 Android 4.4 から、新しく TYPE_STEP_DETECTOR と TYPE_STEP_COUNTER というセンサーをサポートする API が追加されました。これにより、開発者は比較的簡単に万歩計のようなアプリを作成することが出来るようになります。

 この機能を利用して、ライフログを取るアプリケーションの開発が盛り上がるのではないでしょうか。

赤外線センサが利用可能に

 Android 4.4 には組み込みの赤外線センサをサポートする API が新しく追加されています。 これを使うことで、TV のリモコンや、照明のon/off 等を行うことが出来るアプリを開発することができます。

 API は Android 4.4 以上で動作する Android デバイスで一般的な形になっているため、端末によって処理を分けるために、独自のコードを記述する必要がありません。

Bluetooth

Bluetooth に以下の機能が追加されました。

  • HID over GATT 対応
     マウス、キーボードの省電力接続用です。

  • AVRCP 1.3への拡張
     音楽再生を制御するためのプロファイルです。

  • Message Access Profile (MAP)をサポート
    デバイス間でメッセージを送るためのプロファイルらしいので、Bluetooth 機器からメッセージをAndroid にとばすことが出来ると思われます。これを利用することで、iOS 7 で追加された iBeacon のような物を作成することが出来るかもしれません。
    Bluetooth 対応車のハンズフリー操作等に使用することが出来るようです。

NFC 対応の強化

 NFC 対応の強化としてホストカードエミュレーションと言うものがあります。これは、Android アプリが、非接触ICカードのふりをすることが出来るという機能になっています。実際にこの機能を試すにはAndroid 4.4の端末が2台必要になります。その際、片方はホストカードエミュレーション用の端末として使用し、もう片方にはそれを読み取る用のアプリを作成しリーダーとして使用します。

 この読み取り用のアプリのコードを書こうとするならば、ICカードの知識が必要不可欠になってきます。更にはリーダーとなるアプリもしくはサービスとの連携が前提となる機能でもあるので、NFC ホストカードエミュレーションを実現するのは敷居が高いかもしれません。

 また、せっかくの非接触ICカードのホストエミュレーションなので、きっちりと UX について考える必要もでてきます。その場合、タッチ動作の部分で UX が落ちるというのなら、別な方法による実装を考えたほうが良いでしょう。


メモリー解析関係の変更

 アプリがどのくらいメモリを使用しているのかという情報は、開発者にとって無くてはならないものです。今回のアップデートでそのメモリを解析するツールが拡張されています。

Procstats

 このツールは、システム上で使用されているアプリのメモリーリソースやその他のアプリ、実行中のサービスのリソース使用状況の解析を補助するものです。

 Procstats はアプリが時間とともにどのように動いているか追跡し、どうやって効率よく動かすかを調べるために実行時間とメモリー使用量を提供してくれます。これはバックグラウンドでサービスを実行するアプリにとってとても重要な情報になってきます。また、このツールはフォアグラウンドで動作するアプリケーションのためにも、アプリの全体的なメモリープロファイルの時系列データを集めます。

デバイス上でのメモリー状況とプロファイリング

 Android 4.4 にはメモリープロファイルを簡単に解析できる新しい開発者オプションが含まれています。それはどのアプリがどのようにメモリーを使用しているのかということを確認するために利用されます。

 この統計情報オプションは、procstats を使用して集めたデータに基づき、アプリのメモリー使用量について多種多様でハイレベルな測定結果を表示させることができます。

メモリ解析ツール


その他

新ジェスチャ、「ダブルタップからのドラッグ」

 ダブルタップした後にドラッグをすることで全く新しいジェスチャとして認識されるようになりました。このジェスチャは Google Map で、地図を拡大・縮小するために使用されています。これは、指を二本使ったピンチイン/アウトと同じ動作になっています。このジェスチャを、片手でスマートフォンを操作することが多いアプリに実装すると効果的なのではないでしょうか。

 せっかく新しいジェスチャを使用できるようになったので、みなさんもこのジェスチャの使い道を考えてみてはいかがでしょうか。

Render Script NDK が追加

 Render Script がネイティブコードから直接触れるようになりました。

 Render Script を利用することで、CPU の違いを気にする必要が無いという利点が有りました。しかし、NDK をビルドするときには、CPU によって違うコードを書く必要が有ります。つまり、ネイティブコードからRender Script を使用する利点というのは何になるのでしょうか。

 残念ながら、どのようにこの機能を利用するのかについての答えを出すことはできませんでした。計算の高速化と、描画の高速化の担当を分けるときや、NDK の中で何度も使用するコードを汎用化させる事などに使用する事になるのかもしれません。

WebView が WebKit から Chromium に変更

 Android 4.4 から WebView は、今までの Webkit ベースから一新して、Chromium ベースの WebView となりました。この WebView を使用することで、HTML5、CSS3 などに対応します。また、JavaScript に関してはエンジンを更新し、パフォーマンスを飛躍的に向上しています。

 更に、ChromeDevTools を利用することで、WebView のコンテンツのデバッグをすることが出来るようになります。

Quickoffice アプリに最適化

 Android 4.4 は QuickOffice に最適化されています。これにより、いつでもどこでも資料の修正を行うことができます。

 更に 4.4 から追加された印刷用のフレームワークとも連携しているので、スマフォで編集してそのまま印刷ということも可能になります。

新たなVMの追加

 今までの Dalvik VM では JIT コンパイラを利用して実行する方式を取っていました。この方法だとハードウェアや CPU アーキテクチャに依存せず、様々な端末で利用できるという Android にとってかなり重要なメリットが有りました。しかし、アプリの動作中にコンパイル処理が発生するため CPU に対して負荷がかかるというデメリットもありました。

 新しいVM、その名も ART(Android RunTime) では、Ahead-Of-Time(AOT) というコンパイラを利用してアプリを実行する方式が採用されています。この方式では、アプリをインストールするタイミングでコンパイルが行われるため、起動する度にコンパイルする従来の方式よりも、アプリの実行性能が向上するとされています。

 現在ではまだ開発中の技術になっているため、開発者オプションで切り替えることで、このVMを使用することが出来るようになっています。Android の開発者にこのVMを使用してもらい、そのフィードバックをもらうために公開したということになるようです。

 あくまでも開発中の技術になるため、アプリによっては起動しなかったり Dalvic VM のほうが速かったりということもあるようですが、正式に発表されるようになれば、Android のアプリ実行速度は格段に速くなるのでは無いでしょうか。


終わりに

 さて、今回の特集はいかがだったでしょうか。前回から2回に分けなくてはならないほど、本当にたくさんの変更がこの Kitkat へのOSアップデートで行われていました。    次回は、このたくさん追加された新機能の中から幾つかピックアップし、より詳細な使い方や応用例を紹介したいと思っています。    それでは次回もお楽しみに!!