開発者向けAndroid Nの情報 API概要

2016/3/26 3790hit

今月初めにAndroid Nの開発者プレビューが突然発表されました。
Androidの新バージョンについてはI/Oで発表されることが多く、
L、MとGoogleI/O時に発表されていたのでまさかこのタイミングでの発表があるとは驚きです。
変更点についてはLほど劇的ではないけれど、Mより大きいように感じました。

原文


Android Nはまだ開発中です。しかしN Developer Previewーの一部を試すことが出来るようになりました。
ここでは開発者のための新機能についてハイライトを紹介します。

Behavior Changesを読みプラットフォームの変化があなたのアプリにどのような影響を及ぼす可能性があるか確認するようにしてください。新機能についてのより詳細はDeveloper guidesを読んでください。新APIの詳細はAPI Referenceをダウンロードして下さい。

マルチウィンドウのサポート

AndroidNには要望が多かったマルチウィンドウのサポートを導入しました。

ユーザーは同時に1つのスクリーンで2つのアプリを開くことが出来ます。
・AndroidNが実行されているスマートフォンとタブレットではユーザーはアプリを並べるside-by-side、一つのアプリを上におかれて、それ以外のアプリが下に並ぶone-above-the-otherの2つのスピリットスクリーンモードで2つのアプリを実行することが出来ます。2つのアプリの間をドラッグアンドドロップすることでアプリの大きさを切替えることが出来ます。

・AndroidTVデバイス上ではアプリを画面の一部に表示するpicture-in-picture mode内に置くことが出来ます。
これにより、コンテンツを見続けたまま、他のアプリを探したり操作することが出来るようになります。より詳細は次のとおりです。

特にタブレットのような大画面デバイスではマルチウィンドウのサポートはユーザーをあなたのアプリに今までよりもつなぎ留めておくことができるでしょう。
アプリ内でドラッグアンドドロップを有効にすることで、ユーザーがコンテンツをあなたのアプリに入れたり出したり出来るようになります。これによりユーザーの操作性を劇的に改善することが出来るでしょう。

アプリでマルチウィンドウのサポートして、マルチウィンドウをどのように扱うかを設定するのは簡単です。たとえば、activityの最小サイズを指定してユーザーがそれ以上サイズを小さく出来ないようにすることが出来ます。マルチウィンドウ表示をアプリで無効にすることも出来ます。それによりシステムはあなたのアプリをフルスクリーンモードで必ず表示するようになります。

より詳細は開発者向けの資料Multi-Window Supportを読んでください。


図1、split-screeen modeで実行中のアプリ

Notificationの改良

AndroidNではより簡単かつ素早く使えるようにNotificationが再設計されました。次のような変更を含みます。
・テンプレートの更新。 Notificationのテンプレートが更新され、新しいヒーロー画像とアバターが強調されます。
開発者は従来のコードに最小限の変更を加えるだけで新しいテンプレートの優位性を活かすことが出来ます。

・バンドルされたNotification郡 システムはメッセージを、例えばトピックでグループ分けして表示できます。
ユーザーはそこで無視やアーカイブといったアクションを行うことが出来ます。もし、Android Wear向けにNotificationを最適化していたら、あなたは既にこのモデルに親しみがあると思います。

・ダイレクトリプライ アプリケーションのリアルタイムな通信のために、Android システムはユーザーがSMSやテキストメッセージなどに素早く返信できるようにNotificationインターフェイスで直接メッセージを返すことが出来るインライン返信をサポートします。

・カスタムビュー 2つの新しいAPI郡によりNotification内でカスタムビューを使うことで、ヘッダーやアクションなどに装飾を施すことが出来ます。


図2、バンドルされたNotification郡とダイレクトリプライ

新機能を実装する方法はNotificationsガイドを見てください。

Profile-guided JIT/AOT compilation

Android NではARTの実行時(JIT)コンパイラーにコードプロファイリングを追加しました。それによりAndroidアプリ実行のパフォーマンスを常に改善します。
JITコンパイラーはARTの現在の事前(AOT)コンパイラを補い、実行時のパフォーマンスを改善するのを助け、ストレージの容量を節約し、アプリの更新とシステム更新を高速化します。

