Android 4.3
Android 4.3 へようこそ。Jelly Bean がさらに進化を遂げました。
Android 4.3 では、ユーザーとデベロッパー向けのパフォーマンス最適化機能や便利な新機能が導入されています。このドキュメントでは、デベロッパー向けの新機能について簡単に紹介します。
デベロッパー向けの新しい API について詳しくは、Android 4.3 API のドキュメントをご覧ください。
Jelly Bean のユーザー向けの新機能について詳しくは、www.android.com をご覧ください。
より速く、よりスムーズに、よりレスポンシブに
Android 4.3 は、Jelly Bean にすでに含まれているパフォーマンス向上機能(vsync タイミング、トリプル バッファリング、タッチ レイテンシの短縮、CPU 入力ブースト、ハードウェア アクセラレーテッド 2D レンダリング)を基盤としています。また、Android をさらに高速化する新しい最適化機能が追加されています。
グラフィック パフォーマンスの向上のために、ハードウェア アクセラレーテッド 2D レンダラによって描画コマンドのストリームが最適化されました。これにより、描画処理の再編成と統合が行われ、描画コマンドのストリームがより効率的な GPU 形式になりました。また、このレンダラはマルチスレッド処理に対応しており、複数の CPU コアにまたがってマルチスレッドを使用して特定のタスクを実行できます。
Android 4.3 では図形とテキストのレンダリングも改善されています。円や角丸長方形などの図形が、より高品質かつ効率的にレンダリングされるようになりました。テキストの最適化に関しては、複数のフォントまたは複雑なグリフセット(CJK)の使用時のパフォーマンス向上、テキストをサイズ調整する場合のレンダリング品質の向上、ドロップ シャドウのレンダリングの高速化などが行われています。
ウィンドウ バッファの割り当てが改善されたことで、アプリに対する画像バッファの割り当てが高速化され、ウィンドウの作成時にレンダリングを開始するまでの時間が短縮されました。
最高のパフォーマンスのグラフィックを実現するため、Android 4.3 では OpenGL ES 3.0 のサポートが導入され、フレームワークとネイティブ API の両方からアプリがアクセスできるようになりました。サポートされているデバイスでは、ハードウェア アクセラレーション 2D レンダリング エンジンが OpenGL ES 3.0 を活用してテクスチャ管理を最適化し、グラデーション レンダリングの忠実度を高めます。
高性能グラフィックに適した OpenGL ES 3.0
Android 4.3 では、Khronos OpenGL ES 3.0 に対するプラットフォーム サポートが導入されています。サポート対象のデバイスでは、ゲームやその他のアプリで高性能の 2D および 3D グラフィック機能を使用できます。Android Native Development Kit(NDK)を通じてフレームワーク API またはネイティブ API バインディングを使用すると、OpenGL ES 3.0 と関連する EGL 拡張機能を利用できます。
OpenGL ES 3.0 で提供される主な新機能には、高度な視覚効果のアクセラレーション、標準機能としての高品質の ETC2/EAC テクスチャ圧縮、整数と 32 ビットの浮動小数点数をサポートする GLSL ES シェーディング言語の新しいバージョン、高度なテクスチャ レンダリング、標準化されたテクスチャサイズとレンダリング バッファ形式が含まれます。
OpenGL ES 3.0 API を使用すると、互換性のある各種の Android デバイスで実行可能な、きわめて複雑かつ効率的なグラフィックを作成できます。また、それらすべてのデバイスで 1 つの標準的なテクスチャ圧縮形式をサポートできます。
OpenGL ES 3.0 は、基盤となるグラフィック ハードウェアに依存するオプション機能です。すでに、Nexus 7(2013)、Nexus 4、Nexus 10 の各デバイスでサポートされています。
Bluetooth 接続の強化
Bluetooth Smart 対応のデバイスおよびセンサーとの接続
Bluetooth Smart テクノロジーが組み込まれた最新世代かつ低消費電力の小型デバイスおよびセンサーと連携するアプリを設計、構築できるようになりました。
Android 4.3 では、その中心的な役割として Bluetooth Smart Ready に対する組み込みプラットフォームのサポートが導入されています。アプリで標準の API セットを使用すると、近くのデバイスの検出、GATT サービスの照会、特性の読み取りおよび書き込みを行うことができます。
アプリで新しい API を使用すると、興味のあるデバイスやサービスを効率的にスキャンできます。デバイスごとに UUID でサポート対象の GATT サービスを確認し、デバイス ID と信号強度によって接続を管理できます。デバイスでホストされている GATT サーバーに接続して、特性の読み取りや書き込みを行ったり、特性が変化したときに通知を受け取るリスナーを登録したりすることも可能です。
GATT プロファイルに対するサポートを実装できます。必要に応じて、標準特性の読み取りや書き込みを行ったり、カスタム特性に対するサポートを追加したりできます。アプリはクライアントまたはサーバーとして機能し、どちらのモードでもデータを送受信できます。API は汎用的であるため、近接タグ、スマートウォッチ、フィットネス測定器、ゲーム コントローラ、リモコン、健康器具などのさまざまなデバイスの操作をサポートできます。
Bluetooth Smart Ready は Nexus 7(2013)と Nexus 4 の各デバイスですでにサポートされており、サポート対象の Android 互換デバイスは今後ますます増える見込みです。
AVRCP 1.3 プロファイル
Android 4.3 では Bluetooth AVRCP 1.3 に対する組み込みサポートが追加されているため、アプリでリモートのストリーミング メディア デバイスの高度な操作をサポートできます。メディア プレーヤーなどのアプリでは、Android 4.0 で導入されたリモコン クライアント API を介して AVRCP 1.3 を利用できます。アプリでは、Bluetooth で接続されているリモート デバイスで再生コントロールを公開できるだけでなく、メタデータ(曲名、作曲者、その他のタイプのメディア メタデータなど)の送信も行えるようになりました。
AVRCP 1.3 に対するプラットフォーム サポートは、Android 4.2 で Google と Broadcom によって導入された Bluedroid Bluetooth スタックが基盤となっています。サポートは、Nexus デバイスや、A2DP/AVRCP 機能を備えているその他の Android 互換デバイスですぐに利用できます。
制限付きプロファイルのサポート
Android 4.3 では、新たに導入された制限付きプロファイルによってタブレットのマルチユーザー機能が強化されています。制限付きプロファイルを使用すると、1 台のデバイスでユーザーと機能を管理できます。タブレットの所有者は、各ユーザー用の独立した環境をすばやく設定でき、その環境内で利用できるアプリでよりきめ細かな制限を管理することができます。制限付きプロファイルは、友だちや家族、ゲストユーザー、キオスク、POS デバイスなどに適しています。
各制限付きプロファイルには隔離された安全なスペースが提供され、専用のローカル ストレージ、ホーム画面、ウィジェット、設定を使用できます。プロファイルはユーザーとは異なり、タブレットの所有者がインストールしたアプリとシステム アカウントに基づいて、所有者の環境から作成されます。所有者は、新しいプロファイルで有効にするインストール済みのアプリや、デフォルトで無効にする所有者のアカウントへのアクセスを管理できます。
ログインや設定などのために所有者のアカウントにアクセスする必要があるアプリは、マニフェスト属性を宣言することによって有効にすることができます。所有者は、プロファイルの設定でそれらのアプリの確認と管理を行うことができます。
デベロッパーは制限付きプロファイルを通じて、ユーザーにもたらす価値を高め、ユーザーをよりきめ細かく管理するための新たな方法を提供できます。また、プロファイルの設定にアプリの制限(アプリでサポートされるコンテンツや機能の制限)を実装し、それらをタブレットの所有者にアドバタイズすることができます。
アプリの制限は、事前定義済みのブール型、選択型、複数選択型を使用して、プロファイルの設定に直接追加できます。より柔軟に設定できるようにしたい場合は、プロファイルの設定から独自の UI を起動して、希望する制限のタイプを指定することもできます。
アプリがプロファイル内で実行されている場合、所有者が設定した制限をアプリで確認して、適切に適用することができます。たとえばメディアアプリでは、所有者がプロファイルの成熟度を設定できるように制限を指定できます。アプリは実行時に成熟度の設定を確認してから、推奨される成熟度に従ってコンテンツを管理できます。
アプリが制限付きプロファイル内で使用できるように設計されていない場合は、アプリが制限付きプロファイル内で有効化されないように、完全に無効にすることができます。
位置情報とセンサー機能の最適化
Google Play 開発者サービスには、アプリで使用できる高度な Location API が用意されています。Android 4.3 は、電池の使用量を最小限に抑える新しいハードウェアおよびソフトウェア機能を搭載したサポート対象のデバイスにおいて、これらの API を最適化します。
ハードウェア ジオフェンスでは、ソフトウェアではなくデバイスのハードウェアで位置情報を計算することで、電力効率化のための最適化を行います。ハードウェア ジオフェンスをサポートするデバイスでは、デバイスの移動中に、Google Play 開発者サービスのジオフェンス API がこの最適化を利用して電池を節約します。
Wi-Fi スキャン専用モードは新しいプラットフォーム最適化機能です。ユーザーはこの機能を使用することで、Wi-Fi ネットワークに接続しなくても Wi-Fi スキャンを有効に保つことができ、電池を節約しながら位置情報の精度を向上させることができます。位置情報サービス用に Wi-Fi を使用しているアプリでは、Wi-Fi の詳細設定でスキャン専用モードを有効にするようユーザーに要求できます。Wi-Fi スキャン専用モードはデバイスのハードウェアに依存しておらず、Android 4.3 プラットフォームの一部として使用できます。
センサーのタイプが新しくなったことで、センサー測定値をアプリで詳細に管理できるようになりました。ゲーム デベロッパーはゲーム回転ベクトルを使用することで、磁気干渉を気にせずにデバイスの回転を検出できます。未較正のジャイロスコープ センサーと未較正の磁力計センサーは、未加工の測定値と推定バイアスをアプリに報告します。
新しいハードウェア機能は、Nexus 7(2013)と Nexus 4 の各デバイスですでに利用できます。デバイス メーカーやチップセット ベンダーは、これらの機能をデバイスに組み込むことができます。
新しいメディア機能
モジュール式の DRM フレームワーク
次世代のメディア サービスのニーズを満たすため、Android 4.3 ではモジュラー DRM フレームワークが導入されています。これにより、メディア アプリケーション デベロッパーは、MPEG DASH(Dynamic Adaptive Streaming over HTTP、ISO/IEC 23009-1)などの独自のストリーミング プロトコルに DRM をより簡単に統合できます。
メディア DRM フレームワークでは、新しい API と既存の API の拡張機能を組み合わせることで、ライセンスとプロビジョニングの管理、低レベル コーデックへのアクセス、暗号化されたメディアデータのデコードを行う統合サービスセットを提供しています。新しい MediaExtractor API では、DASH メディアの PSSH メタデータを取得できます。メディア DRM フレームワークを使用するアプリでは、ライセンス サーバーとのネットワーク通信を管理し、コンテンツ ライブラリからの暗号化データのストリーミングを処理できます。
VP8 エンコーダ
Android 4.3 では VP8 エンコーディングに対する組み込みサポートが導入されており、フレームワークとネイティブ API で利用できます。ネイティブ API を使用するアプリのプラットフォームには、VP8 のプロファイルとレベルをサポートするために、OpenMAX 1.1.2 拡張ヘッダーが含まれています。VP8 エンコーディングのサポートには、ターゲット ビットレート、速度制御、フレームレート、トークンの分割、エラー耐性、再構成とループのフィルタに関する設定が含まれます。プラットフォーム API には VP8 エンコーダのサポートがさまざまな形式で導入されているため、コンテンツにとって最適な形式を利用できます。
VP8 エンコーディングは、Android 4.3 が実行されているすべての対応デバイス上のソフトウェアで使用できます。プラットフォームは対応デバイスのパフォーマンスを最大限に高めるために、ハードウェア アクセラレーテッド VP8 エンコーディングもサポートしています。
サーフェスからの動画エンコーディング
Android 4.3 以降では、動画エンコーダへの入力としてサーフェスを使用できます。たとえば、OpenGL ES サーフェスからエンコーダにストリームを送信することができます。バッファ間でコピーする必要はありません。
メディア多重化
アプリで新しいメディア多重化 API を使用すると、基本的な音声ストリームと動画ストリームを結合して 1 つのファイルに出力できます。アプリでは現在、単一の MPEG-4 音声ストリームと単一の MPEG-4 動画ストリームを多重化して 1 つの MPEG-4 ファイルに出力することができます。この新しい API は、Android 4.2 で導入されたメディア逆多重化 API と対になるものです。
リモコン クライアントでの再生の進行状況とスクラブ操作
Android 4.0 以降では、リモコン クライアント(デバイスのロック画面、通知、Bluetooth で接続されているリモート デバイスなど)からの再生コントロールをメディア プレーヤーや同様のアプリで提供できるようになっています。Android 4.3 以降では、これらのアプリでリモコン クライアントを介して再生の進行状況や速度を公開したり、コマンドを受け取って特定の再生位置にジャンプしたりすることもできます。
美しいアプリを作成するための新しい方法
通知へのアクセス
通知は長い間、Android の人気の機能として使用されてきました。ユーザーは通知によって、システム全体の情報やアップデートをすべて 1 か所で確認することができます。Android 4.3 では、アプリはユーザーの権限を使用して通知ストリームを監視し、ユーザーが希望する方法(Bluetooth で接続されている近くのデバイスに通知を送信するなど)で通知を表示できます。
通知にアクセスするには新しい API を使用します。これらの API により、通知リスナー サービスを登録し、ユーザーの権限を使用して通知を受信できます。受信した通知はステータスバーに表示されます。通知は、送信元のアプリ、送信時刻、コンテンツのビューとスタイル、優先度に関するすべての詳細を含め、完全な状態で配信されます。通知内の関心のある項目を評価したり、アプリからコンテキストの処理や追加を行ったりできるほか、選択した方法で表示するために通知を転送することもできます。
新しい API は、(ユーザーが通知を閉じたか、送信元のアプリが通知を取り消したことにより)通知が追加、更新、削除されたときにコールバックを呼び出します。通知またはそのアクションに関連付けられているインテントをすべて開始できるほか、システムから通知を削除することもできるため、アプリで完全なユーザー インターフェースを通知に提供できます。
通知を受信できるアプリはユーザーが管理できます。ユーザーはいつでも、[設定] を調べてどのアプリが通知にアクセスできるかを確認できるほか、必要に応じてアクセスを有効化または無効化することができます。通知へのアクセスはデフォルトで無効になっています。アプリのインストール後に新しいインテントを使ってユーザーを [設定] に直接誘導し、リスナー サービスを有効にすることができます。
オーバーレイの表示
View と ViewGroup の上に透明なオーバーレイを作成することで、基盤となるレイアウト階層の邪魔をせずに、一時的な View 階層またはアニメーション効果をレンダリングできるようになりました。オーバーレイは、アニメーションを作成する必要がある場合に特に便利です(コンテナの外部でビューをスライドさせる、View 階層に影響を与えずに画面上でアイテムをドラッグするなど)。
光学境界レイアウト モード
新しいレイアウト モードでは、クリップ境界ではなく光学境界に従って ViewGroup 内の View の位置を管理できます。クリップ境界がウィジェットの実際の外部境界を表すのに対し、この新しい光学境界はクリップ境界内でのウィジェットの表示位置を表します。光学境界レイアウト モードを使用すると、シャドウやグローなどの外部視覚効果を使用するウィジェットを適切に配置できます。
カスタムの回転アニメーションのタイプ
デバイスを回転したときにウィンドウで使用される開始アニメーションと終了アニメーションのタイプをアプリで定義できるようになりました。ウィンドウ プロパティの設定で、ジャンプカット、クロスフェード、標準のいずれかのウィンドウの回転を有効にすることができます。ウィンドウが全画面表示で、他のウィンドウで覆われていない場合、システムはカスタムのアニメーション タイプを使用します。
画面の向きのモード
アプリでアクティビティ用に新しい向きのモードを設定すると、デバイスを反転しても適切な向きで表示することができます。また、新しいモードでは、現在の向きに画面をロックすることもできます。この機能は、カメラを使用するアプリで動画の撮影中の回転を無効化したい場合に便利です。
インテントによるクイック返信の処理
Android 4.3 で導入された新しい公開インテントを使用すると、アプリでクイック返信(電話に出たりデバイスのロックを解除したりせずに着信に対してユーザーから送信できるテキスト メッセージ)を処理することができます。アプリはインテントをリッスンし、メッセージング システム経由で発信者にメッセージを送信できます。インテントにはメッセージ自体だけでなく、受信者(発信者)も含まれます。
全世界のユーザーのサポート
RTL に関する改善点
Android 4.3 では、RTL のパフォーマンスが強化されており、フレームワークの UI ウィジェット(ProgressBar/Spinner、ExpandableListView など)に対する幅広い RTL サポートが導入されています。詳細なデバッグ情報は uiautomatorviewer
ツールで参照できます。また、RTL 対応のシステム UI コンポーネントが現在はさらに増えています(通知、ナビゲーション バー、アクションバーなど)。
RTL スクリプトのシステム全体のエクスペリエンスを向上させるために、RTL レイアウトをデフォルトでサポートしているシステムアプリも増えています(ランチャー、クイック設定、電話、連絡帳アプリ、セットアップ ウィザード、時計、ダウンロードなど)。
ローカライズ用のユーティリティ
Android 4.3 には、有効な RTL 文字列を作成し、ローカライズした UI をテストするための新しいユーティリティと API も追加されています。新しい BidiFormatter クラスには Unicode 文字列をラップするためのシンプルな API が用意されており、RTL スクリプト データを LTR ロケール メッセージで意図したとおりに表示できます(LTR スクリプト データを RTL ロケール メッセージで表示することも可能)。このユーティリティを各種のアプリでより幅広く使用できるようにするために、BidiFormatter API が Android SDK のサポート パッケージを介して旧バージョンのプラットフォームでも使用できるようになりました。
複数のロケールにまたがって日付形式を管理できるようにするために、Android 4.3 には新しい getBestDateTimePattern() メソッドが追加されています。このメソッドは、指定したロケールに最適なローカライズ形式の Unicode UTS の日付を自動的に生成します。これにより、ローカライズ版のユーザー エクスペリエンスを簡単に改善できます。
Android 4.3 では、他のロケールでのアプリのテストを簡単に行えるようにするために、新しい開発者向けオプションとして疑似ロケールが導入されています。疑似ロケールを使用すると、ロケールまたは言語グループに関連付けられた言語、スクリプト、ディスプレイ特性をシミュレートできます。現在、アクセント記号付き英語の疑似ロケールを使用してテストを行うことができます。このテストでは、ヨーロッパ諸国のさまざまな言語で使われているスクリプトのアクセントや文字で UI がどのように表示されるかを確認できます。
ユーザー補助と UI の自動化
Android 4.3 以降のユーザー補助サービスでは、主要なイベントを監視してフィルタすることで、キーボード ショートカットを処理したり、ジェスチャー ベースの入力と同等のナビゲーションを提供したりできます。サービスはイベントを受信すると、システムや他のインストール済みのアプリに渡す前に、必要に応じてその処理を行うことができます。
ユーザー補助サービスでは、サービスで実行できることやサービスで使用するプラットフォーム機能を示すために、新しい機能属性を宣言できます。たとえば、主要なイベントのフィルタ、ウィンドウのコンテンツの取得、タッチガイドの有効化、ウェブのユーザー補助機能の有効化を行う機能を宣言できます。場合によっては、サービスから関連するプラットフォーム機能にアクセスする前に、機能属性の宣言が必要になることもあります。システムはサービスの機能属性を使用してオプトイン ダイアログを生成し、ユーザーに表示できます。これにより、ユーザーは機能を確認し、同意してから使い始めることができます。
Android 4.3 のユーザー補助フレームワークを基盤とする新しい UI 自動化フレームワークでは、ユーザー アクションをシミュレートし、画面のコンテンツを確認することにより、デバイスの UI の操作をテストできます。また、基本的な操作、画面の回転の設定、入力イベントの生成、スクリーンショットの撮影などを実行できます。これは、現実的なユーザー シナリオ(複数のアプリにまたがるアクションや一連の手順など)でのテストを自動化するための強力な方法です。
企業ネットワークとセキュリティ
WPA2-Enterprise ネットワークの Wi-Fi 設定
WPA2-Enterprise アクセス ポイントへの接続に必要な Wi-Fi 認証情報をアプリで設定できるようになりました。新しい API では、企業で使用する認証方法用に、拡張認証プロトコル(EAP)およびカプセル化された EAP(フェーズ 2)の認証情報を設定できます。Wi-Fi へのアクセスおよび Wi-Fi の変更を行う権限を持つアプリでは、EAP とフェーズ 2 のさまざまな認証方法で使用する認証情報を設定できます。
SELinux による Android サンドボックスの強化
Android では現在、SELinux を使用しています。SELinux は Linux カーネルに含まれる強制アクセス コントロール(MAC)システムで、UID ベースのアプリ サンドボックスを強化します。これにより、オペレーティング システムを潜在的なセキュリティの脆弱性から保護することができます。
KeyChain の機能強化
システム全体で使用する鍵がデバイスのハードウェア ルート オブ トラストにバインドされていることをアプリで確認するためのメソッドが KeyChain API に追加されました。このメソッドは、ルートやカーネルが危険にさらされてもデバイスからエクスポートできない秘密鍵を作成または保存する場所を提供します。
Android キーストア プロバイダ
Android 4.3 では、キーストア プロバイダと、排他的に使用する鍵をアプリで作成するための API が導入されています。アプリでこれらの API を使用すると、他のアプリから参照または使用できない秘密鍵を作成または保存できます。秘密鍵は、ユーザーによる操作なしでキーストアに追加できます。
キーストア プロバイダは、KeyChain API がシステム全体の認証情報に対して提供するのと同じセキュリティ上のメリットを提供します(認証情報をデバイスにバインドするなど)。なお、キーストア内の秘密鍵をデバイスからエクスポートすることはできません。
Android アプリによる setuid の制限
zygote が生成したプロセスで使用する nosuid
が /system
パーティションにマウントされたことで、Android アプリで setuid
プログラムを実行できなくなりました。これにより、root の攻撃対象領域が減少し、潜在的なセキュリティの脆弱性が生じる可能性が低くなります。
新しいパフォーマンス分析方法
Systrace ログの機能強化
Android 4.3 は機能強化版の Systrace ツールをサポートしています。さらに使いやすくなったこのバージョンでは、各種の情報にアクセスして、アプリのパフォーマンスのプロファイルを作成できます。現在は、ハードウェア モジュール、カーネル機能、Dalvik VM(ガベージ コレクションを含む)、リソース読み込みなどからトレースデータを収集できます。
Android 4.3 には新しい Trace API も追加されています。この API をアプリで使用すると、コードの特定の部分にマークを付けて、Systrace の開始および終了イベントの使用をトレースできます。マークが付けられた部分のコードが実行されると、システムによって開始および終了イベントがトレースログに書き込まれます。アプリのパフォーマンスへの影響は最小限のため、レポートされるタイミングでアプリの実行内容を正確に把握できます。
Systrace の出力ファイルでアプリ固有のイベントをタイムラインで視覚化し、他のカーネルやユーザー スペースのトレースデータに照らしてイベントを分析することができます。カスタムのアプリ セクションを既存の Systrace タグと組み合わせることで、これまでにない方法でアプリのパフォーマンスや動作を把握できます。
画面上での GPU プロファイルの作成
Android 4.3 には、デバイスまたはエミュレータ上でアプリのパフォーマンスを分析し、レンダリングに関する問題を特定することができる新しい開発者向けオプションが追加されています。
[GPU レンダリングのプロファイル作成] オプションでは、アプリの実行中に、アプリの効果的なフレームレートを画面上で視覚化できます。プロファイリング データが色付きの棒グラフまたは折れ線グラフで画面上に表示され、描画コマンドの作成にかかった時間(青)、コマンドの発行にかかった時間(オレンジ)、コマンドが完了するまで待機した時間(黄)が示されます。システムは画面上のグラフを継続的に更新し、表示されているアクティビティ(ナビゲーション バーや通知バーなど)ごとにグラフを表示します。
緑の線は、レンダリング処理の 16 ミリ秒のしきい値を示しています。これにより、60 FPS(60 分の 1 秒 = 約 16 ミリ秒)の目標と比較してアプリのフレームレートが効果的かどうかを評価できます。緑の線を越える処理については、Systrace などのツールを使用してさらに分析できます。
Android 4.2 以降が実行されているデバイスでは、開発者向けオプションはデフォルトで非表示になっています。これらのオプションを表示するには、互換性のある Android デバイスで [設定] > [デバイス情報] > [ビルド番号] を 7 回タップします。
ファイル URI の StrictMode の警告
ポリシーの制約は、アプリが file://
URI をシステムまたは別のアプリに公開したときに警告する、StrictMode ツールに追加された最新の機能です。受信側のアプリが file://
URI パスにアクセスできないことがあるため、アプリ間でファイルを共有する場合は、(適切な権限のある)content://
URI を使用する必要があります。この新しいポリシーは、こうした問題を特定して修正するのに役立ちます。ファイルを保存して他のアプリに公開するための便利な方法をお探しの場合は、サポート ライブラリで使用可能な FileProvider
コンテンツ プロバイダを使ってみてください。
Android 4.2
Android 4.2 へようこそ。Jelly Bean が新しくなりました。
Android 4.2 では、パフォーマンスの最適化、新しいシステム UI など、ユーザーやデベロッパー向けの便利な新機能が追加されています。このドキュメントでは、デベロッパー向けの新機能について簡単に紹介します。
デベロッパー向けの新しい API について詳しくは、Android 4.2 API のドキュメントをご覧ください。
Jelly Bean のユーザー向けの新機能について詳しくは、www.android.com をご覧ください。
より速く、よりスムーズに、よりレスポンシブに
Android 4.2 は、Jelly Bean にすでに含まれているパフォーマンス向上機能(vsync タイミング、トリプル バッファリング、タッチ レイテンシの短縮、CPU 入力ブーストなど)を基盤としています。また、Android をさらに高速化する新しい最適化機能が追加されています。
ハードウェア アクセラレーテッド 2D レンダラが改善されたことで、スクロールやスワイプなどの一般的なアニメーションがさらにスムーズかつ高速に動作するようになっています。特に、レイヤ、クリップ、特定の図形(角丸長方形、円、楕円)の描画が最適化されています。
さまざまな WebView レンダリングの最適化により、ウェブページのスクロールがスムーズになったため、ジッターやラグが発生しなくなりました。
Android の Renderscript Compute は、モバイル デバイスの GPU 上で直接実行するために移植された初めての計算プラットフォームです。可能であれば、GPU の計算リソースを自動的に利用して、グラフィックおよび画像処理のパフォーマンスを動的に改善します。サポート対象のデバイスで Renderscript を使用するアプリは、この GPU の統合によるメリットをすぐに享受できます。しかも、再コンパイルする必要もありません。
洗練された新しい UI
Android 4.2 では Jelly Bean のユーザー エクスペリエンスが改良されており、ステータスバー、システムバー、通知ウィンドウなどのおなじみの Android UI パターンをすべてのタブレットで利用できます。
あらゆるサイズの画面の上部にステータスバーが表示され、プルダウンから通知と新しい [クイック設定] メニューにアクセスできるようになっています。下部にはおなじみのシステムバーが表示され、片手で簡単にボタンを操作できます。アプリトレイもあらゆるサイズの画面で使用できます。
1 台のタブレットを複数のユーザーで共有する
複数のユーザーで 1 台の Android タブレットを共有できるようになりました。各ユーザーは専用のユーザー スペースに簡単にアクセスできます。ユーザーは 1 回のタップでロック画面から自分のスペースに切り替えることができます。
マルチユーザー デバイスでは、Android から各ユーザーに独立した環境が提供されます(ユーザー専用にエミュレートされた SD カード ストレージなど)。また、ユーザーは専用のホーム画面、ウィジェット、アカウント、設定、ファイル、アプリを所有でき、システムがそれらを個別に管理します。すべてのユーザーが主要なシステム サービスを共有しますが、各ユーザーのアプリとデータはシステムによって隔離された状態が維持されます。実質的に、複数のユーザーのそれぞれが専用の Android デバイスを持っていることになります。
ユーザーはいつでも、専用の環境でアプリのインストールとアンインストールを行うことができます。Google Play は保存容量を節約するために、APK が別のユーザーによってデバイスにまだインストールされていない場合にのみ、APK をダウンロードします。アプリがすでにインストールされている場合、Google Play は通常の方法で新規ユーザーによるインストールを記録しますが、アプリのコピーを再度ダウンロードすることはありません。システムはユーザーごとに新しいインスタンス(ユーザー専用のデータ ディレクトリなど)を作成するため、複数のユーザーが APK の同じコピーを実行できます。
デベロッパーにとって、マルチユーザーのサポートは透過的です。つまり、マルチユーザー環境でアプリを正常に実行するために何か特別なことを行う必要はなく、既存または公開済みの APK を変更する必要もありません。システムは、単一ユーザーの環境と同じように各ユーザー スペース内のアプリを管理します。
ユーザー エンゲージメントの新しい方法
ロック画面ウィジェット
Android 4.2 では、ユーザーがアプリ ウィジェットをロック画面上に直接配置できるため、ロックを解除しなくてもお気に入りのアプリ コンテンツに即座にアクセスできます。ユーザーはロック画面ウィジェットを 5 個まで追加できます(インストール済みのアプリで提供されているウィジェットから選択します)。ロック画面では各ウィジェットが専用のパネルに表示され、ユーザーが左右にスワイプすることによって別のパネルとそのウィジェットを表示できます。
すべてのアプリ ウィジェットと同様に、ロック画面ウィジェットにはあらゆる種類のコンテンツを表示でき、ユーザーが直接操作することができます。ロック画面ウィジェットは、音楽の再生コントロールを提供するウィジェットのように完全な自己完結型にすることができます。また、ユーザーが途中でロックを解除した後に必要に応じてアプリ内のアクティビティに直接移動できるようにすることも可能です。
デベロッパーはロック画面ウィジェットで、ユーザーを惹きつける新しい効果的な方法を提供できます。ユーザーがよく見る場所にコンテンツを配置できるほか、ユーザーをアプリに直接誘導する機会を増やすこともできます。
この新しい機能を利用するには、新しいアプリ ウィジェットを作成するか、既存のホーム画面ウィジェットを拡張します。アプリにすでにホーム画面ウィジェットが含まれている場合は、最小限の変更でロック画面用に拡張できます。ユーザーに最適なエクスペリエンスを提供するために、可能であれば、ロック画面のすべての領域を使用するようにウィジェットを更新できます。また、画面が小さい場合は必要に応じてサイズを変更することができます。さらに、ロック画面で特に役に立つ可能性がある便利な機能をウィジェットに追加することも可能です。
Daydream
Daydream は、ユーザーのデバイスがホルダーに装着されたとき、または充電中に開始するインタラクティブなスクリーンセーバー モードです。このモードでは、システムは Daydream(インストール済みのアプリから提供されるリモート コンテンツ サービス)をデバイスのスクリーンセーバーとして起動します。ユーザーは設定アプリから Daydream を有効にして、表示する Daydream を選択できます。
Daydream はライブ壁紙とホーム画面ウィジェットの主要な機能を組み合わせたものですが、それらよりもさらに強力です。写真をパラパラめくる、音声や動画を再生する、1 回のタップでアプリに直接移動するなどのユーザー操作により、あらゆるタイプのコンテンツを完全に新しいコンテキストで提供できます。
Daydream は、デバイスがホルダーに装着されたとき、または充電中に自動的に開始でき、これまでにないタイプのユーザー エクスペリエンスをサポートする優れた方法をアプリに提供します。たとえば、リーンバックまたはエキシビション モード、デモまたはキオスクモード、「アトラクト モード」などがあります。これらはすべて、特別なハードウェアを必要としません。
Daydream はアクティビティに似ており、アクティビティでできることはすべて実行できます(UI 階層を(RemoteView を使用せずに)レンダリングする、Canvas、OpenGL、SurfaceTexture などを使用して直接描画するなど)。また、動画や音声を再生でき、ユーザーが直接操作することも可能です。ただし、Daydream はアクティビティではないため、バックスタックへの影響はなく、[最近] には表示されません。また、アプリから直接起動することもできません。
Daydream の実装は簡単で、アプリの他の部分用に作成した UI コンポーネントやリソースを利用できます。アプリで複数の Daydream を提供できるほか、別のコンテンツを用意してそれぞれの設定を表示することもできます。
外部ディスプレイのサポート
Android 4.2 では、ミラーリングをはるかに超える、外部ディスプレイのプラットフォーム サポートが導入されています。アプリでは、Android デバイスに接続されている 1 台以上のディスプレイに対して一意のコンテンツをターゲット設定できるようになりました。アプリはこれを基に、これまでにないタイプの操作性やエンタメ体験をユーザーに提供できます。
ディスプレイ マネージャー
アプリは、新しいディスプレイ マネージャー システム サービスを介してディスプレイを操作します。アプリではディスプレイを列挙して、それぞれの機能(サイズ、密度、ディスプレイ名、ID、セキュリティ保護された動画のサポートなど)を確認できます。また、ディスプレイが追加または削除されたときや、ディスプレイの機能が変更されたときにアプリでコールバックを受信して、外部ディスプレイで適切にコンテンツを管理することができます。
Presentation ウィンドウ
外部ディスプレイで簡単にコンテンツを表示できるようにするために、Presentation と呼ばれる新しい UI オブジェクトがフレームワークから提供されています。これは、特定の外部ディスプレイにアプリのコンテンツ用のウィンドウを表示する一種のダイアログです。アプリでは、使用するディスプレイ、ウィンドウのテーマ、表示する一意のコンテンツのみを指定します。Presentation は、ターゲットに設定されたディスプレイの特性に従って、リソースのインフレーションとコンテンツのレンダリングを処理します。
Presentation を使用すると、アプリでリモート ディスプレイのウィンドウとそのコンテンツを詳細に制御でき、キーの押下、ジェスチャー、モーション イベントなどのユーザー入力イベントに基づいて管理することができます。Presentation では、通常のツールをすべて使用して UI を作成し、コンテンツをレンダリングできます。たとえば、任意のビュー階層を構築したり、SurfaceView または SurfaceTexture を使用して、ストリーミングされたコンテンツやカメラ プレビュー用のウィンドウに直接描画したりできます。
優先ディスプレイの選択
複数の外部ディスプレイを使用できる場合、必要な数だけ Presentation を作成し、それぞれが特定のディスプレイに一意のコンテンツを表示させることができます。多くの場合、1 台の外部ディスプレイにのみコンテンツを表示することをおすすめします。ただし、必ず Presentation のコンテンツにとって最適なディスプレイに表示してください。その場合、アプリが最適なディプレイを選択できるようシステムがサポートします。
最適なディスプレイを見つけるために、アプリでシステムの優先 Presentation ディスプレイをディスプレイ マネージャーに照会して、そのディスプレイが変更されたときにコールバックを受信することができます。また、Android 4.2 で拡張されたメディア ルーター サービスを利用して、システムの動画ルートが変更されたときに通知を受信することもできます。アプリは、優先 Presentation ディスプレイが接続されたときに優先ディスプレイ上で Presentation のコンテンツに自動的に切り替えることができますが、それまでの間は、メインのアクティビティでデフォルトでコンテンツを表示できます。また、アプリでメディア ルーターの MediaRouteActionProvider と MediaRouteButton を使用して、ディスプレイ選択用の標準の UI を表示することも可能です。
保護されたコンテンツ
保護または暗号化されたコンテンツを処理するアプリでは、接続されているディスプレイのセキュリティ保護された動画機能がディスプレイ API によって報告されるようになりました。アプリはディスプレイに対してクエリを実行し、セキュリティ保護された動画出力または保護されたグラフィック バッファをディスプレイが提供しているかどうかを確認し、その後、適切なコンテンツ ストリームを選択するか、コンテンツを表示できるようにするためにデコードを行います。アプリでは、SurfaceView オブジェクトのセキュリティ強化のために、ミラーリングされている場合でも、スクリーンショットまたはセキュリティ保護されていないディスプレイ出力にコンテンツが表示されないことを示す secure フラグを設定できます。
ワイヤレスディスプレイ
Android 4.2 以降では、サポート対象のデバイスのユーザーは Wi-Fi ディスプレイ(Miracast™ 認定プログラムに準拠するピアツーピアのワイヤレス ディスプレイ ソリューション)を使用して、Wi-Fi で外部ディスプレイに接続できます。ワイヤレス ディスプレイが接続されている場合、ユーザーは、写真、ゲーム、地図など、あらゆるタイプのコンテンツを大画面にストリーミングできます。
アプリでは、他の外部ディスプレイと同じようにワイヤレス ディスプレイを利用できます。しかも、追加の作業は必要ありません。システムはネットワーク接続を管理しつつ、Presentation またはその他のアプリ コンテンツを必要に応じてワイヤレス ディスプレイにストリーミングします。
RTL の標準サポート
Android 4.2 では、RTL(右から左)レイアウトに対する完全な標準サポートが導入されています(レイアウトのミラーリングを含む)。RTL の標準サポートにより、ユーザーが使用している言語が右から左に読むか、左から右に読むかに関係なく、すべてのユーザーにアプリの優れたエクスペリエンスを同じように提供できます。
ユーザーがシステム言語を RTL スクリプトに切り替えると、読み取りと文字入力の両方のテキスト要素の bidi ミラーリングに加え、アプリの UI レイアウトとすべてのビュー ウィジェットの自動ミラーリングがシステムによって行われます。
アプリでは、RTL レイアウトのミラーリングを最小限の労力で利用できます。アプリをミラーリングする場合は、単にアプリのマニフェストで新しい属性を宣言して、すべての「left/right」レイアウト プロパティを同等の新しい「start/end」に変更します。これにより、UI のミラーリングと表示がシステムによって必要に応じて処理されるようになります。
Android 4.2 では、アプリの UI を厳密に制御するために、View コンポーネントのレイアウトの向き、テキストの向き、テキストの配置、グラビティ、ロケールの向きを管理するための新しい API が追加されています。独自のバージョンのレイアウト、ドローアブル、その他のリソースを作成して、RTL スクリプトが使用されているときに表示することも可能です。
HierarchyViewer ツールを使用すると、階層内のすべての View の start/end プロパティ、レイアウトの向き、テキストの向き、テキストの配置を確認できるため、カスタムの RTL レイアウトのデバッグと最適化が行いやすくなります。
各国の言語の機能強化
Android 4.2 では、全世界のユーザーを対象としたさまざまなフォントおよび文字の最適化が行われています。
- 韓国語ユーザーは、新しいフォント(ナヌム(나눔글꼴)ゴシック、韓国語のスクリプト用に特別に設計された Unicode フォント)を選択できるようになりました。
- WebView で表示される日本語の縦書きに対するサポートが強化されました。
- インド語、タイ語、アラビア語、ヘブライ語のデフォルトのフォントのカーニングと配置が改善されました。
また、デフォルトの Android キーボードで辞書の更新が行われています。
- フランス語(bigram をサポート)、英語、ロシア語の辞書を改善
- デンマーク語、ギリシャ語、フィンランド語、リトアニア語、ラトビア語、ポーランド語、スロベニア語、セルビア語、スウェーデン語、トルコ語用の新しい辞書
美しい UI を作成するための新しい方法
Fragment のネスト
Android 4.2 では、UI コンポーネントを詳細に管理し、それらのモジュール化を進めるために、Fragment 内に Fragment をネストすることができます。新しい Fragment マネージャーを使用すると、どの Fragment に対しても、他の Fragment を View 階層内の子ノードとして挿入できます。
ネストされた Fragment はさまざまな方法で使用できますが、動的で再利用可能な UI コンポーネント内に動的で再利用可能な UI コンポーネントを実装する場合に特に便利です。たとえば、ViewPager を使用して左右にスワイプするフラグメントを作成する場合、ビュー ページャーの各 Fragment にフラグメントを挿入できます。
ネストされた Fragment をアプリで幅広く利用できるようにするために、最新バージョンの Android サポート ライブラリにこの機能が追加されています。
ユーザー補助
現在、タッチガイド モードにおいて、ユーザー補助サービスがタッチガイドとユーザー補助ジェスチャーを区別できるようシステムがサポートしています。ユーザーが画面をタップすると、一般的なタップ操作が開始されたことがシステムからサービスに通知されます。システムはその後、タップ操作の速度を追跡し、タップ操作がタッチガイド(低速)かユーザー補助ジェスチャー(高速)かを確認してサービスに通知します。タップ操作が終了すると、システムからサービスに通知されます。
システムには、ユーザー補助サービスでユーザーの操作に基づいて [クイック設定] メニューを開くことができる新しいグローバルなユーザー補助オプションが用意されています。また、Android 4.2 では、点字デバイス向けの新しいユーザー補助フィードバック タイプも追加されています。
ユーザー補助の目的でユーザー補助サービスのインサイトを View の意味に加えるために、View を別の View のラベルとして関連付けるための新しい API がフレームワークに追加されています。各 View のラベルは、ユーザー補助サービスで AccessibilityNodeInfo を介して使用できます。
HDR カメラの改良
Android 4.2 では、パフォーマンス向上のために、カメラ用の新しいハードウェア インターフェースとパイプラインが導入されています。サポート対象のデバイスでは、アプリで新しい HDR カメラ撮影モードを使用し、ハイ ダイナミック レンジの画像処理手法を使って画像をキャプチャできます。
また、フレームワークには、カメラのシャッター音を無効にできるかどうかをアプリで確認するための API が用意されています。アプリでは、ユーザーがシャッター音を無効にすることも、標準のシャッター音に代わる音を選択する(推奨)こともできます。
Renderscript の計算
Android 4.2 の Renderscript Compute には、計算処理のパフォーマンスを最大限に高めるために、新しいスクリプト機能、新しい最適化機能、GPU の直接統合が導入されています。
Filterscript
Filterscript は Renderscript のサブセットで、各種のデバイス チップセットにまたがる画像処理を最適化することに重点が置かれています。デベロッパーは標準の Renderscript ランタイム API を使用して、Filterscript の画像処理操作を作成できますが、CPU、GPU、DSP にまたがって幅広い互換性を確保し、最適化を強化するという厳しい制約があります。
Filterscript は、ハードウェア アクセラレーションによる単純な画像処理や、計算処理(OpenGL ES のフラグメント シェーダー用に記述された計算処理など)に適しています。Filterscript はハードウェアに対する制約が緩いため、さまざまなタイプのデバイス チップセットで処理を最適化および高速化できます。Filterscript は API レベル 17 以降を対象とするすべてのアプリで使用できます。
スクリプトの組み込み
Android 4.2 では、Renderscript によって一連のスクリプトの組み込みに対するサポートが追加されています。これは、記述する必要があるコードの量を減らし、アプリのパフォーマンスを最大限に高めるために促進されている事前実装済みのフィルタ プリミティブです。
組み込みは、ブレンド、ぼかし、カラー マトリックス、3x3 および 5x5 の積和演算、チャンネル単位のルックアップ テーブル、Android YUV バッファの RGB への変換で利用できます。
スクリプト グループ
Renderscript スクリプトのグループを作成して、そのすべてを 1 つのスクリプトの一部であるかのように 1 回の呼び出しで実行できるようになりました。このため、Renderscript では、スクリプトが個々に実行された場合は不可能な方法でスクリプトの実行を最適化できます。
Android プラットフォームの各バージョン(Android 4.0、4.1、4.2)において、Galaxy Nexus デバイスの CPU のみで実行した Renderscript の画像処理ベンチマーク
同じ Nexus 10 デバイスで、Renderscript の画像処理ベンチマークを GPU と CPU を使用して実行した場合と CPU のみで実行した場合の比較
実行する Renderscript の処理の有向非巡回グラフがある場合、ビルダークラスを使用して、処理を定義するスクリプト グループを作成できます。Renderscript は実行時に、実行順序と処理同士の接続を最適化して、パフォーマンスを最大限に高めます。
継続的な最適化の改善
計算処理に Renderscript を使用すると、アプリで Renderscript エンジン自体の継続的なパフォーマンスおよび最適化の改善によるメリットが得られます。しかも、アプリのコードへの影響は一切なく、再コンパイルの必要もありません。
最適化が改善するにつれて、処理の実行速度が向上し、より多くのチップセットで処理が実行されるようになります。デベロッパー側での作業も生じません。右のグラフは、Android プラットフォームの一連のバージョンにおける Renderscript の継続的な最適化の改善によってもたらされたパフォーマンスの向上を示しています。
GPU Compute
Renderscript Compute は、モバイル デバイスの GPU 上で直接実行するために移植された初めての計算プラットフォームです。可能であれば、GPU の計算リソースを自動的に利用してパフォーマンスを改善します。GPU の統合により、グラフィックまたは画像処理の最も複雑な計算でさえ、実行時のパフォーマンスを大幅に向上させることができます。
サポート対象のデバイスで Renderscript を使用するアプリは、この GPU の統合によるメリットをすぐに享受できます。しかも、再コンパイルする必要もありません。Nexus 10 タブレットは、この統合をサポートする最初のデバイスです。
開発者向けの新しい組み込みオプション
Android 4.2 システムには、各種の新しい開発者向けオプションが含まれています。これらのオプションを使用すると、見栄えがよく、パフォーマンスにも優れたアプリを簡単に作成できます。新しいオプションで公開されている機能では、デバイスまたはエミュレータでアプリのデバッグおよびプロファイリングを行うことができます。
Android 4.2 が実行されているデバイスでは、ユーザー エクスペリエンスの向上に役立つ開発者向けオプションがデフォルトで非表示になっています。開発者向けオプションを表示するには、互換性のある Android デバイスで [設定] > [デバイス情報] > [ビルド番号] を 7 回タップします。
Android 4.2 の新しい開発者向けオプションには以下のものがあります。
- バグレポートを取得 - スクリーンショットを即座に撮影し、デバイスの状態情報をローカルのファイル ストレージにダンプします。さらに、それらを新しい送信メール メッセージに添付します。
- 電源メニューのバグレポート - バグレポートを取得(上記を参照)するための新しいオプションをデバイスの電源メニューとクイック設定に追加します。
- USB 経由のアプリを確認 - USB 経由でアプリをサイドロードする場合のアプリのチェックを無効にすることができます。ただし、ブラウザなどの他のソースからのアプリは引き続きチェックします。これにより、セキュリティ機能を有効にしたまま、開発プロセスをスピードアップできます。
- ハードウェア層の更新を表示 - ハードウェア層が更新されたときに緑色で点滅します。
- GPU オーバードローの表示 - GPU オーバードロー領域をハイライト表示します。
- 4x MSAA を適用 - Open GL ES 2.0 アプリで 4x MSAA を有効にします。
- 2 次画面シミュレート - セキュリティ保護されていないオーバーレイ ウィンドウを現在の画面上に 1 つ以上作成し、リモートのシミュレーション ディスプレイとして使用します。シミュレーション ディスプレイのサイズと密度は制御可能です。
- OpenGL トレースを有効化 - glGetError で Logcat、Systrace、callstack のいずれかを使用して、OpenGL の実行をトレースできます。
新しいプラットフォーム テクノロジー
Android 4.2 には、機能強化された各種の新しいプラットフォーム テクノロジーが搭載されており、幅広いハードウェア デバイスで革新的な通信ユースケースをサポートしています。ほとんどの場合、新しいプラットフォーム テクノロジーと機能強化はアプリに直接影響しないため、アプリを変更せずにそれらのメリットを享受できます。
セキュリティの機能強化
Android のすべてのリリースで、ユーザーを保護するためにさまざまなセキュリティ機能が強化されています。Android 4.2 における機能強化の一部を以下に示します。
- アプリの確認 - ユーザーは「アプリの確認」を有効にして、インストール前にアプリの検証ツールでアプリをスクリーニングできます。害を及ぼす可能性があるアプリをユーザーがインストールしようとすると、アプリの確認がユーザーに警告することがあります。特に有害なアプリの場合、インストールをブロックすることもあります。
- プレミアム SMS の詳細な管理 - 追加料金が発生する可能性があるプレミアム サービスを使用しているショートコードにアプリが SMS を送信しようとすると、Android によって通知が表示されます。ユーザーは、アプリによるメッセージの送信を許可するかブロックするかを選択できます。
- 常時接続 VPN - VPN 接続が確立されるまでアプリがネットワークにアクセスできないように、VPN を設定できます。これにより、アプリが他のネットワークを経由してデータを送信することができなくなります。
- 証明書のピン留め - libcore SSL の実装で証明書のピン留めがサポートされるようになりました。ピン留めされたドメインは、証明書が一連の想定される証明書にチェーンされていない場合、証明書の検証失敗を受け取ります。これにより、認証局のセキュリティ侵害を防ぐことができます。
- Android 権限の表示の改善 - 権限は、ユーザーが簡単に理解できるグループに分類されています。ユーザーは権限について確認する際に、権限をクリックすれば詳細情報を確認できます。
- installd の強化 - installd デーモンは root ユーザーとして実行されないため、ルート権限昇格に対する潜在的な攻撃対象領域が狭まります。
- init スクリプトの強化 - init スクリプトによって O_NOFOLLOW セマンティクスが適用され、symlink 関連の攻撃を防ぐことができるようになりました。
- FORTIFY_SOURCE - Android に FORTIFY_SOURCE が実装されました。これは、メモリ破損を防ぐためにシステム ライブラリとアプリで使用されます。
- ContentProvider のデフォルト設定 - API レベル 17 をターゲットとするアプリでは、各 ContentProvider の「export」がデフォルトで「false」に設定されるため、アプリのデフォルトの攻撃対象領域が狭まります。
- 暗号化 - OpenSSL を使用するように、SecureRandom と Cipher.RSA のデフォルトの実装が変更されました。また、OpenSSL 1.0.1 を使用した TLSv1.1 と TLSv1.2 に対する SSLSocket のサポートが追加されました。
- セキュリティに関する修正 - セキュリティに関する修正によってアップグレードされたオープンソース ライブラリに、WebKit、libpng、OpenSSL、LibXML が含まれています。Android 4.2 では、Android 固有の脆弱性に対する修正も行われています。これらの脆弱性に関する情報は、オープン ハンドセット アライアンスのメンバーに提供されています。修正プログラムは Android オープンソース プロジェクトで入手できます。また、Android の以前のバージョンがインストールされている一部のデバイスでも、セキュリティ強化のために修正プログラムが適用されている場合があります。
新しい Bluetooth スタック
Android 4.2 では、Android デバイス向けに最適化された新しい Bluetooth スタックが導入されています。Google と Broadcom が共同開発した新しい Bluetooth スタックは、BlueZ をベースとするスタックに代わるもので、互換性と信頼性が改善されています。低遅延オーディオ
Android 4.2 では、OpenSL ES、Soundpool、トーン ジェネレータ API を使用したオーディオ出力レイテンシの改善を Android 4.1 リリースで行ったことを踏まえ、低レイテンシのオーディオ再生のサポートが改善されています。これらの改善はハードウェアのサポートに依存します。これらの低レイテンシ オーディオ機能を提供するデバイスは、ハードウェア機能定数を介してアプリにサポートをアドバタイズできます。新しい AudioManager API は、ネイティブの音声サンプルレートとバッファサイズを照会するために提供されており、この機能を必要とするデバイスで使用されます。
新しいカメラ ハードウェア インターフェース
Android 4.2 では、カメラスタックの新しい実装が導入されています。カメラのサブシステムには、カメラ パイプライン内にコンポーネントの実装が含まれています(処理制御によるバーストモード キャプチャなど)。新しい NFC ハードウェア インターフェースとコントローラ インターフェース
Android 4.2 では、NFC-Forum の NCI 標準に基づくコントローラのサポートが導入されています。NCI は NFC コントローラ(NFCC)とデバイスホスト間の標準的な通信プロトコルを提供しており、Google と Broadcom が共同開発した新しい NFC スタックはこのプロトコルをサポートしています。Dalvik ランタイムの最適化
Dalvik ランタイムでは、さまざまなアーキテクチャにおけるパフォーマンスとセキュリティの強化が行われています。
- Intel による x86 JIT のサポートおよび MIPS による MIPS JIT のサポート
- 512 MB を超えるデバイスのガベージ コレクション パラメータの最適化
- SecureRandom と Cipher.RSA のデフォルトの実装で OpenSSL を使用
- OpenSSL 1.0.1 を使用した TLSv1.1 と TLSv1.2 に対する SSLSocket のサポート
- StrictMath メソッドの絶対値、最小値、最大値、平方根に対する新しい組み込みサポート
- BouncyCastle の 1.47 へのアップデート
- zlib の 1.27 へのアップデート
- dlmalloc の 2.8.6 へのアップデート
Android 4.1
Android 4.1 へようこそ。Android 4.1 は Jelly Bean の最初のバージョンです。
Android 4.1 はこれまでで最も高速かつスムーズなバージョンの Android です。Google はプラットフォーム全体に改善を施し、ユーザーやデベロッパー向けの優れた新機能を追加してきました。このドキュメントでは、デベロッパー向けの新機能について簡単に紹介します。
デベロッパー向けの新しい API について詳しくは、Android 4.1 API のドキュメントをご覧ください。
Jelly Bean のユーザー向けの機能について詳しくは、www.android.com をご覧ください。
より速く、よりスムーズに、よりレスポンシブに
Android 4.1 は、Android のパフォーマンスを最大限に高め、直感的で使いやすい UI でタップの遅延を最小限に抑えるように最適化されています。
Android 4.1 では、安定したフレームレートを確保するために、Android フレームワークが実行するすべての描画とアニメーションの vsync タイミングを先延ばししています。アプリのレンダリング、タップイベント、画面構成、表示の更新など、すべての処理が 16 ミリ秒の vsync ハートビートに対してロックステップで実行されるため、フレームが進んだり遅れたりすることがありません。
Android 4.1 ではグラフィック パイプラインにトリプル バッファリングも追加されており、レンダリングの安定性が高まっています。これにより、スクロールからページング、アニメーションにいたるまで、すべての処理がよりスムーズに感じられるようになっています。
Android 4.1 では、vsync タイミングにタップを同期するだけでなく、画面の更新時の指の位置も実際に予測することによって、タップの遅延を短縮しています。その結果、タップに対する反応と均一性が向上しています。さらに、操作が行われない状態が一定期間続いた後、Android は次のタップイベントの際に CPU 入力ブーストを適用して、遅延が発生しないようにします。
ツールを利用すると、アプリのパフォーマンスを最大限に引き出すことができます。Android 4.1 は、Systrace という新しいツールと連携するように設計されています。このツールは Linux カーネルからデータを直接収集して、システム アクティビティの全体像を示します。データは、垂直方向にスタックされた時系列グラフのグループとして表され、レンダリングの中断などの問題を分離するのに役立ちます。このツールは現在、Android SDK(Tools R20 以降)で利用できます。
ユーザー補助機能の強化
ユーザー補助サービスの新しい API では、ユーザーがユーザー補助ジェスチャー、アクセサリ、その他の入力を使用して画面上の要素やナビゲーション ボタンの間を移動するときに、ジェスチャーを処理し、ユーザー補助機能のフォーカスを管理することができます。Talkback システムとタッチガイドは、使いやすさの向上のためにユーザー補助機能のフォーカスを使用するように再設計され、デベロッパー向けの包括的な API セットを提供しています。
ユーザー補助サービスでは独自のチュートリアルをユーザー補助の設定にリンクでき、ユーザーはそのチュートリアルを参考にして、サービスを設定し、使用することができます。
標準の View コンポーネントを使用するアプリは、自動的に新しいユーザー補助機能のサポートを継承します。コードを変更する必要もありません。カスタムの View を使用するアプリでは、新しいユーザー補助ノード API を使って、関心のある View の要素をユーザー補助サービスに示すことができます。
全世界のユーザーのサポート
双方向テキストとその他の言語サポート
Android 4.1 では、TextView 要素と EditText 要素に含まれる双方向テキストに対するサポートを通じて、より多くのユーザーにリーチできます。アプリでは、LTR または RTL スクリプトでテキストを表示したり、テキストの編集を処理したりできます。また、アラビア語とヘブライ語の新しいロケールと関連フォントを利用できます。
他にも、以下の新しい言語サポートが追加されています。
- 追加されたインド圏言語: カンナダ語、テルグ語、マラヤーラム語
- Unicode バージョン 6.0 の新しい絵文字
- 日本語ユーザーを対象としたグリフのサポートの強化(システム言語が日本語に設定されている場合に日本語固有のバージョンのグリフをレンダリングする)
- WebView 向けに最適化されたアラビア語グリフ、TextView 向けのアラビア語グリフ
- WebView での縦書きのサポート(Ruby テキストやその他の縦書きグリフを含む)
- 専用の太字グリフがないすべてのフォントで合成太字を利用可能
ユーザーがインストール可能なキーマップ
ユーザーがインストール可能なキーボード マップ(追加の国際キーボードや特別なレイアウト タイプ向けなど)がプラットフォームでサポートされるようになりました。Android 4.1 にはデフォルトで、Dvorak などの 27 の各国向けキーボード用キーマップが含まれています。ユーザーがキーボードを接続すると、設定アプリに移動して、キーボードに使用するキーマップを 1 つ以上選択できます。ユーザーは入力時にショートカット(Ctrl+Space)を使用して、キーマップを切り替えることができます。
システムに追加のキーマップを公開するアプリを作成できます。APK には、標準の Android キーマップ形式に基づいて、キーボード レイアウト リソースが含まれます。アプリのマニフェストの ACTION_QUERY_KEYBOARD_LAYOUTS で適切なブロードキャスト レシーバを宣言することで、追加のキーボード レイアウトをユーザーに提供できます。
美しい UI を作成するための新しい方法
展開可能な通知
通知は長い間、Android で人気のユニークな機能として使用されてきました。デベロッパーは通知を使用することで、アプリの通常の UI の外部にある通知バーに重要な情報や時間ベースの情報をユーザーに表示できます。
Android 4.1 では、Android の通知フレームワークが大幅に更新されています。アプリでは、ピンチ操作またはスワイプによって展開と折りたたみが可能な、大きいサイズのリッチな通知をユーザーに表示できるようになりました。通知は写真などの新しいタイプのコンテンツをサポートしており、優先度を設定することもできます。さらに、複数のアクションを含めることさえ可能です。
アプリでは、改良された通知ビルダーを使って、使用領域の大きい通知(最大高さ 256 dp)を作成できます。通知の作成では、以下の 3 つのテンプレート化された通知スタイルを使用できます。
- BigTextStyle — 複数行の TextView オブジェクトを含む通知。
- BigInboxStyle — 任意のタイプのリスト(メッセージや見出しなど)を表示する通知。
- BigPictureStyle — ビットマップなどの映像コンテンツを表示する通知。
テンプレート化されたスタイルだけでなく、任意のリモート View を使用して独自の通知スタイルを作成することもできます。
アプリでは最大 3 つのアクションを通知に追加できます。追加したアクションは通知内容の下に表示されます。ユーザーはアクションを通じて、アプリにアクセスせずに、メールや電話などの別の方法で通知の内容に直接応答することができます。
展開可能な通知では、アプリからユーザーにより多くの情報をオンデマンドで簡単に提供できます。ユーザーは制御を維持したまま、通知を長押しすることで、送信者の情報を取得したり、必要に応じてアプリからのその後の通知を無効にしたりできます。
サイズ変更可能なアプリ ウィジェット
Android 4.1 ではアプリ ウィジェットが改良されており、ユーザーがホーム画面上にドロップした場所、ユーザーが展開できるサイズ、ホーム画面で利用できる空き領域に基づいて自動的にサイズ変更できます。新しい App Widget API では、ウィジェットのサイズが変更されたときにアプリ ウィジェットのコンテンツを最適化できます。
ウィジェットのサイズが変更されると、システムからホストアプリのウィジェット プロバイダに通知されるため、ウィジェットのコンテンツを必要に応じて再読み込みできます。たとえばウィジェットには、より大きいサイズのリッチなグラフィックや、追加の機能またはオプションを表示できます。デベロッパーは最大サイズと最小サイズの管理を引き続き維持できるほか、必要に応じて他のウィジェット オプションを更新することもできます。
また、ウィジェットの横向きと縦向きのレイアウトを別々に指定できるため、画面の向きが変更されたときにシステムが必要に応じてレイアウトをインフレートします。
アプリ ウィジェットをサードパーティのランチャーやその他のホストアプリで表示できるようになりました。その際、新しいバインド インテント(AppWidgetManager.ACTION_APPWIDGET_BIND)を使用します。
タスク ナビゲーションの簡素化
Android 4.1 では、ユーザーがアプリ内から使用できる「上方」ナビゲーションを簡単に管理できるため、一貫性のあるユーザー エクスペリエンスを提供できます。
UI の個々の Activity コンポーネント用の上方ナビゲーションを定義するには、アプリのマニフェスト ファイルに新しい XML 属性を追加します。実行時に Activity が開始されると、システムがマニフェスト ファイルから上方ナビゲーション ツリーを抽出し、アクションバー内に上方アフォーダンス ナビゲーションを自動的に作成します。マニフェストで上方ナビゲーションを宣言したデベロッパーは、実行時にコールバックによってナビゲーションを管理する必要がなくなります(必要な場合は管理することも可能です)。
また、新しい TaskStackBuilder クラスを使用すると、合成タスクスタックをすばやく組み立てて、すぐに開始するか、または Activity が PendingIntent から開始されたときに使用できます。合成タスクスタックを作成すると、ユーザーが Activity をリモートビュー(ホーム画面のウィジェットや通知など)から開始したときに特に便利です。これは、合成タスクスタックを使用すると、後方ナビゲーションにおいて一貫性のある管理されたエクスペリエンスを提供できるためです。
Activity の開始時の簡単なアニメーション
新しいヘルパークラスの ActivityOptions を使用すると、Activity の開始時に表示されるアニメーションを作成および管理できます。このヘルパークラスでは、Activity の開始時に使用するカスタムのアニメーション リソースを指定できます。または、画面上で指定した任意の長方形から開始され、必要に応じてサムネイル ビットマップを含む新しいズーム アニメーションをリクエストできます。
背景を黒くするモードおよび全画面表示モードへの移行
View 内で新しいシステム UI フラグを使用すると、通常のアプリ UI(アクションバー、ナビゲーション バー、システムバーが表示される)から「背景を黒くするモード」(ステータスバーとアクションバーが非表示になり、ナビゲーション バーが暗く表示される)または「全画面表示モード」(ステータスバー、アクションバー、ナビゲーション バーがすべて非表示になる)にクリーンに移行できます。
新しいタイプのリモート対応ビュー
デベロッパーは、ホーム画面ウィジェットと通知で GridLayout ビューと ViewStub ビューを使用できるようになりました。GridLayout を使用すると、リモートビューのコンテンツを構成し、浅層の UI 階層で子ビューの配置を管理できます。ViewStub は、サイズがゼロの目に見えない View です。ViewStub を使用すると、実行時にレイアウト リソースをゆっくりとインフレートできます。
ライブ壁紙のプレビュー
Android 4.1 では、ライブ壁紙を含むアプリからユーザーが簡単にライブ壁紙を見つけてインストールすることができます。アプリにライブ壁紙が含まれている場合、ライブ壁紙のプレビューをユーザーに表示する Activity(ACTION_CHANGE_LIVE_WALLPAPER)を専用のアプリから開始できるようになりました。ユーザーはプレビューからライブ壁紙を直接読み込むことができます。
高解像度の連絡先の写真
Android 4.1 では、720 x 720 までのサイズの連絡先の写真を保存でき、個性あふれる豪華な連絡先を作成できます。アプリでは、720 x 720 のサイズの連絡先の写真を保存および取得でき、必要に応じて他のサイズを使用することもできます。特定のデバイスでサポートされている最大写真サイズは異なる場合があるため、アプリで実行時に組み込みの連絡先プロバイダに照会して、現在のデバイスの最大サイズを取得する必要があります。
新しい入力タイプと機能
デバイスの追加および削除の確認
アプリでは、新しい入力デバイスが USB、Bluetooth、その他の接続タイプによって接続されたときに通知を受け取るよう登録することができます。アプリでこの情報を使用すると、必要に応じて状態や機能を変更できます。たとえばゲームでは、新しいキーボードやジョイスティックが接続され、新しいプレーヤーが存在することを示す通知を受け取ることができます。
入力デバイスの機能の照会
Android 4.1 には、接続済みで使用可能なすべての入力デバイスをアプリやゲームで最大限に活用するための API が用意されています。
アプリからデバイス マネージャーに照会して、現在接続されているすべての入力デバイスを列挙し、それぞれの機能を確認することができます。
入力デバイスのバイブレーションの制御
その他の機能として、接続済みの入力デバイスに関連付けられているバイブレーション サービス(Rumble Pak コントローラ用など)をアプリで利用できるようになりました。
アニメーションとグラフィック
アプリ用の vsync
Android フレームワーク全体に vsync を拡張すると、フレームレートの安定性を高め、UI をスムーズかつ安定的に表示できます。Android 4.1 では、アプリでもメリットが得られるよう、アプリから開始されたすべての描画およびアニメーションに vsync タイミングを拡張しています。これにより、UI スレッド上の処理を最適化し、同期に必要な時間を安定して確保できます。
アプリは Android のアニメーション フレームワークを介して、vsync タイミングを無料で利用できます。アニメーション フレームワークは vsync タイミングを利用して、アニメーター間の同期を自動的に処理します。
特殊な用途のアプリでは、新しい Choreographer クラスで公開されている API を介して vsync タイミングにアクセスできます。アプリは次の vsync フレームで無効化をリクエストできます。この方法は、アプリがアニメーション フレームワークを使用していない場合にアニメーションのスケジュールを設定するのに適しています。より高度な用途のアプリでは、Choreographer クラスが次のフレームで実行するコールバックを送信できます。
新しいアニメーション アクションと遷移タイプ
アニメーション フレームワークでは、ViewPropertyAnimator アニメーションを実行する場合に行う開始アクションと終了アクションを定義することで、アプリ内で他のアニメーションやアクションと同期できるようになりました。アクションでは実行可能な任意のオブジェクトを実行できます。たとえば、実行可能なオブジェクトでは、前のアニメーションが終了したときに開始する別のアニメーションを指定できます。
また、ViewPropertyAnimator がアニメーションの途中でレイヤを使用するように指定することもできます。以前は、複雑なビューをアニメ化するには、アニメーションを開始する前にレイヤを設定して、アニメーションが終了したときにレイヤを削除するように onAnimationEnd() イベントを処理する方法が推奨されていました。このプロセスは現在、ViewPropertyAnimator の withLayer() メソッドによって簡素化されています(メソッドを 1 回呼び出すだけです)。
LayoutTransition の新しい遷移タイプを使用すると、アニメーションを自動化し、ViewGroup のあらゆるレイアウト変更に対応できます。
新しい接続タイプ
Android ビーム
Android ビームは NFC をベースとする人気のテクノロジーです。ユーザーは Android ビームを使用することで、NFC 対応の 2 台のスマートフォンを同時にタップするだけですぐに共有できます。
Android 4.1 の Android ビームでは、データ転送に Bluetooth を利用することで、画像、動画、その他のペイロードを簡単に共有できます。ユーザーが転送をトリガーすると、Android ビームによって NFC から Bluetooth に引き渡されるため、デバイス間のファイル転送をきわめて簡単に管理できます。
Wi-Fi ネットワークのサービス ディスカバリ
Android 4.1 では、マルチキャスト DNS ベースのサービス ディスカバリに対するサポートが導入されています。アプリでサービス ディスカバリを使用すると、Wi-Fi ネットワーク上のピアデバイス(モバイル デバイス、プリンタ、カメラ、メディア プレーヤーなど)が提供するサービスを検出して接続することができます。デベロッパーは Wi-Fi ネットワークのサービス ディスカバリを利用して、クロス プラットフォームやマルチプレーヤー型のゲームおよびアプリに適したエクスペリエンスを実現できます。
サービス ディスカバリ API をアプリで使用し、任意のタイプのサービスを作成して登録すると、NSD 対応の他のデバイスでそのサービスを検出できます。サービスは、人が読める形式の文字列識別子を使用して、ネットワーク全体にマルチキャストでアドバタイズされます。このため、ユーザーはサービスのタイプを簡単に特定できます。
ユーザーのデバイスでこの API を使用すると、ローカルの Wi-Fi ネットワークに接続されているデバイスで利用可能なサービスをスキャンして検出できます。検出後、アプリでこの API を使用して、ソケット接続を確立できる IP アドレスとポートにサービスを解決できます。
この API を利用すると、新しい機能をアプリに組み込むことができます。たとえばユーザーは、Wi-Fi ピアツーピア接続をサポートする別のモバイル デバイスでウェブカメラ、プリンタ、アプリに接続できます。
Wi-Fi P2P のサービス ディスカバリ
Ice Cream Sandwich に Wi-Fi ピアツーピア(P2P)に対するサポートが導入されました。Wi-Fi P2P は、アプリが(Wi-Fi Alliance の Wi-Fi Direct™ 認定プログラムに従い)高帯域幅のピアツーピア接続を介して、検出とペア設定を直接行えるようにするためのテクノロジーです。Wi-Fi P2P を使用すると、利用できるモバイル ネットワークや Wi-Fi がない場所でも、メディア、写真、ファイル、その他のタイプのデータやセッションを共有することができます。
Android 4.1 では Wi-Fi P2P がさらに進化し、事前に関連付けられたサービス ディスカバリに対する API サポートが追加されています。事前に関連付けられたサービス ディスカバリを使用すると、アプリが接続を試みる前に、サポート対象のサービスに関する有用な情報を近くのデバイスから取得できます。アプリでは、特定のサービスの検出を開始して、検出されたデバイスのリストをフィルタし、対象のサービスやアプリを実際にサポートしているデバイスに絞り込むことができます。
たとえばアプリは、近くにあるすべての Wi-Fi P2P デバイスを検出するのではなく、「プリンタ」や、特定のゲームを使用できるデバイスのみを検出できます。その一方で、アプリは他のデバイスに提供しているサービスをアドバタイズでき、デバイスはサービスを検出してから接続をネゴシエートできます。このため、ユーザーにとって検出とペア設定が大幅に簡素化されるうえ、アプリで Wi-Fi P2P をより効果的に利用できるようになります。
Wi-Fi P2P のサービス ディスカバリでは、写真、動画、ゲームプレイ、スコアなど、ほとんど何でも共有できるアプリやマルチプレーヤー ゲームを作成できます。しかも、インターネットやモバイル ネットワークに接続する必要がありません。ユーザーが接続に使用できるのはダイレクト P2P 接続のみのため、モバイル帯域幅を使用せずに済みます。
ネットワーク帯域幅の管理
Android 4.1 は、デバイスが従量制ネットワークに接続されている場合(モバイル アクセス ポイントへのテザリングを含む)、アプリが適切にデータ使用量を管理できるようサポートします。アプリは、比較的高額になる可能性がある大規模なダウンロードを開始する前に、現在のネットワークが従量制かどうかを照会できます。API を使用すると、データ使用量の影響を受けやすいネットワークを明確に把握し、それに応じてネットワーク アクティビティを管理することができます。
新しいメディア機能
メディア コーデックへのアクセス
Android 4.1 は、プラットフォームのハードウェアおよびソフトウェア コーデックへの低レベル アクセスを提供します。アプリは、デバイスで使用できる低レベルのメディア コーデックを検出するようシステムに照会し、必要な方法でそれらを使用できます。たとえば、メディア コーデックの複数のインスタンスを作成し、入力バッファをキューに登録して、出力バッファを戻り値として受け取ることができます。また、メディア コーデック フレームワークは保護されたコンテンツもサポートしています。アプリでは、デバイスで使用可能な DRM ソリューションを通じて、保護されたコンテンツを再生できるコーデックを照会できます。
USB オーディオ
USB オーディオ出力のサポートにより、ハードウェア ベンダーは、Android デバイスとインターフェースするオーディオ ドックなどのハードウェアを作成できます。この機能は Android Open Accessory Development Kit(ADK)でも公開されており、独自のハードウェアを作成する機会をすべてのデベロッパーに提供します。
オーディオ録音のトリガー
Android では、オーディオ再生トラックの完了をきっかけにオーディオ録音をトリガーできます。これは、音声の録音を開始する際に発信音を再生してユーザーに指示を出すような場合に便利です。この機能は録音を同期させるのに役立ちます。現在再生されている音声を録音せずに済むほか、録音があまり遅れないようにすることができます。
マルチチャンネル オーディオ
Android 4.1 は、HDMI ポートを介してハードウェア マルチチャンネル オーディオを出力するデバイスにおいて、マルチチャンネル オーディオをサポートしています。マルチチャンネル オーディオを使用すると、ゲーム、音楽アプリ、動画プレーヤーなどのアプリのユーザーにリッチなメディア エクスペリエンスを提供できます。サポート対象のハードウェアが搭載されていないデバイスの場合、デバイスでサポートされているチャンネル(通常はステレオ)の数に合わせて Android が自動的に音声をダウンミックスします。
Android 4.1 では、AAC 5.1 オーディオのエンコードおよびデコードに対する組み込みサポートも追加されています。
音声の前処理
デベロッパーは録音対象の音声に前処理効果を適用できます。たとえば、スピーチの録音品質の向上のためにノイズ キャンセレーションを適用したり、音響エコー用にエコー キャンセラを適用したりできます。さらに、ボリューム レベルが安定しない音声に対してオート ゲイン コントロールを適用することもできます。高音質かつ明瞭なオーディオ録音が必要なアプリでは、このようなプリプロセッサが役に立ちます。
オーディオ チェーン
MediaPlayer では、オーディオ ファイルを一時停止せずに再生するために、オーディオ ストリームを連結することができます。この機能は、オーディオ ファイル間のシームレスな移行を必要とするアプリ(音楽プレーヤーなど)で、連続する曲が収録されているアルバムを再生したり、ゲームをプレイしたりする場合に役立ちます。
メディア ルーター
新しい API の MediaRouter、MediaRouteActionProvider、MediaRouteButton は、メディアを再生する場所を選択するための標準的なメカニズムと UI を提供します。有線ヘッドセット、A2DP Bluetooth のヘッドセットおよびスピーカーに対するサポートが組み込まれており、専用のアプリ内に独自のルーティング オプションを追加できます。
Renderscript の計算
Android 4.1 では Renderscript の計算が拡張され、柔軟性が向上しています。Renderscript Compute のスクリプトでテクスチャをサンプリングできるようになったほか、スクリプトで必要な浮動小数点の精度を定義するために新しいプラグマを使用できるようになりました。これにより、NEON 命令(CPU パスでの高速ベクトル演算処理など)を有効にすることができます(完全な IEEE 754-2008 標準では有効にできません)。
Renderscript Compute のスクリプトは、現在、x86 ベースのエミュレータとハードウェア デバイスでデバッグできます。また、単一の Renderscript ソースファイル内で複数のルートスタイルのカーネルを定義することもできます。
Android ブラウザと WebView
Android 4.1 では、Android ブラウザと WebView に関する以下の機能強化が行われています。
- HTML5 動画のユーザー エクスペリエンスが向上しました(タップによる再生と一時停止、インライン モードから全画面表示モードへのスムーズな移行など)。
- レンダリング速度の向上とメモリ使用量の削減により、スクロールとズームのパフォーマンスが向上しました。
- HTML5 / CSS3 / Canvas アニメーションのパフォーマンスが向上しました。
- テキスト入力が改善されました。
- JavaScript エンジン(V8)がアップデートされ、JavaScript のパフォーマンスが向上しました。
- 更新版の HTML5 メディア キャプチャの仕様(input type=file 要素の「capture」属性)がサポートされるようになりました。
Google API とサービス
Android の機能をさらに拡張するために、Android 向けの新しいサービスがいくつか利用できるようになりました。
Android 用 Google クラウド メッセージング
Google クラウド メッセージング(GCM)は、デベロッパーが独自の同期ソリューションを使用せずにショート メッセージ データを Android デバイス上のユーザーに送信するためのサービスです。
GCM では、メッセージのキューへの登録とターゲット Android デバイスへの配信を効率化するためのすべての項目を処理します。GCM はメッセージのマルチキャストをサポートしており、1 回のリクエストで最大 1,000 台の接続済みデバイスに同時にアクセスできます。また、メッセージのペイロードもサポートしています。つまりデベロッパーは、デバイス上のアプリに tickle メッセージを送信できるだけでなく、最大 4K のデータも送信できます。
GCM はすべてのデベロッパーが無料で使用でき、簡単に登録できます。登録、ダウンロード、ドキュメントについては、Google クラウド メッセージングのページをご覧ください。
アプリの暗号化
Android 4.1 以降では、Google Play がデバイス固有の鍵を使って有料アプリをすべて暗号化することで、アプリのアセットを保護しています。アセットの配信やデバイスへの保存はその後で行われます。
スマートなアプリ アップデート
スマートなアプリ アップデートは Google Play の新機能で、アプリ アップデートのデバイスへの配信を効率的に行うことができます。デベロッパーがアップデートを公開すると、Google Play は APK 全体ではなく、変更されたビットのみをデバイスに配信するようになりました。これにより、ほとんどの場合、更新のサイズが大幅に軽減されるため、ダウンロードが速くなり、デバイスのバッテリーを節約し、ユーザーのモバイルデータプランの帯域幅の使用量を節約できます。スマートなアプリ アップデートの平均サイズは、APK のフル アップデートの約 3 分の 1 になります。
Google Play 開発者サービス
Google Play 開発者サービスでは、認証などの Google サービスを、Google Play を介して配信されるアプリに統合することができます。
Google Play 開発者サービスは Google Play によってエンドユーザー デバイスに自動的にプロビジョニングされるため、アプリではシン クライアント ライブラリだけが必要になります。
アプリには小規模なクライアント ライブラリしか含まれていないため、これらのサービスを利用するにあたり、ダウンロード サイズやストレージ フットプリントが大幅に増えることはありません。また、Google Play はサービスに通常のアップデートも配信します。デベロッパーがアプリ アップデートを公開する必要はありません。
Google Play 開発者サービスに含まれている API について詳しくは、Google Play 開発者サービスのデベロッパー ページをご覧ください。