読者です 読者をやめる 読者になる 読者になる

Meblog

このブログ記事は個人の見解であり、所属する組織の公式見解ではありません

Important Behavior Changes

Android 5.0 APIs | Android DevelopersのImportant Behavior Changesを全文訳しました。誤訳、ツッコミ、入れるべき訳註あれば教えて下さい。

      • -

Important Behavior Changes (重要な動作変更)

すでにリリース済みのAndroidアプリがある場合、Android5.0による影響があるかもしれません。注意をお願いします。

新しいAndroid Runtime(ART)に対するテストを行っていない場合

4.4では試験的にAndroid Runtime(ART)を導入しました。4.4ではARTは代替の機能であり、デフォルトではDalvicが使われていました。Android5.0ではARTがデフォルトのランタイムになります。

ARTの新機能の概要を見るにはIntroducing ARTを参照してください。主な変更点としては次のようなものがあります。

ARTへの乗り換えでは、ほとんどのアンドロイドアプリは変更の必要はありません。しかし一方で、Dalvicでは動いていたものがARTでは動作しない、という技術も存在します。最重要な課題についてはVerifying App Behavior on the Android Runtime (ART)を参照してください。特に中止すべき事項として以下が挙げられます。

  • C/C++コードを用いるためのJNIを用いている場合
  • 非標準のツール(難読化などの)を用いている場合
  • compacting GCと相容れない技術を使っている場合(現在、ARTではCompactingGCは実装していないが、Android Open Source Projectで進行中です)

通知を用いている場合

通知をAndroid5.0のアカウントに変更することに注意してください。Android 5.0 に対応する通知のデザインについて詳しく知りたい場合にはhttp://developer.android.com/design/patterns/notifications.html:notifications design guideを参照すること

マテリアルデザインスタイル

マテリアルデザインを適用しているため、通知は白背景(もしくは薄い色)の上に濃い文字で描かれます。

音とバイブレーション

Ringtone, MediaPlayer, Vibratorクラスを用いて音やバイブを扱っている場合には、このコードを削除し、システムがpriorityモードで正しく通知できるようにしてください。もしくはNotification.Builderメソッドを用いて、音やサウンドを追加するようにしてください。

RINGER_MODE_SILENTを設定すると、新しいpriorityモードが設定されます。端末のPriorityモードを元のままにしておきたい場合は、RINGER_MODE_NORMALかRINGER_MODE_VIBRATEを設定するようにしてください。

今まではAndroidはSTREAM_MUSICをタブレット端末のボリュームコントロールにおけるマスタとして用いてきました。Android 5.0では、マスタボリュームはフォンでもタブレットでも統一され、STREAM_RINGかSTREAM_NOTIFICATIONでコントロールするようになりました。

ロックスクリーン上の通知

Android 5.0のデフォルトでは、通知はユーザのロックスクリーンに出現するようになりました。ユーザは機密情報が表示されるのを防ぐかどうかを選ぶことができ、これを選択した場合には、システムは自動的に通知上のテキストを修正します。この通知をカスタマイズするにはsetPublicVersion()を使います。

メディアプレイバック

プレイバックステータスを表示したり、コントロールを渡す通知を実装していた場合、RemoteViews.RemoteViewをカスタムするのではなく、Notification.MediaStyleテンプレートを使うことを検討してください。どちらの実装方法を選んだとしても通知のvisibilityをVISIBILITY_PUBLICに設定してください。これはロックスクリーンからのアクセスを可能にします。また、Andrid5.0の初期の時点で既に、RemoeControlClientではもうロックスクリーン上に表示しないことに留意してください。詳しくは「RemoteControlClientを使っている場合」を参照してください。

ヘッドアップ 通知

通知はデバイスが(デバイスがロックされておらず、スクリーンがON状態である)アクティブのとき、小さなフロートウインドウの中に表示することができます(ヘッドアップ通知と呼ばれています)。ヘッドアップ通知は、今までの通知のコンパクトにしたものに似ていますが、アクションボタンを表示できる点が異なります。ユーザはヘッドアップ通知上のボタンを押すことによって、対応するアプリを起動することなく、通知に反応したり、無視したりすることができます。

どのようなときにヘッドアップ通知が出るか、その条件を以下に上げてみます。

  • ユーザのアクティビティがフルスクリーン(fullScreenIntent)のとき
  • 通知の優先度が高く、通知音やバイブを用いているとき

既に今までのアプリにこのような使用場面があったとき、ヘッドアップ通知が正しく出ることを確認して下さい。

RemoteControlClient を用いている場合

RemoteControlClientは非推奨となりました。その代わりにMediaSession APIが使用可能となります。

Android5.0のロックスクリーンはMediaSessionやRemoteControlClientの遠隔操作UIを表示しません。その代わりにロックスクリーンの通知を介したplaybackコントロールが使用可能です。これはアンロック状態とロック状態で一貫性のあるUIを提供するよう、playbackではメディアボタンを表示する以上のコントロールが与えられます。

これを実現すべく、Android5.0ではNotification.MediaStyleテンプレートを新たに導入します。Notification.MeiaStyleはアプリのメディアプレイバック通知に埋め込まれたボタンにNotification.Builder.addAction()によって追加した通知アクションを変換します。システムに通知が現在再生中のメディアを制御するということを知らせるためには、セッショントークンをsetSession()メソッドに渡します。

通知をロックスクリーンに表示しても(ロックスクリーンのセキュリティがかかっていなくても)問題ないことを確認し、通知のvisibilityをVISIBLY_PUBLICに設定してください。詳しくは「ロックスクリーン通知」を参照してください。

getRecentTasks()を用いている場合

Android5.0の「起動履歴のドキュメントとアクティビティ並列表示」機能のイントロダクションにもあるように、ActivityManage.getRecentTasks()メソッドはプライバシー強化のため非推奨となりました。後方互換のため、このメソッドはデータのサブセットを返します。また、このサプセットは呼び出し元の自タスクやHomeなどのタスクを含んでいます。もしこのメソッドが自分の自分のタスクを返してしまう場合、getApTask()をお使いください。

NDKを用いている場合

Android5.0は64-bit systemをサポートしています。64-bit拡張はアドレス空間とパフォーマンスを広げる一方、既存の32-bitシステムも完全サポートします。64-bitのサポートは暗号化のためのOpenSSLのパフォーマンスも向上させています。また、このリリースは新たなnative media のNDK APIOpenGL ES 3.1のネイティブもサポートしています。

Android5,0で提供される64-bitサポートを用いるには、NDK Revision 10cをNDKページからダウンロード、インストールしてください。NDKの重要な変更やバグフィクスの状況についてはリリースノートを参照してください。

Serviceにbindしている場合

Context.bindService()メソッドは明示的インテントを必要としました。暗黙的インテントを受け取った場合にはExceptionを投げます。アプリのセキュリティのため、サービスをスタートするときやバインドするときには明示的インテントを使用するようにしてください。そしてサービスのインテントフィルターは宣言しないようにしてください。