Skip to content

Most visited

Recently visited

navigation

Android O での動作変更点

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

これらの変更点の多くは、対象とする Android バージョンに関係なく、すべてのアプリに影響するものです。ただし、Android O を対象とするアプリにのみ影響する変更点もあります。このページではそれらを明確にするために、すべての API レベルを対象としたアプリAndroid O を対象としたアプリの 2 つに分けて説明します。

すべての API レベルを対象としたアプリ

これらの動作の変更点は、対象となる API レベルに関係なく、Android O プラットフォームで実行される すべてのアプリ に適用されます。すべてのデベロッパーはこれらの変更をレビューし、必要に応じてアプリを修正して適切にサポートする必要があります。

バックグラウンド実行制限

アプリがアクティブなコンポーネントのないキャッシュ状態になったときに、電池寿命を伸ばすために Android O に導入された変更点の 1 つとして、システムはアプリが保持している Wakelock をすべて解放します。

Android のバックグラウンド位置情報の制限

電池の消耗を抑え、ユーザー エクスペリエンスやシステムの健全性を保つために、Android O 搭載の端末では、バックグラウンド アプリは最新の位置情報を受信する頻度を減らします。この変更は、Google Play サービスなどの最新の位置情報を受信するすべてのアプリに影響します。

具体的には以下の API に影響があります。

Android O には次の特定のメソッドの変更も含まれます。

アプリが想定どおりに動作していることを確認するには、次の手順を実行します。

これらの変更点の詳細については、バックグラウンド位置情報の制限の説明をご覧ください。

Bluetooth

Android O では、ScanRecord.getBytes() メソッドで取得するデータ長に対して次のような変更が行われています。

入力とナビゲーション

Chrome OS やタブレットなどの大きなフォーム ファクタでの Android アプリの登場と合わせて、Android アプリで使われているキーボード ナビゲーションが復活します。Android O で、ナビゲーション入力デバイスとしてのキーボードの使用に再度対応しました。その結果、矢印およびタブベース ナビゲーションに対して信頼性が高い予測可能なモデルが実現しました。

アプリで使用されるキーボード ナビゲーションに対するサポートを改善する方法について詳しくは、キーボード ナビゲーションのサポートガイドをご覧ください。

ユーザー補助機能

ユーザー補助機能サービスが、アプリの TextView オブジェクト内にあるすべての ClickableSpan インスタンスを認識するようになりました。

アプリを利用しやすくする方法の詳細については、ユーザー補助機能の説明をご覧ください。

セキュリティ

Android O でのセキュリティ関連の変更点は次のとおりです。

アプリのセキュリティの向上に関する補足のガイドラインについては、Android デベロッパー向けセキュリティの説明をご覧ください。

プライバシー

Android O プラットフォームにおけるプライバシー関連の変更点は次のとおりです。

ネットワークと HTTP(S) 接続

Android O では、ネットワークと HTTP(S) 接続の動作が次のように変更されています。

捕捉されていない例外のログ記録

デフォルトの Thread.UncaughtExceptionHandler に対して呼び出しを行わない Thread.UncaughtExceptionHandler をアプリでインストールする場合、捕捉されていない例外が発生した際にシステム側でアプリを終了することはありません。Android O 以降は、この状況では例外のスタックトレースのログが記録されます。前のバージョンのプラットフォームでは、例外のスタックトレースのログは記録されていませんでした。

カスタムの Thread.UncaughtExceptionHandler では、必ずデフォルトのハンドラに対して呼び出しを行うことをお勧めします。そのように実装したアプリは、Android O での変更による影響を受けません。

コレクションの処理

AbstractCollection.removeAll()AbstractCollection.retainAll() は、必ず NullPointerException をスローするようになりました。これまでは、コレクションが空の場合、NullPointerException がスローされませんでした。この変更により、実際の動作がドキュメントと一致するようになります。

ロケールと国際化

Android 7.0(API レベル 24)において、デフォルトのカテゴリ ロケールを指定できる仕組みが導入されました。ただし API によっては、デフォルトの DISPLAY カテゴリ ロケールを使用すべき場面でも、汎用的な Locale.getDefault() メソッドを引数なしで使い続けているものありました。Android O においては、次のメソッドで Locale.getDefault() の代わりに Locale.getDefault(Category.DISPLAY) を使用しています。