Profile -guided compilationはARTにAOTとJITをデバイスの状況や実際の使用状況に応じてどのように使い分けるかを管理させます。
例えばARTは各アプリのホットなメソッドをプロファイルして最適なパフォーマンスのために事前コンパイルしてキャッシュすることが出来ます。
それ以外の部分については実際に使われるまでコンパイルしないままにします。

さらに、アプリの重要な部分についてのパフォーマンスを改善するために、アプリの全体的なRAM使用量を削減します。(関連するバイナリーを含む)
この機能は特にメモリーの少ない端末で重要です。

ARTはprofile-guided compilationをバッテリーへの影響が最小になるように管理します。事前コンパイルはデバイスが使用されておらず、充電中に行われます。それらを事前に行うことで時間とバッテリーを節約します。

アプリインストールのクイックパス

ARTのJITのコンパイラーによる最も大きな改善点はアプリインストールとシステム更新を高速化することです。サイズの大きなアプリをインストールするときは最適化とインストールにAndroid6.0では数分かかっていましたが、これが数秒になります。システムの更新も同じように高速です。もうアプリの最適なのステップはなくなります。

Doze on the go...

Android6.0ではDozeが導入され、テーブルや引き出しに置かれたままの時など端末が未使用の時、アプリがCPUや通信を使用するのを遅延させることでバッテリーを節約しています。

Android Nでは使用中でもDozeが効くようになりバッテリーを節約します。
画面がしばらくオフでデバイスが充電状態にないとき、DozeはこれまでのCPUとネットワーク通信に対する規制のサブセットをアプリに適用します。これにより、ユーザーは端末をポケットに入れて持ち運ぶ時でもバッテリーを節約できます。

図3 Dozeはデバイスが静止状態にない時でもバッテリーライフを節約するために規制を行おうとします。

バッテリーで動作中に、画面がオフになってちょっとすると、Dozeはネットワークアクセスを制限して、ジョブと動機を遅延させます。短いメンテナンスウィンドウの間、アプリケーションはネットワークアクセスが許可され遅延されているすべてのジョブと同期が実行されます。画面がONになるか充電されるとDozeモードを終了します。

一定期間デバイスが静止していて、スクリーンがオフでバッテリー動作中の場合はDozeはPowerManager.WakeLockAlarmManagerによるCPUとネットワークアクセス、GPS/Wi-Fiスキャンを完全に規制します。

デバイスが動いているかどうかに関わらずDozeに対応するためのベストプラクティスは同じですので、Dozeを取り扱うために最適化されていたら、もう既に準備完了です。そうでなければあなたのアプリをすぐにDozeに対応(adapting your app to Doze)させてください。

Project Svelte:バックグラウンド最適化

Project SvelteはAndroidデバイスエコシステム全体でシステムとアプリが使用するメモリーを最小にする努力を行っています。
Android NにおけるProject Svelteはバックグラウンドで動くアプリの実行方法を最適化することにフォーカスしています。

バックグラウンドプロセスは多くのアプリで欠かすことが出来ない重要な要素です。正しく使えばそれはコンテキストを理解して瞬間的に素早くなり、ユーザー経験をより良くすることができます。正しく使われない場合、RAM(とバッテリー)を無駄に消耗し、他のアプリのパフォーマンスを悪化させます。

Android5.0から導入されたJobSchedulerがバックグランドで動く処理を行うのに好ましい方法です。
アプリがジョブをスケジューリングできて、メモリー、電力、通信状況に応じてシステムを最適化出来ます。JobSchedulerはコントロール性とシンプルさを提供します。全てのアプリがこれを使用して欲しいです。

別の優れたオプションとしてGoogle Play Servicesの一部であるGCMNetworkManagerがあります。job schedulingのような機能をAndroidの古いバージョンとも互換性がある形で提供します。

JobSchedulerとGCMNetworkManagerは今後もユースケースに合わせて拡張していきます。例えばAndroid Nではコンテンツプロバイダーの変更時にバックグラウンドの処理を実行するようにスケジューリングすることが出来るように有りました。同時に特にメモリーの少ないデバイスにおいてシステムのパフォーマンスを悪化させる古いパターンを非推奨にし始めました。

