page.title=動作の変更点 page.keywords=preview,sdk,compatibility meta.tags="preview", "compatibility" page.tags="preview", "developer preview" page.image=images/cards/card-n-changes_2x.png @jd:body

このドキュメントの内容

  1. パフォーマンスの向上
    1. Doze
    2. バックグラウンド処理の最適化
  2. パーミッションの変更
  3. アプリ間のファイルの共有
  4. ユーザー補助機能の改善
    1. 画面のズーム
    2. セットアップ ウィザードの [Vision Settings]
  5. プラットフォーム ライブラリにリンクした NDK アプリ
  6. Android for Work
  7. アノテーションの保持
  8. その他の重要事項

関連ドキュメント

  1. Android N API の概要

新しい機能に加えて、Android N では、さまざまなシステムおよび API の動作が変更されています。 このドキュメントでは、アプリ開発において把握しておくべき主な変更点について説明します。

過去に Android 向けのアプリを公開したことがある場合は、そのアプリが今回のプラットフォームの変更による影響を受ける可能性があることに注意してください。

電池とメモリ

Android N では、端末の電池寿命を改善したり、RAM の使用量を削減したりするために、システムの動作がいくつか変更されています。 これらの変更は、システム リソースへのアプリのアクセスに加え、特定の暗黙的インテントを介して他のアプリとやり取りする方法に影響を及ぼす可能性があります。

Doze

Android 6.0(API レベル 23)で Doze が導入されました。これは、ユーザーが端末を電源と接続せずに静止状態にし、画面をオフにすると、CPU とネットワークのアクティビティを保留して電池寿命を改善するものです。 Android N では、Doze が改良されています。端末を電源と接続せずに画面をオフにすると、端末が静止していなくても(たとえば、ユーザーが携帯端末をポケットに入れて持ち歩いている場合)、CPU およびネットワーク制限のサブセットがアプリに適用されます。

図 1. Doze が第 1 レベルのシステム アクティビティ制限を適用して、電池寿命を改善

端末が電池電源で動作しているときに画面をしばらくオフにすると、端末は Doze モードになり、制限の最初のサブセットが適用されます。 これにより、アプリのネットワーク アクセスが切断されてジョブと同期が保留されます。 端末が Doze モードに入った後、しばらくの間静止状態になると、残りの Doze 制限が {@link android.os.PowerManager.WakeLock}、{@link android.app.AlarmManager} アラーム、GPS、Wi-Fi スキャンに適用されます。 適用される Doze 制限が一部であるか完全なものであるかには関係なく、端末は Doze モードから短時間抜け出し、メンテナンス ウィンドウと呼ばれる状態になります。このとき、アプリはネットワーク アクセスを許可され、保留されたジョブや同期を実行することができます。

図 2. 端末がしばらくの間静止状態になると、Doze が第 2 レベルのシステム アクティビティ制限を適用する

画面をオンにするか、端末を電源に接続すると、Doze モードは解除され、これらの処理の制限は適用されなくなります。 Doze とアプリ スタンバイ用に最適化するで説明したように、今回追加された動作は、Android 6.0(API レベル 23)で導入された以前のバージョンの Doze にアプリを対応させるための推奨事項とベスト プラクティスには影響を及ぼしません。 メッセージの送受信に Google Cloud Messaging(GCM)を使用するなどの推奨事項を引き続き順守して、追加の Doze 動作に対応するためにアップデートを計画する必要があります。

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

Android N では、メモリ使用量と消費電力を最適化するために、3 つの暗黙的なブロードキャストが削除されています。 この変更が必要になるのは、暗黙的なブロードキャストが行われると、バックグラウンドでブロードキャストをリッスンするように登録されているアプリが頻繁に起動されるためです。 これらのブロードキャストを削除すると端末のパフォーマンスとユーザー エクスペリエンスが大幅に向上します。

モバイル端末では、Wi-Fi とモバイルデータ間を移動するときなど、接続が頻繁に変化します。 現在のアプリでは、暗黙的な {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} ブロードキャストのレシーバーをマニフェストに登録することにより、接続の変化を監視できるようになっています。 多くのアプリがこのブロードキャストを受信する登録を行っているので、一度ネットワークの切り替えが起こるだけですべてのアプリがアクティブになり、ブロードキャストが同時に処理されます。

