Android 9(API レベル 28)ではアプリで利用可能な新しい機能や API が追加され、一部の動作が変更されています。このドキュメントでは、アプリを Android 9 へ移行するための手順を以下の 2 つの主要フェーズに分けて説明します。
- Android 9 との基本的な互換性を確認する
既存のアプリが新しいバージョンのプラットフォームで問題なく動作することを確認します。この段階では、新しい API の使用やアプリの
targetSdkVersion
の変更は行いませんが、軽微な変更が必要になる場合があります。 - 新しいプラットフォームをターゲットとして、Android 9 SDK でコンパイルする。
Android 9 の機能でビルドする
プラットフォームの新機能を利用する準備ができたら、
targetSdkVersion
を28
に更新し、アプリが引き続き予測どおりに動作していることを確認してから、新規 API の使用を開始します。
Android 9 を実行する端末を準備する
互換性のあるデバイスをお持ちの場合は、デバイスのメーカーから Android 9 システム イメージを入手してください。Google Pixel デバイスのファクトリー イメージは、こちらをクリックしてください。一般的な手順 システム イメージの書き込み方法については、こちらをご覧ください。
Android Emulator 用の Android 9 システム イメージもダウンロードできます。SDK マネージャーの [Android API 28] に [Google APIs Intel x86 Atom System Image] として表示されます。
注: Android 9 Emulator のシステム イメージは、 Android Studio 3.1 以降 Android Studio 3.2 は最大限の互換性を備えています。 詳細については、Android 9 SDK を入手するをご覧ください。
Android 9 との互換性を確認する
ここでの目標は、既存のアプリが
Android 9。プラットフォームの変更によってはアプリの動作に影響する可能性があるため、
調整が必要になることがありますが、新しい API や API を使用する必要は
targetSdkVersion
を変更してください。
互換性テストを実施する
Android 9 との互換性テストの大半の部分は、アプリのリリースに向けたテストと同じタイプのテストです。この機会に、アプリの中核品質ガイドラインとテストのおすすめの方法も確認しておきましょう。
テストにはもう 1 つ重要な面があります。Android 9 では Android プラットフォームに変更が加えられました。targetSdkVersion
を変更しなくても、アプリの動作に影響を与える、またはアプリ全体に影響を及ぼす可能性のある変更です。そのため、表 1 に示す主な変更点を確認し、この変更に対処するために実装した修正内容をテストすることが重要になります。
表 1. すべてのアプリに影響する主な変更 Android 9 デバイスで動作するアプリです。
変更 | 概要 |
---|---|
非 SDK インターフェースの制限 |
特定の非 SDK インターフェースへのアクセスは、直接アクセスか、
JNI、またはリフレクションを介して制限付きインターフェースにアクセスしようとすると、次のようなエラーが発生する
NoSuchFieldException と NoSuchMethodException 。
詳細については、非 SDK インターフェースの制限をご覧ください。
|
Crypto プロバイダの削除 |
Android 9 より、Crypto JCA プロバイダは削除されました。電話
SecureRandom.getInstance("SHA1PRNG", "Crypto") まで
NoSuchProviderException をスローします。
|
より厳密な UTF-8 デコーダ | Android 9 より、Java 向けの UTF-8 デコーダがさらに厳密になり、Unicode 標準に準拠するようになります。 |
アイドル状態のアプリによるカメラ、マイク、センサーへのアクセスがブロックされる | アイドル状態のアプリは、カメラ、マイク、SensorManager センサーにアクセスできません。 |
Android 9 で動作するすべてのアプリに関わる動作変更の詳細については、動作の変更点のドキュメントをご覧ください。
ターゲット バージョンを更新して Android P の機能を使用する
このセクションでは、Android 9 を完全にサポートするために、targetSdkVersion
を 28 に更新し、Android 9 で利用可能な新機能を追加する方法について説明します。
Android 9 では、新しい API に加え、いくつかの動作が導入されています。
targetSdkVersion
を 28 に更新すると変更されます。一部の動作が変更されるため
アプリの障害を防ぐためにコードの変更が必要な場合もあるため、
Android 9 をターゲットとするアプリに対する動作変更をすべて確認し、targetSdkVersion
を変更する際に影響を受けるかどうかを確認します。
注: 上述の手順は、 プラットフォームの互換性を確認する Android 9 をターゲットとする設定になっているため、先に必ずこの手順を完了してください。
Android 9 SDK を入手する
Android 9 でアプリをビルドするための SDK パッケージを入手できます。 Android Studio 3.1 以降を使用していること。 Android 9 の新機能がまだ必要なく、単に既存バージョンを 9 のプラットフォームでコンパイルするだけの場合は、Android Studio 3.1 を使用できます。Android Studio 3.2 は、Android 9 の機能を完全にサポートしています。
Android 9 アプリをテストする
上記の準備が完了したら、アプリをビルドしてテストできます。 さらに、Android 9 をターゲットに設定したときに正しく動作することを確認します。 (API レベル 28)。この機会にアプリの中核品質ガイドラインとテストに関するベスト プラクティスも確認しておきましょう。
targetSdkVersion
を P に設定してアプリをビルドすると、
注意が必要なプラットフォームの変更点があります。Android 9 の新機能を実装していない場合でも、一部の変更点のためにアプリの動作に影響が出る、またはアプリがまったく機能しなくなる可能性があります。
表 2 にそのような変更点の一覧と詳細情報へのリンクを示します。
表 2. targetSdkVersion
が 28 に設定されている場合にアプリに影響する主な変更点。
変更 | 概要 |
---|---|
フォアグラウンド サービスの権限 | フォアグラウンド サービスを使用する必要があるアプリは、まず FOREGROUND_SERVICE パーミッションをリクエストする必要があります。これは Normal 権限であるため、リクエストしたアプリに自動で付与されます。この権限がない状態でフォアグラウンド サービスを開始すると、SecurityException がスローされます。 |
Bouncy Castle 暗号のサポートの終了 |
Android 9 では Conscrypt プロバイダの暗号を優先的に使用するため、Bouncy Castle プロバイダの一部の暗号のサポートを終了します。getInstance() への呼び出し
Bouncy をリクエストする
キャッスル プロバイダが NoSuchAlgorithmException エラーを生成する。このエラーを解決するには、
getInstance() でプロバイダを指定する(デフォルトの実装をリクエストします)。
|
Build.serial への直接アクセスの削除
|
Build.serial ID を必要とするアプリは、READ_PHONE_STATE をリクエストする必要があります
その後、Android 9 で追加された新しい Build.getSerial() メソッドを使用します。
|
WebView データ ディレクトリの共有禁止 | 以後、アプリは単一の WebView データ ディレクトリを複数のプロセスで共有できません。WebView、CookieManager、その他の android.webkit パッケージの API を使用するプロセスが複数ある場合は、2 つ目のプロセスが WebView メソッドを呼び出した際にアプリがクラッシュします。 |
アプリのデータ ディレクトリへのアクセスが SELinux によってブロックされる | 各アプリのプライベート データ ディレクトリに対して、アプリ単位の SELinux 制限がついたアプリ単位の SELinux サンドボックスが適用されます。別のアプリのデータ ディレクトリへのパス指定による直接アクセスは、禁止されます。アプリは引き続き、IPC メカニズム( FD。 |
Android 9 を対象とするアプリに関わる動作の変更点の全容については、動作の変更点のドキュメントをご覧ください。
Android 9 で利用可能な新しい機能と API の詳細については、Android 9 の機能と API をご覧ください。