AndroidとかiOSとかモバイル多め。その他技術的なことも書いていきます。

targetSdkVersion 26でAndroid 2.3をサポートすることのコストの高さ

今年の11月以降、Google PlayにはtargetSdkVersion26(Android 8.0)以上のアプリしかアップロードできなくなる(新規アプリは8月)。

developers-jp.googleblog.com

それでも状況によってはAndroid 2.3をサポートしなければならない場合がある・・・

しかし、古いAndroidをサポートするためのサポートライブラリは基本的には targetSdkVersion のバージョンと合わせなければならず、 26.0.0からminSdkVersion が14(Android 4.0)になってしまった・・・

それでもAndroid 2.3 をサポートする方法

  • サポートライブラリを使わない
  • サポートライブラリ 25.4.0を使う
  • Android 2.3向けとAndroid 4.0以上向けでビルド分け、2.3向けではサポートライブラリ 25.4.0, 4.0以上向けでは最新のサポートライブラリを使う

の3つが考えられるがどれも非常にコストがかかる。

まず1つ目のサポートライブラリを使わない方法。これはGoogleがサポートライブラリで吸収してくれるはずのAPI差分やバグ修正などの恩恵を全て受けられないことになる。OSバージョンをカバーするテスト工数がかさむし、予期せぬバグが発生することが多々起きることが想像できる・・・(そしてバグ修正もつらそう・・・)

2つ目はサポートライブラリ 25.4.0を使う。これがコスト的には一番ましかもしれない。ただ Googleが推奨するように targetSdkVersion のバージョンと合わないため、こちらでも予期せぬバグが起きうる。個人的には、1つ目よりはまだましなのではないかと信じたい。

3つ目が1番安全で、Android 2.3向けとAndroid 4.0以上向けでビルド分け、サポートライブラリのバージョンを分ける方法。これはバグが1番起きにくいし、全バージョンをサポートライブラリで網羅できる。ただし、サポートライブラリ 26.0.0以上から入るAPI(例えば Android 8.0からの通知チャンネル用コンストラクタ NotificationCompat.Builder(Context context. String title) など) を使うとコードを分けなければならない。終わりゆくAndroid 2.3をサポートするためにそのようなコードを書かなければならないのはかなりつらいし、ビルドが2つになって管理・テストもつらい。

NotificationCompat.Builder  |  Android Developers

もうAndroid 2.3をサポートするのはやめよう

もはやAndroid 2.3をサポートする時代ではないと個人的には思う。

Android 2.3は0.3%しかユーザがおらず、そのユーザをサポートして得られる利益が上記のような対策をとるコストを超える場合はないのではと思う(BtoBtoCで包括的な契約だと話は変わってきそう)。

developer.android.com

Googleの各種ライブラリはAndroid 4.0, 4.1以上が当たり前だし、クックパッドは minSdkVersionを21(Android 5.0)にしている。

techlife.cookpad.com

minSdkVersion 21で開発していきたい・・・!

おわりに

スマートニュースは Android 2.2をサポートしているらしいがどうやってやっているのだろう・・・

speakerdeck.com