同様に、旧バージョンの Android では、暗黙的な {@link android.hardware.Camera#ACTION_NEW_PICTURE} ブロードキャストと {@link android.hardware.Camera#ACTION_NEW_VIDEO} ブロードキャストをカメラなどの他のアプリから受信するよう登録できました。 ユーザーがカメラアプリで写真を撮ると、これらのアプリがアクティブになり、ブロードキャストが処理されます。

Android N では、こういった問題を緩和するために、以下の最適化手法が適用されます。

アプリでこれらのインテントのいずれかを使用する場合は、Android N 端末を適切にターゲットにできるよう可能な限りインテントとの依存性を削除する必要があります。 Android フレームワークは、これらの暗黙的なブロードキャストの必要性を軽減するいくつかのソリューションを提供します。 たとえば、{@link android.app.job.JobScheduler} API は、従量制ではないネットワークへの接続など、指定された条件のときに、ネットワーク操作をスケジュールするための堅牢なメカニズムを提供します。 また、{@link android.app.job.JobScheduler} を使用して、コンテンツ プロバイダの変更に対応することもできます。

N でのバックグラウンド処理の最適化や、アプリで必要となる対応の詳細については、バックグラウンド処理の最適化をご覧ください。

パーミッションの変更

Android N では、アプリに影響を及ぼす可能性のあるパーミッションが変更されています。

ファイル システムのパーミッションの変更

プライベート ファイルのセキュリティを強化するために、Android N 以降向けのアプリのプライベート ディレクトリにはアクセス制限があります(0700)。 この設定により、サイズや存在など、プライベート ファイルのメタデータの漏洩を防ぐことができます。 このパーミッションの変更には、以下のような複数の副作用があります。

アプリ間のファイルの共有

Android N 向けのアプリでは、Android フレームワークにより、アプリ以外の {@code file://} URI の公開を禁止する {@link android.os.StrictMode} API ポリシーが適用されます。 ファイル URI を含むインテントがアプリからなくなると、{@code FileUriExposedException} 例外によりアプリはエラーになります。

アプリ間でファイルを共有するには、{@code content://} URI を送信して、この URI に一時的なアクセス パーミッションを付与する必要があります。 このパーミッションを付与する最も簡単な方法は、{@link android.support.v4.content.FileProvider} クラスを使用することです。 パーミッションとファイルの共有の詳細については、ファイルの共有をご覧ください。

ユーザー補助機能の改善

Android N には、低視力のユーザーまたは視覚障害のあるユーザー向けのプラットフォームのユーザビリティを改善するための変更がいくつか追加されています。 通常は、これらの変更によってアプリのコードを変更する必要はありませんが、この機能について理解し、アプリでテストして、ユーザー エクスペリエンスに与える潜在的な影響を評価する必要があります。

画面のズーム

Android N では、ディスプレイ サイズを設定して、画面上のすべての要素を拡大または縮小することができるので、視覚障害のあるユーザーに対する端末のユーザー補助機能が向上しています。 ユーザーは、一般的な中くらいのサイズの携帯端末 Nexus 4 の幅である sw320dp の画面最小幅を超えて画面をズームできません。

図 3. 右側の画面では、Android N システム イメージを実行している端末のディスプレイ サイズを拡大している

端末の画面密度が変更されると、以下の方法で実行中のアプリに通知されます。

Android のベスト プラクティスに従っているほとんどのアプリでは、この機能をサポートするための変更を加える必要はありません。 以下の点は確認する必要があります。

セットアップ ウィザードの [Vision Settings]

Android N には、オープニング画面に [Vision Settings] が追加されています。ユーザーはこれを使用して、新しい端末で以下のユーザー補助機能設定を設定できます。 ズーム操作フォントサイズディスプレイ サイズTalkBack。 この変更により、さまざまな画面設定に関連するバグが顕在化する可能性があります。 この機能が及ぼす影響を評価するには、これらの設定を有効にしてアプリをテストする必要があります。 設定は、[Settings] > [Accessibility] にあります。

プラットフォーム ライブラリにリンクした NDK アプリ

Android N では、非パブリック API のロードを防止するために、名前空間が変更されています。 NDK を使用する場合、Android プラットフォームのパブリック API のみを使用する必要があります。 Android の次の公式リリースで非パブリック API を使用すると、アプリがクラッシュする可能性があります。

非パブリック API を使用していることを警告するために、アプリが非パブリック API を呼び出すと、Android N 端末で実行されているアプリは logcat 出力でエラーを生成します。 この状態を認識してもらえるよう、このエラーはメッセージとして端末の画面にも表示されます。 アプリのコードを確認して、非パブリック プラットフォーム API を削除し、プレビュー端末またはエミュレータを使用して、アプリを十分にテストしてください。

アプリがプラットフォーム ライブラリに依存している場合は、NDK ドキュメントにある一般的な修正例を参照して、共通のプライベート API をそれと同等の機能を持つパブリック API に置き換えます。 特に、libpng など、プラットフォームに含まれていて NDK には含まれていないライブラリをアプリで使用している場合、気付かないうちにプラットフォーム ライブラリにリンクしていることがあります。 この場合、APK にリンク対象のすべての .so ファイルが含まれていることを確認します。

警告:サードパーティのライブラリの中には非パブリック API にリンクしているものもあります。 アプリがこれらのライブラリを使用している場合、Android の次の公式リリースでアプリを実行すると、アプリがクラッシュする可能性があります。

NDK に含まれていないネイティブ ライブラリは Android のリリース版が変わると変更または削除される場合があるため、アプリでは、こういったライブラリへの依存やその使用を避けてください。 OpenSSL から BoringSSL への移行は、そのような変更の一例です。 また、NDK に含まれていないプラットフォーム ライブラリには互換性要件がないため、端末によって互換性レベルが異なる場合があります。 古い端末で非 NDK ライブラリにアクセスする必要がある場合は、Android API レベルに応じてロードしてください。

こうしたタイプの問題の診断を支援するために、Android N でアプリをビルドするときに発生する可能性のある Java および NDK のエラーの例を以下に示します。

Java のエラー例

java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
    is not accessible for the namespace "classloader-namespace"

NDK のエラー例

dlopen failed: cannot locate symbol "__system_property_get" referenced by ...

こうしたタイプのエラーが発生しているアプリの典型的な修正例を以下に示します。

Android for Work

Android N には、証明書のインストール、パスワードの再設定、セカンダリ ユーザーの管理、端末識別子へのアクセスなど、Android for Work をターゲットにしているアプリに対する変更が含まれています。 Android for Work 環境向けのアプリをビルドしている場合、これらの変更点を確認し、変更に応じてアプリを修正する必要があります。

Android N での Android for Work の変更の詳細については、Android for Work のアップデートをご覧ください。

アノテーションの保持

Android N では、アノテーションの表示が無視されていたバグを修正しています。この問題は、ランタイムがこれまでできなかったアノテーションへのアクセスを可能にしました。 これらのアノテーションは以下のとおりです。

アプリでこの動作を利用している場合は、実行時に表示されるアノテーションに保持ポリシーを追加してください。 これは {@code @Retention(RetentionPolicy.RUNTIME)} を使用して実行できます。

その他の重要事項