Google PlayのtargetSdkVersion新ルールを整理する

2018/04/13

2017年12月に周知されたGoogle Playの新しいルール、そろそろ対応考えなきゃなあ、ということでどんなものか確認してみました。

どんなルール?

Google Playでアプリを公開する場合は最新の Android API レベルをターゲットに指定することが義務づけられるというもの。新規アプリは2018年8月から、アップデートは2018年11月から適用されます。

  • 2018年8月: 新しいアプリでターゲット API レベル 26 以降が必須に
  • 2018年11月: 既存のアプリのアップデートでターゲット API レベル 26 以降が必須に
  • 2019年以降: 毎年 targetSdkVersion の要件が上がる。Android の各リリース後1年以内に、リリースに対応する API レベル以降のターゲットを指定することが義務づけられる

Androidの新しいバージョンが出たら1年以内にターゲットAPIレベルを追従させる必要があるわけですね。

また、ネイティブライブラリを含むアプリには追加のルールがあり、2019年8月からは32ビット版に加えて64ビット版も必須になります。

対応のサイクルは?

近年のOSバージョンアップは以下のスケジュール感でした。

APIレベルバージョンリリース日
23Android 6.02015/10/5
24Android 7.02016/8/23
25Android 7.12016/12/5
26Android 8.02017/8/21
27Android 8.12017/12/5

今後も夏(8月ごろ)と冬(12月ごろ)の年2回バージョンが上がると推測されます。このサイクルを踏まえてアプリ側の対応を考えるのが基本です。

targetSdkVersion を変えるとどうなる?

targetSdkVersion について、<uses-sdk> | Android Developersから抜粋します。

Android は新しいバージョンのリリースに伴って進化しているため、一部の動作や、ときには外観まで変更されることがあります。 しかしプラットフォームの API レベルがアプリで宣言した targetSdkVersion よりも高い場合、システムは互換動作を有効にして、アプリが引き続き想定どおりに動作できるようにします。

これだけだとよくワカランのでもうちょっと整理してみましょう。

例えば、targetSdkVersionが25だと仮定すると

  • 端末のOSがAndroid 7.1 (=API Level 25)以下 : 特に影響なし
  • 端末のOSがAndroid 8.0 (=API Level 26)以上 : API Level 25互換モードで端末が動く

となります。ここでtargetSdkVersionを26に更新すると

  • 端末のOSがAndroid 7.1 (=API Level 25)以下 : 特に影響なし
  • 端末のOSがAndroid 8.0 (=API Level 26) : API Level 26に準拠した動きになる(端末本来の動き)
  • 端末のOSがAndroid 8.1 (=API Level 27)以上 : API Level 26互換モードで端末が動く

となります。つまり、Android 8.0の端末は挙動が変わりうるわけですね。 ここで変わる挙動はAPI Level 26で追加された部分です。

変更箇所はAndroid 8.0 Behavior Changes | Android Developersのようにバージョンごとにまとめられています。

アプリの使っている機能が変更箇所に該当するかどうかをチェックして、必要なら修正、という流れになります。 細かい変更も含めるとかなり多岐に渡るので影響チェックは苦労しそうです。ある程度の割り切りも必要かもしれません。

compileSdkVersionとtargetSdkVersionとminSdkVersion

AndroidのアプリではSDKのバージョンに関連する設定として以下のものが設定できます。

  • compileSdkVersion
    • コンパイル時に使うAndroid SDKのバージョン
    • 変更してもアプリの動作は変化しない
  • targetSdkVersion
    • メインターゲットになるOSのバージョン
    • 変更するとアプリの動作が変わる『可能性』がある
  • minSdkVersion
    • アプリをインストールできる最低のAPIレベル

今回のルールで影響があるのはtargetSdkVersionだけです。

参考URL




関連(するかもしれない)記事


おススメ