Android Nでは3つの暗黙的ブロードキャストIntentを削除しました。CONNECTIVITY_ACTIONACTION_NEW_PICTUREACTION_NEW_VIDEO
これらは沢山のアプリのバックグラウンドプロセスを同時に実行することが有り、メモリーとバッテリーに負担をかけていました。もし、あなたのアプリでこれらを受信していたら、JobSchedulerと関連したAPI群に移行するためにN開発者プレビューを使用してください。

詳細はBackground Optimizationsを見てください。

Data Saver

モバイル端末のライフサイクル全体に渡ると、一般的にデータ通信のコストは端末の価格を上回ります。多くのユーザーにとって通信データは節約したい重要なコストです。

Android NはData Saver modeを導入します。新しいシステムサービスはローミング中や、データ使用量期間の終了間際やデータ数の少ない料金プランでアプリが使用する通信データを抑えるのに役立ちます。
データセーバーはユーザーにアプリがどのように通信データを使用するかをコントロールさせ、開発者にはData SaverがONの時により効率よくサービスを提供することが出来ます。
ユーザーが設定でData SaverをONにして、デバイスが従量課金のネットワークに接続されている時、システムはバックグラウンドデータの使用をブロックし、フォアグラウンドで動くアプリには可能ならば(ストリーミングのビットレートを減らす、画像のクオリティを落とす、事前読込を多用しないなど)データの使用を控えるように伝えます。
ユーザーは特定のアプリのみ、Data Saver中でもバックグラウンド通信を許可するように指定することが出来ます。Android NはアプリがユーザーのData Saverの設定を受け取り(retrieve the user's Data Saver preferences http://developer.android.com/preview/features/data-saver.html#status)、設定が変更されたことをモニター(monitor preference changes)出来るように、ConnectivityManagerを拡張します。全てのアプリはユーザーがDataSaverを有効化しているかをチェックし、フォアグラウンドとバックグラウンドのデータ使用量を制限する努力を行う必要があります。

Quick Settings Tile API

Quick Settingsは重要な設定とアクションをNotificationシェードに直接表示する一般的かつシンプルな方法です。Android NではQuick settingをより便利で役に立つように拡張します。

追加のQuick Settingタイルのために多くの部屋を増やしました。ユーザーは左右にスワイプすることで別のページを開くことが出来ます。ユーザーがどのQuick Settingsをどこに表示するかのコントロールできるようにもなります。ユーザーはドラッグアンドドロップでタイルを増やしたり移動したりすることが出来ます。

Android Nに追加された新しいAPIにより、開発者は独自のQuick Settingsタイルをユーザーに提供してアプリの鍵となるコントロールやアクションをユーザーが簡単に操作出来るようにすることが出来ます。

Qucik Settingタイルはユーザーがコントロールやアクションを即座にかつ頻繁に行いたい時のために用意されています。アプリを起動するショートカットとして使用してはいけません。

タイルを宣言すると、ユーザーはQuick settingsにドラッグアンドドロップで追加することでユーザーが操作できるようになります。

app tileを作る方法についての情報はAPI Referenceをダウンロードしてandroid.service.quicksettings.Tileを見てください。

着信拒否

AndroidNは着信拒否をプラットフォームとしてサポートし、Service providerが着信拒否リストを管理するためにフレームワークAPIを提供します。標準のSMSアプリ、標準の電話アプリ、そしてキャリアアプリは着信拒否リストに読み書きできます。このリストはそれ以外のアプリからはアクセスできません。

着信拒否はプラットフォームの標準的な機能のため、Androidはデバイス全体で一貫した着信拒否をアプリでサポートする方法を提供します。異なるアプリ間で次のようなことができます。

・通話の着信拒否はテキストメッセージも拒否できます。
・着信拒否にした番号のリストは端末をリセットしたり複数の端末をまたいでも、バックアップと復元機能で維持されます。
・複数のアプリは同じ着信拒否にした番号リストを使用できます。

加えてキャリアアプリをAndroidに統合できるということは、キャリアは端末上の番号拒否リストを読みとって、ユーザーが好まない着信やテキストメッセージをユーザーに届ける前にサーバーサイドのVOIPエンドポイントや電話を転送するときのように途中でブロックできることを意味します。

より詳細は、API Referenceをダウンロードしてandroid.provider.BlockedNumberContractを見てください。

着信のフィルタリング

Android Nでは標準の電話アプリが着信を画面に表示できます。電話アプリは新しいCallScreeningServiceを実装することで、着信時に呼び出されるCall.Detailsにもとづいて幾つかのアクションを行うことが出来ます。例えば
・着信を拒否する。
・着信履歴に残さない
・Notificationに着信を表示しない。
より詳細はAPI Referenceをダウンロードしてandroid.telecom.CallScreeningServiceを見てください。

複数の言語、多くの言語

Android Nはバイリンガルの人が使用しやすいように設定でユーザーに複数の言語を選択できるようになりました。アプリは。例えばユーザーが理解できる複数の翻訳されていないWebページを検索結果として返すという風に、複数の言語を使えるユーザーがより良いユーザー体験を得られるようにするため新しいAPIでユーザーが選択した複数の言語を取得することが出来ます

複数言語サポートと共にAndroidNは利用可能な言語も増えています。25種類以上の英語、スペイン語、フランス語、アラビア語などを元にした地域の言語への対応と、100位上の新しい言語の部分的な対応が追加されます。

アプリはLocaleList.GetDefault()を呼ぶことでユーザーが設定した言語のリストを取得できます。複数地域をサポートするためにAndroidNはリソースの解決方法を変更します。新しいリソース解決ロジックがあなたのアプリで正しく動くことをテストして確認してください。

新しいリソース解決がどのように動くかについてと、ベストプラクティスを知るためにMultilingual Supportを読んでください。

AndroidにおけるICU4J API群

AndroidNはandroid.icuパッケージ内でICU4JAPIのサブセットを提供します。移行は簡単で、殆どcom.java.icuをandroid.icuに変更するだけです。もしアプリ内で既にICU4Jを内包して使用しているならandroid.icu APIに切替えることでAPKサイズを小さく出来ます。

Android ICU4J API群についてはICU4J Supportを見てください。

Open GL™ ES3.2 API

Android Nでは OpenGL ES 3.2のためのフレームワークインターフェイスとプラットフォームの対応を加えました。次を含みます。
EXT_texture_sRGB_decodeのためのAndroid Extension Packの全てのExtension
HDRと deferred shadingのための浮動小数点フレームバッファー
バッチとストリーミングを開演するためのBaseVertex draw call
WebGLのオーバヘッドを減らすRobust bufferアクセスコントロール


AndroidNで動くOpenGLES 3.2のためにフレームハークはGLES32クラスを提供します。OpenGL ES3.2を使用するときは、uses-featureタグとandroid:glEsVersion属性をmanifestファイルに宣言する必要があります。

ランタイムがサポートしているOpenGL ESのバージョンを確認する方法といったOpenGL ESを使うためのより詳細はOpenGL ES API guideを読んでください。

Android TV録画

Android Nは新しいrecording API群によってAndroid TV input servicesでコンテンツの録画と再生機能が加わりました。
TV input services は既存の time-shifting API群の最上部にたって、どのチャンネルが録画されるか、どのようにセッションを保存するかをコントロールし、録画されたコンテンツとユーザーの対話を管理します。

より詳細はAndroid TV Recording APIsを見てください。

Android for Work

Android for Workは沢山の新機能とAPI群をAndroid Nが動作するデバイス向けに追加しています。幾つかのハイライトは次のとおりです。変更点の完全なリストはAndroid for Work Updatesを見てください。

ワークプロファイルにおけるロック解除

プロファイルオーナーはワークプロファイルで実行中のアプリにたいして個別のロック解除を指定できます。認証画面はワークアプリのいずれかをユーザーが開こうとした時に表示されます。認証に完全に成功するとワークプロファイルがアンロックされ必要ならば復号化されます。プロファイルのオーナーはACTION_SET_NEW_PASSWORDプロンプトでユーザーに認証を設定させ、ACTION_SET_NEW_PARENT_PROFILE_PASSWORDでユーザーにデバイスロックをセットさせる事ができます。

プロファイルオーナーはsetPasswordQuality()やsetPasswordMinimumLength()のようなメソッドを使用して認証解除のためのポリシーを設定することが出来ます。(例えばPINを何文字以上にしないといけないとか、指紋でプロファイルをアンロックできるかどうかなど)。プロファイルオーナーは新しいgetParentProfileInstance()メソッドから返されるDevicePolicyManagerのインスタンスを使ってデバイスをロックすることも出来ます。加えてsetOrganizationColor() とsetOrganizationName()メソッドを使用して仕事用の認証スクリーンをカスタマイズすることも出来ます。

仕事を終える

ワークプロファイルを持っている端末ではユーザーはワークモードを切替えることが出来ます。ワークモードがオフになると管理されたユーザーは一時的に使用不可となり、ワークプロファイルのアプリはバックグラウンドでの同期が停止し、Notificationが無効化されます。これにはプロファイルオーナーアプリケーションも含まれます。ワークモードがオフになるとシステムはステータスアイコンでユーザーにワークアプリが起動できないことを伝えます。ランチャーはワークアプリとウィジェットが使用不可であることを伝えます。

VPNの常時オン

端末オーナーとプロファイルオーナーはワークアプリが特定のVPNを通じて通信を行うように保証することができます。システムは自動的にデバイスが起動するとVPNを開始します。

新しいDevicePolicyManagerメソッドはsetAlwaysOnVpnPackage() とandgetAlwaysOnVpnPackage()です。

VPNサービスがアプリの対話を行うことなくシステムにより直接接続されるため、VPNクライアントは常時VPNの新しいエントリーポイントを取り扱う必要があります。サービスは事前にandroid.net.VpnServiceアクションに一致するIntent filterによって、システムに示されます。

ユーザーは設定アプリを開いて無線とネットワークにある「もっと見る」を選び、VPNにて手動でVPNServiceを実装した常時VPNクライアントを設定することも出来ます。

ユーザー補助の改善

Android Nは視覚の設定を新しいデバイスのセットアップ時のようこそ画面で提供します。これにより、ユーザーはより簡単にユーザー補助の機能を見つけて設定しやすくなります。これには拡大操作ジェスチャー、フォントサイズ、表示サイズ、TalkBackが含まれています。

これらのアクセシビリティー機能により、わかりやすい配置となることで、より多くのユーザーがあなたのアプリを使ってみようと思うかもしれません。これらの設定を有効にしてアプリのテストを行ってください。設定のユーザー補助でこれらの機能を有効にできます。

Android Nではユーザー補助サービスとしてスクリーンをタッチするのに障害が有る人向けのサポートも追加されます。新しいAPIには顔追跡や視線追跡によるポイント操作のようなサービスを作ることを可能にします。
より詳細はAPI Referenceをダウンロードしてandroid.accessibilityservice.GestureDescriptionを見てください。

ダイレクトブート

ダイレクトブートはデバイスの起動時間を改善し、予定外の再起動後においても登録済みアプリに一部の制限された機能を許可します。
例えば、ユーザーが寝ている間に暗号化済みの端末が再起動したとしても、登録されたアラームや、メッセージの受信、着信は通常通りにユーザーに通知されます。
再起動した時にユーザー補助サービスを利用することも出来ます。

ダイレクトブートはシステムとアプリデータのどちらもきめ細かい暗号化の設定が出来るように
ファイルベースの暗号化を利用します。
一部のシステムデータと明示的に登録済みアプリデータは端末の暗号化領域を使います。それ以外のシステムデータやユーザーデータ、アプリ、アプリデータは標準で証明書による暗号化が使われます。

ブート時、システムは制限モードになり、端末の暗号化領域のみにアクセス可能となります。その他の一般的なアプリやデータにはアクセスできません。このモードでアプリのコンポーネントを実行したいのであれば、manifestファイルへの登録を行ってください。再起動後、システムは再起動後にLOCKED_BOOT_COMPLETED intentをブロードキャストすることで登録されたコンポーネントをアクティベートします。システムは登録されたデバイスの暗号化アプリデータをアンロック前に使用可能です。それ以外のデータはユーザーがロックスクリーンで認証を行い復号が行われるまで使用できません。

より詳細はDirect Bootを読んでください。

鍵認証

ハードウェアによりサポートされるキーストアはAndroid端末で暗号鍵を作成して保存し、使うための極めて安全な方法を提供します。それにより、LinuxカーネルやAndroidの脆弱性、あるいはルート化された端末によるキーの抽出から保護します。
より簡単かつセキュアにハードウェアでサポートされているキーストアを使用できるようにAndroid Nは鍵認証を導入します。

アプリとオフデバイスは鍵認証を使用してハードウェアでサポートされたRSAまたはECキーペアのどちらかで適用されるか見極めることが出来ます。アプリとオフデバイスのサービスは、有効な認証鍵で署名されている必要があるx.509証明書によりキーペアの情報をリクエストできます。

認証鍵は工場でデバイスのハードウェア内に埋め込まれたECDSA証明書です。
それにより、有効な認証鍵で署名されている証明書がキーストアのキーペアの詳細とともに、ハードウェアでサポートされているキーストアの存在を確実にします。

デバイスが安全なAndroidファクトリーイメージを使用していることを確認するために、鍵認証はbootloaderTrusted Execution Environment (TEE)に次の情報を提出するように求めます。

・デバイスにinstallされたOSのバージョンとパッチレベル
Verified Boot公開鍵とロック状況

ハードウェアでサポートされるキーストアの機能についてはHardware-backed Keystoreを見てください。
加えて鍵認証はAndroidNで指紋認証に基づくfingerprint-bound鍵も導入します。

ネットワークセキュリティー設定

Android NではアプリはHTTPSやTLSなどのセキュアな通信における安全性についてX509TrustManagerなどの誤りが起きやすいプログラムによるAPI群の代わりに、Network Security Configを使用することで一切コードを変更することなく振る舞いをカスタマイズすることが出来ます。

対応した機能は
・トラストアンカーのカスタマイズ アプリケーションがどの認証局 ( CA )でセキュアな接続が保証されるかをカスタマイズする。例えば、特定の信頼済み自己証明書や、特定のパブリック証明局など

・デバッグ時のみのオーバーライド アプリケーション開発者がインストールされるアプリにリスクを追加することなく安全にセキュアな接続をデバッグできるようにする。

・平文通信のオプトアウト アプリケーションが予想外に平文の通信を行ってしまうことから自身を保護する。

・ピン留めされた証明書 セキュアな接続を行うために信用するサーバー証明書を制限する。

より詳細はNetwork Security Configを読んでください。

標準で信頼済みの証明書

Android Nをターゲットにしたアプリは通常システムが提供する証明書だけを信頼し、ユーザーが追加した認証局(CA)を信頼しません。ユーザーが追加した認証局を信頼したいアプリはNetwork Security Configでユーザーが追加したどの認証局を信頼するかを指定する必要があります。

APK署名スキーマV2

APK署名スキーマV2を使用してPackageManagerクラスはアプリを検証することが出来るようになります。APK署名スキーマv2は全てのファイルを署名することで、認証速度を改善し、APKファイルに対するどのような不正な変更も見つけることが出来ます。

後方互換性を維持するために、APKはv2署名スキーマを使用する前にv1署名スキーマ(JAR署名スキーマ)で署名する必要があります。V2署名スキーマはV2スキーマで署名した後に別の証明書で署名すると認証に失敗します。

APK署名スキーマV2は初期のN Developer Previewではまだ利用することが出来ません。

一定のディレクトリーへのアクセス

Android Nは新しいAPIで特定のexternal storage(拡張ストレージ)のディレクトリーに対するアクセスをリクエストすることが出来ます。 それにはSDカードのようなリムーバブルメディアのディレクトリーを含みます。新しいAPIはPicturesディレクトリーのような標準的な拡張ストレージにアクセスする素晴らしく簡単にアクセスします。写真アプリのようなアプリは全てのストレージディレクトリやストレージアクセスフレームワークにアクセスしてユーザーがフォルダを探す必要があるREAD_EXTERNAL_STORAGEの代わりに、このAPIを使用できます。

アプリが新しいAPIを使用すると簡単な方法でユーザーに拡張ストレージへのアクセスについての許可を求めます。システムはどのディレクトリーへのアクセスを要求しているのか明確なシンプルなpermission UIを使用します。

より詳細はScoped Directory Accessを読んでください。

Except as noted, this content is licensed under Creative Commons Attribution 2.5. For details and restrictions, see theContent License.

前:ZenFone2レビューその2 次:ZenFoneレビュー最終回

関連キーワード

[Android][Java][モバイル][IT][翻訳]

コメントを投稿する

名前URI
コメント