targetSdkVersion 26でAndroid 2.3をサポートすることのコストの高さ
今年の11月以降、Google PlayにはtargetSdkVersion26
(Android 8.0)以上のアプリしかアップロードできなくなる(新規アプリは8月)。
それでも状況によっては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で包括的な契約だと話は変わってきそう)。
Googleの各種ライブラリはAndroid 4.0, 4.1以上が当たり前だし、クックパッドは minSdkVersionを21(Android 5.0)にしている。
minSdkVersion 21で開発していきたい・・・!
おわりに
スマートニュースは Android 2.2をサポートしているらしいがどうやってやっているのだろう・・・