Locale 引数に指定された displayScript の値が利用できない場合は、Locale.getDisplayScript(Locale)Locale.getDefault() にフォールバックします。

追加されたロケールと国際化に関連する変更内容は次のとおりです。

連絡先プロバイダの利用統計の変更

これまでの Android バージョンでは、Contacts Provider コンポーネントによって各連絡先の利用統計を取得することが可能でした。この利用統計データには、連絡先に関連付けられた各メールアドレスや電話番号、その連絡先に連絡した回数、最後に連絡した日時などの情報が含まれます。READ_CONTACTS パーミッションをリクエストするアプリでは、このデータを読み込むことができます。

このデータをアプリで読み込むには READ_CONTACTS パーミッションをリクエストします。Android O 以降は、利用統計データを要求すると、正確な値ではなく概算値が返されます。Android システム側では正確な値を内部的に保持しているため、この変更によってオートコンプリートの API に影響が生じることはありません。

この動作変更の影響を受けるクエリ パラメータは次のとおりです。

アプリ ショートカット

Android O では、アプリのショートカットが次のように変更されています。

アプリ ショートカットの変更の詳細については、プレビュー機能ガイドのピン留めされたショートカットとウィジェットをご覧ください。

警告ウィンドウ

アプリで SYSTEM_ALERT_WINDOW パーミッションと以下のウィンドウ タイプのいずれかを使用して、他のアプリやシステム ウィンドウ上に警告ウィンドウを表示しようとしている場合:

このような場合、警告ウィンドウは必ず TYPE_APPLICATION_OVERLAY ウィンドウ タイプを使用しているウィンドウの下に表示されます。Android O を対象とするアプリの場合は、TYPE_APPLICATION_OVERLAYウィンドウ タイプを使用して警告ウィンドウを表示します。

詳細については、Android O を対象とするアプリの作成の動作変更の説明に含まれる警告ウィンドウの共通ウィンドウ タイプのセクションをご覧ください。

ビジネスで使用される Android

Android O には、エンタープライズ アプリに影響する変更が含まれています。DPC(デバイス ポリシー コントローラ)などのビジネス用アプリをビルドする場合、ビジネスで使用される Android ページに記載されている変更点を確認し、アプリを適宜修正する必要があります。

Android O を対象としたアプリ

これらの動作の変更点は、O プラットフォーム以降を対象としたアプリのみに適用されます。Android O 以降を対象にしてコンパイルするアプリ、または Android O 以降に対して targetSdkVersion を設定するアプリの場合、必要に応じてアプリを修正して、これらの変更点に適切に対応する必要があります。

バックグラウンド実行制限

端末のパフォーマンスを改善するために、フォアグラウンドで実行されていないアプリの特定の動作はシステムによって制限されます。具体的には次のような制限があります。

詳細については、バックグラウンド実行制限をご覧ください。

セキュリティ

アプリのネットワーク セキュリティ構成がクリアテキスト トラフィックへの対応をオプトアウトした場合、アプリの WebView オブジェクトは HTTP からウェブサイトにアクセスすることができなくなります。代わりに WebView オブジェクトごとに HTTPS を使用してください。

アプリのセキュリティの向上に関する補足のガイドラインについては、Android デベロッパー向けセキュリティの説明をご覧ください。

プライバシー

Android O でのプライバシーに影響する変更点は次のとおりです。

パーミッション

Android O よりも前のバージョンでは、アプリが実行時にパーミッションをリクエストして、そのパーミッションが付与された場合、同じパーミッション グループに属し、かつマニフェストに登録されている残りのパーミッションもアプリに不正に付与されていました。

Android O を対象にしたアプリでは、この動作が修正されています。つまり、アプリには明示的にリクエストしたパーミッションのみが付与されます。ただし、いったんユーザーが任意のパーミッションをアプリに付与すると、そのパーミッション グループに属するパーミッションに対する後続のリクエストは自動で許可されます。

