Google Play サービスと Firebase for Android の最小サポート API レベルが 14 に
2016年12月2日金曜日
[この記事は Doug Stevenson、デベロッパー アドボケートによる Android Developers Blog の記事 "Google Play services and Firebase for Android will support API level 14 at minimum" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]
Google Play サービス クライアント ライブラリと Firebase for Android クライアント ライブラリのバージョン 10.0.0 は、Android API レベル 9(Android 2.3、Gingerbread)をサポートする最終バージョンとなります。次にリリースされる予定のバージョン 10.2.0 では、最小サポート API レベルが 9 から 14(Android 4.0.1、Ice Cream Sandwich)に引き上げられる予定です。この変更は、2017 年初めに実施される予定です。
アプリの最小サポート API レベルが 14 以上(通常は、build.gradle の「minSdkVersion」で指定します)であれば、今後リリースされるバージョン 10.2.0 にアップグレードしてもバージョニングの問題は発生しません。しかし、API レベル 14 以下をサポートしているアプリの場合、ビルド時に次のようなエラーが表示されます。
残念ながら、提示されている方法を使っても、古い端末でアプリを実行することはできません。Google Play サービス 10.2.0 以降を使う場合は、以下の選択肢のいずれか 1 つを選ぶ必要があります。
すべての Android 端末の中で、API レベルが 14 より低いものはごく少数です。現在の Android 端末の分布については、こちらをご覧ください。古い端末の多くは、現在は利用されていないはずです。
アプリのユーザーの多くが古い端末を使用している場合は、Google Play の複数 APK のサポート機能を使って、Google Play サービス 10.0.0 を使用する APK を配信することもできます。詳しくは次のセクションで説明します。
上の例では、2 種類のバージョンの Google Play サービス クライアント ライブラリを使ってビルドする、2 つのビルド フレーバーが定義されています。10.0.0 のライブラリで利用できる API のみを呼び出している場合、これで問題なく動作します。10.2.0 で利用できるようになった新しい API を呼び出す必要がある場合、新しい API 呼び出しの互換性ライブラリを作成し、その API を利用できるバージョンのアプリのみに組み込まれるようにします。
フレーバーごとにリリース APK をビルドして、両方を Play Store で公開します。これで、端末は最適なバージョンにアップデートされるようになります。Play Store での複数 APK のサポートの詳細もご覧ください。
Posted by Yuichi Araki - Developer Relations Team
Google Play サービス クライアント ライブラリと Firebase for Android クライアント ライブラリのバージョン 10.0.0 は、Android API レベル 9(Android 2.3、Gingerbread)をサポートする最終バージョンとなります。次にリリースされる予定のバージョン 10.2.0 では、最小サポート API レベルが 9 から 14(Android 4.0.1、Ice Cream Sandwich)に引き上げられる予定です。この変更は、2017 年初めに実施される予定です。
Google Play サービスで Gingerbread と Honeycomb のサポートを終了する理由
Gingerbread プラットフォームは、リリースよりほぼ 6 年が経過しています。多くの Android デベロッパーのアプリでは、すでに Gingerbread のサポートが終了しています。そうすることによって、Android プラットフォームの新しい機能を活用することができ、よりよいアプリを作ることが可能になります。これは、私たちにも当てはまります。今回の変更によって、安定性やスピードが増した一連のツールを Android デベロッパーの皆さんに提供できるようになります。Google Play サービスや Firebase を利用する Android アプリへの影響
バージョン 10.0.0 の Google Play サービスや Firebase は、現在と同様、問題なく利用できます。Gingerbread 端末でも今までと同様に動作します。アプリの最小サポート API レベルが 14 以上(通常は、build.gradle の「minSdkVersion」で指定します)であれば、今後リリースされるバージョン 10.2.0 にアップグレードしてもバージョニングの問題は発生しません。しかし、API レベル 14 以下をサポートしているアプリの場合、ビルド時に次のようなエラーが表示されます。
Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed : uses-sdk:minSdkVersion 9 cannot be smaller than version 14 declared in library [com.google.android.gms:play-services:10.2.0] Suggestion: use tools:overrideLibrary="com.google.android.gms:play_services" to force usage
残念ながら、提示されている方法を使っても、古い端末でアプリを実行することはできません。Google Play サービス 10.2.0 以降を使う場合は、以下の選択肢のいずれか 1 つを選ぶ必要があります。
1. 最小サポート API レベルを 14 に設定する
これが推奨される操作です。Google Play サービスのアップデートを受け取れなくなる API レベルでのサポートを終了するには、アプリの build.gradle で minSdkVersion の値を 14 以上に増やします。この方法でアプリをアップデートして Play Store で公開すると、サポート API レベルより低い端末を使っているユーザーにはアップデートが表示されず、ダウンロードもできません。ただし、その端末を対象として公開されている最新版のアプリを引き続きダウンロードして使用できます。すべての Android 端末の中で、API レベルが 14 より低いものはごく少数です。現在の Android 端末の分布については、こちらをご覧ください。古い端末の多くは、現在は利用されていないはずです。
アプリのユーザーの多くが古い端末を使用している場合は、Google Play の複数 APK のサポート機能を使って、Google Play サービス 10.0.0 を使用する APK を配信することもできます。詳しくは次のセクションで説明します。
2. API レベルが 14 より低い端末をサポートするために複数の APK をビルドする
いくつかの設定やコード管理を行うことによって、複数の APK をビルドできます。そうすると、サポートされる最小 API レベルや Google Play サービスのバージョンが異なる複数の APK を作成できます。これを行うには、Gradle でビルド バリアントを設定します。まず、アプリの以前のバージョンと新しいバージョンについて、ビルド フレーバーを定義します。たとえば、build.gradle に 2 種類のプロダクト フレーバーを定義し、使用する Play サービス コンポーネントに応じて 2 つの異なるコンパイル依存性を作成します。productFlavors { legacy { minSdkVersion 9 versionCode 901 // Min API level 9, v01 } current { minSdkVersion 14 versionCode 1401 // Min API level 14, v01 } } dependencies { legacyCompile 'com.google.android.gms:play-services:10.0.0' currentCompile 'com.google.android.gms:play-services:10.2.0' }
上の例では、2 種類のバージョンの Google Play サービス クライアント ライブラリを使ってビルドする、2 つのビルド フレーバーが定義されています。10.0.0 のライブラリで利用できる API のみを呼び出している場合、これで問題なく動作します。10.2.0 で利用できるようになった新しい API を呼び出す必要がある場合、新しい API 呼び出しの互換性ライブラリを作成し、その API を利用できるバージョンのアプリのみに組み込まれるようにします。
- Play サービスの最新バージョンのみで利用でき、実行する必要がある上位レベルの機能を公開する Java インターフェースを宣言します。
- そのインターフェースを実装する 2 つの Android ライブラリを作成します。「最新」の実装では、必要に応じて新しい API を呼び出します。「以前」の実装では、何もしないか、旧版の Play サービスを使って必要な動作を実装します。インターフェースは両方のライブラリに追加する必要があります。
- 依存関係の「legacyCompile」と「currentCompile」を使って条件付きコンパイルを実行し、各ライブラリをアプリに組み込みます。
- アプリのコードで新しい Play API が必要になる場合は、必ず互換性ライブラリ経由で呼び出します。
フレーバーごとにリリース APK をビルドして、両方を Play Store で公開します。これで、端末は最適なバージョンにアップデートされるようになります。Play Store での複数 APK のサポートの詳細もご覧ください。
Posted by Yuichi Araki - Developer Relations Team