2018年に要求されるtargetSdkVersion(対象APIレベル)を解説します
今まではある程度targetSdkVersionの指定は自由に行うことができました。
しかし、2018年のある時期から指定可能なバージョンの制限がぐーんと高くなります。
Googleからアナウンスされている情報を理解しておき、今後のアプリ開発に役立てましょう!
※targetSdkVersionは、Androidアプリ開発時に指定するものです。どこで設定するのかなどの詳細はこちらを参照してください。
スポンサーリンク
もくじ
Play ConsoleでアップロードするアプリのtargetSdkVersionの要件
Play Consoleでアプリをアップロードする際に要求される対象API レベルは次のようになります。
日付 | 要件 |
2018-08-01 | 新しいアプリをGoogle Playで公開するには、Android 8.0 (API レベル 26)以上をtargetSdkVersionに指定することが必要です。 |
2018-11-01 | 既存のアプリをGoogle Playで更新するには、Android 8.0 (API レベル 26)以上をtargetSdkVersionに指定することが必要です。 |
2019年以降 | 毎年targetSdkVersionの要件が上がります。 新しいAndroidバージョンのリリース後1年以内に、新しいアプリと既存アプリのアップデートでは、適切なAPI レベル以降をtargetSdkVersionに指定することが必要です。 |
今後、targetSdkVersionの要件は、おそらく常に最新またはかなり新しいバージョン以上となることが決まっています。しかし、minSdkVersionは任意のバージョンが指定可能であり古いバージョンのAndroidに対してのアプリを提供できることには変わりはありません。
詳しくは「今後の Google Play でのアプリのセキュリティおよびパフォーマンスの改善について(Google Developers)」を参照してください。
Android 8.0(API レベル 26)未満のアプリはどうなるのか
すでに公開しているアプリの場合は、アップデートが不要であればそのままGoogle Playで公開されます。しかし、targetSdkVersionの要件を満たしていないアプリは制限を受けることになります。
具体的な制限が何であるかは分かっていません。考えられる制限は次の2つです。
- 今までと同様にtargetSdkVersionを満たしていないときの動作をするアプリとなる。
- Google Playで公開されなくなる。
1つ目に記載した制限は次のようなものです。最新のバージョンがリリースされてもtargetSdkVersionを古いままとすることでバージョンアップにともなうソースコードの修正を避けられていました。しかし、最新のバージョンでは特定の機能に関しては正しく動作しない、制限ができるなどの挙動をしていました。この制限を基本としてtargetSdkVersionの要件を上げていくのではないかと考えています。
2つ目に記載した制限は、targetSdkVersionの要件を満たさないアプリは非公開にする、もしくは削除するような扱いとするということです。targetSdkVersionを上げないということは、セキュリティやパフォーマンスに関する適応ができなくなるため、ダウンロードするユーザーに不都合が生じる可能性が上がります。このため、告知後に一定期間をおいて一斉に要件を満たさないアプリを非公開とするとしてもおかしくはないと考えます。ただし、実施するタイミングは数年に1回程度のように長期間かつ少ない回数であると想定しています。
新しいAndroidのバージョンがリリースされたらアプリの対応も検討したほうが良いと言えるでしょう。
Android 8.0対応のアプリにするために必要なことは
「Meet Google Play’s target API level requirement (Android Developers)」で、Google Playの要件を満たすためにtargetSdkVersionを更新する際の重要なポイントを説明しています。ここでは、この内容について触れていきます。
現在のtargetSdkVersionのAPI レベルからAPI レベル 26に上げるなかで、通過するAPI レベルのそれぞれの理解とアプリの対応が必要になります。
Android 5.0(API レベル 21)に対応するための主なポイント
API レベルが21未満の場合は、API レベル 26に対応するためには次の変更点の理解とアプリの対応が必要です。
API レベル 21に対応していないアプリは少ないと思います。次のリンクから必要な情報を取得してください。
- Android 5.0 の動作の変更点(Android Developers)
- Android 4.4 API(Android Developers)
- Android 4.1 APIs(Android Developers)
Android 6.0(API レベル 23)に対応するための主なポイント
API レベルが23未満の場合は、API レベル 26に対応するためには次の変更点の理解とアプリの対応が必要です。
- Runtime Permissions(実行時のパーミッション)
- Dangerous permissions(危険なパーミッション)は、実行時にのみ権限を許可することができる。これらの権限を許可するためには、アプリのUIフローの中でユーザーから同意を得る必要がある。
- 可能であれば、この権限が許可されることを想定したアプリの振る舞いを準備してほしい。
パーミッションは事前にManifest.xmlに記載すれば良かったが、危険なパーミッションの場合は実行時にユーザーから同意を得る必要があるということです。
その他の変更点については「Android 6.0 の変更点(Android Developers)」を参照してください。
Android 7.0(API レベル 24)に対応するための主なポイント
API レベルが24未満の場合は、API レベル 26に対応するためには次の変更点の理解とアプリの対応が必要です。
- DozeとApp Standby
- 省電力機能としてDozeとアプリ スタンバイの2つがAndroid 6.0(API レベル 23)以降から導入されている。
- targetSdkVersionでAPI レベル 23以上を指定しているかどうかに関わらず、Android 6.0以降で実行されるすべてのアプリの動作を管理する。
- DozeとApp Standby Modeでは、次の振る舞いをする
- ネットワークアクセスを制限する
- アラーム、同期、ジョブを遅らせる
- GPSとWi-Fiスキャンを制限する
- 通常の優先順位のFirebase Cloud Messagingのメッセージを制限する
- Permission Changes(パーミッションの変更)
- システムがアプリのプライベートディレクトリへのアクセスを制限する
- アプリの外部にURI「file://」を取り出すとFileUriExposedExceptionを発生させる。アプリの外部でファイルを共有する場合は「FileProvider」を使用すること。
- NDK以外のライブラリのリンクを禁止
- NDK以外のライブラリを動的にリンクできないようになった。自身のソースコードだけでなくサードパーティのライブラリがNDK以外のライブラリにリンクしている可能性がある。
その他の変更点については「Android 7.0 の動作の変更点(Android Developers)」を参照してください。
Android 8.0(API レベル 26)に対応するための主なポイント
API レベルが26未満の場合は、API レベル 26に対応するためには次の変更点の理解とアプリの対応が必要です。
- Background Execution Limits(バックグラウンド実行制限)
- foregroundで実行していないアプリのサービスは次のことが制限される
- Context.startService()が禁止されている状況では例外を投げる
- サービスをforegroundで実行するためには、Service.startForeground()またはContext.startForegroundService()を使わなければならない。
- JobScheduler APIの変更を慎重に確認すること
- Firebase Cloud MessagingがGoogle Play services SDKのバージョン10.2.1以上を必要とする。
- Firebase Cloud Messagingを使用するとき、メッセージ配信がバックグランド実行制限の対象となる。データの同期などでメッセージ受診時にバックグランドの作業が必要な場合、アプリはFire base Job DispatcherやJobIntenterviceを使ってジョブをスケジュールしなければならない。詳細の情報はFirebase Cloud Messagingドキュメントを参照。
- foregroundで実行していないアプリのサービスは次のことが制限される
- Implicit broadcasts(暗黙的なブロードキャスト)
- 暗黙的なブロードキャストが制限されるようになった。バックグランドイベントの処理についてはJobScheduler APIを参照。
- Background Location Limits(バックグラウンド位置情報の制限)
- バックグランドで実行しているアプリは位置情報へのアクセスが制限されるようになった。
- Google Playサービスを搭載した端末では、FusedLocationProviderClientを使って位置情報を取得できる。
- バックグランドで実行しているアプリは位置情報へのアクセスが制限されるようになった。
- Notification Channels(通知のチャンネル)
- 1つのチャンネルに対してそれぞれチャンネルのプロパティを定義する必要がある
- 通知は必ず1つのチャンネルに割り当てる必要がある
- このバージョンではNotificationCompat.Builderをサポートする
- Privacy(プライバシー)
- ANDROID_IDがアプリ署名キーごとに範囲付けされる。
通知のチャンネルについては次の記事が参考になります。
その他の変更点については「 Android 8.0 での動作変更点(Android Developers)」を参照してください。
SDKとライブラリーのチェックと更新
サードパーティSDKの依存関係がAPI レベル26をサポートしていることを確認してください。サポートしていないSDKを使用する場合は、SDKの提供者と協力して課題を解決することを優先してください。
Android Qでは、Android 6.0未満のアプリ起動時に警告が表示される!?
Android Qでは、Android 6.0未満のアプリ起動時に警告が表示される可能性が示唆されています。
やはりというか、Googleが手を売ってきましたね。
更新しないアプリはAPI レベルの対象外でした。しかし、徐々にAPI レベルを更新しないアプリを排除する方向に確実に向かっていると言えるでしょう。
さいごに
駆け足ですが、Googleから公開されている情報をもとに翻訳と少し自身の知識を織り交ぜて解説しました。
知識をつけてから対応するというのも大事ですが、早めにtargetSdkVersionをAPI レベル 26に上げてテストすることで発生したエラーを修正するということを同時に行うことも大事であると考えています。計画と行動はバランスよく行えるといいですね。