たとえば、あるアプリのマニフェストに READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE が含まれていると仮定します。そのアプリが READ_EXTERNAL_STORAGE をリクエストして、ユーザーがそれを承認したとしましょう。API レベル 24 以下を対象とするアプリの場合は、WRITE_EXTERNAL_STORAGE も同時に付与されます。これらは同じ STORAGE パーミッション グループに属しており、どちらもマニフェストに登録されているためです。一方 Android O を対象とするアプリの場合は、READ_EXTERNAL_STORAGE しか付与されません。ただし、後からアプリで WRITE_EXTERNAL_STORAGE をリクエストした場合は、ユーザーに確認することなく即座にそのアクセス権が付与されます。

メディア

ネイティブ ライブラリ

Android O を対象とするアプリでは、書き込みと実行の両方が可能なロード セグメントが含まれているネイティブ ライブラリはロードされません。この変更により、不正なロード セグメントを含むネイティブ ライブラリを使用しているアプリは機能しなくなる可能性があります。これはセキュリティ強化のための対策です。

詳細については、書き込みおよび実行が可能なセグメントの説明をご覧ください。

これまでの Developer Preview リリースと同様に、Android O でもリンカーに関連するあらゆる問題が可視化されています。リンカーの変更は、アプリが対象とする API レベルに紐付いています。対象とする API レベルでリンカーに変更があった場合、アプリはライブラリをロードできません。リンカーに変更があった API レベルよりも低いレベルを対象としている場合は、logcat に警告が表示されます。Preview リリースの期間中は、logcat だけでなくトーストにもリンカーに関連する問題が表示されます。この変更によって、警告がエラーに変わる API レベルに至る前に問題が明確になります。

コレクションの処理

Android O では、List.sort()Collections.sort() が実装されています。Android 7.x(API レベル 24 と 25)では、これとは逆の実装になっていました。つまり、デフォルトでは List.sort() の実装で Collections.sort() を呼び出していました。

この変更によって、Collections.sort() では List.sort() の最適化された実装を活用できるようになりますが、以下の制限も伴います。

アカウント アクセスと検出の許可

認証システム側でユーザーのアカウントを所有しているか、ユーザーがアクセス権を付与していない限り、アプリ側でユーザー アカウントにアクセスできなくなりました。現在は GET_ACCOUNTS パーミッションだけでは不十分です。アカウントへのアクセス権を付与するには、AccountManager.newChooseAccountIntent() または認証システム固有のメソッドを使用する必要があります。アカウントへのアクセス権を付与されたアプリは、AccountManager.getAccounts() を呼び出してそのアカウントにアクセスできるようになります。

Android O では LOGIN_ACCOUNTS_CHANGED_ACTION が廃止されています。実行時にアカウントの更新情報を取得するには、代わりにアプリで addOnAccountsUpdatedListener() を使用してください。

アカウント アクセスと検出の許可に関する新規追加された API およびメソッドの情報については、本ドキュメントの新規 API のセクションに含まれるアカウント アクセスと検出の許可の説明をご覧ください。

警告ウィンドウ

SYSTEM_ALERT_WINDOW パーミッションを使用するアプリでは、以下のウィンドウ タイプを使用して他のアプリやシステム ウィンドウ上に警告ウィンドウを表示できなくなりました。

代わりに、TYPE_APPLICATION_OVERLAY という新しいウィンドウ タイプをアプリで使用する必要があります。

TYPE_APPLICATION_OVERLAY ウィンドウ タイプを使用してアプリ用の警告ウィンドウを表示する場合は、以下の新しいウィンドウ タイプの特性を考慮するようにしてください。

コンテンツ変更通知

Android O を対象とするアプリに対する ContentResolver.notifyChange()registerContentObserver(Uri, boolean, ContentObserver) の動作方法が変更されています。

これらの API では、すべての URI の認証局に有効な ContentProvider が定義されている必要があります。関係するパーミッション付きの有効な ContentProvider を定義することで、悪意のあるアプリが既存のアプリのコンテンツを変更できないようにし、プライベート データが悪意のあるアプリに流出しないようにします。

This site uses cookies to store your preferences for site-specific language and display options.

Hooray!

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.