AndroidアプリのAndroidバージョンサポート基準を定めました

こんにちは、Androidエンジニアの syarihu です。

当社が提供するお金の見える化アプリ「マネーフォワード ME」のAndroidアプリ版では、2020年4月下旬にリリースのバージョン13.2.0からAndroidの最低動作バージョンをAndroid 6.0(API Level 23)にすることになりました。
対象のAndroid OSでAndroidアプリ版「マネーフォワード ME」を利用してくださっているユーザー様には重要なお知らせとしてすでに表示されていますが、今後はAndroid 6.0以上の端末にのみ最新のアップデートが配信されます。

今回のマネーフォワード MEの最低動作バージョンの引き上げを機に、当社で提供するAndroidアプリについてminSdkVersion(サポートするAndroid OSの最低バージョン)とtargetSdkVersion(アプリのターゲットとなるAndroid OSのバージョン)を判断する際の基準を社内で統一しました。

Android OSは毎年アップデートされるため、バージョンが増えるごとにサポートコストが増していきます。
AOSP(Android Open Source Project)によるAndroid OSのサポート(セキュリティアップデートなども含む)も古いAndroid OSには提供されません。
minSdkVersionを古いままにしておくことはセキュリティ面においても良くないため、minSdkVersionは定期的な見直しが必要だと考えています。
また、新規でAndroidアプリを提供する場合もこういったAndroid OSのサポート基準が定められていることでminSdkVersionを決めやすいため、そういった目的から今回Androidバージョンのサポート基準を定めることにしました。

minSdkVersionを上げることはプロダクトの利用ユーザーによって影響が異なるため、minSdkVersionを揃えるのではなく見直しをするタイミングや観点などの基準を揃えるだけにとどめて、実際に引き上げを行う判断は各プロダクトに任せるというスタイルをとりました。
会社全体で基準を揃えることで、引き上げを行った際に調査した内容などを知見として溜めておくことができたり、社内のAndroidエンジニア間で連携をとることが容易になるため、こういった基準を定めることは大きなメリットがあります。

本記事では、当社で定めたAndroidアプリのAndroidバージョンサポート基準についてご紹介します。

 

targetSdkVersionを上げる基準

targetSdkVesrionは、アプリのターゲットとなるAndroid OSのバージョンです。新しいAndroid OSでの新機能を使いたい場合はこのバージョンを上げる必要があります。宣言したバージョンよりも利用するAndroid端末のOSバージョンが高い場合はシステムは互換動作を有効にして、アプリが動作できるようにするため、バージョンを上げなければ動作しないわけではありません。
最新のAPIレベルをターゲットにすることで、セキュリティやパフォーマンスを大幅に向上させることができることなどの理由から2018年11月以降、Play Consoleからアプリのアップデートを配信するにはPlay Consoleが要求するAPIレベルの要件を満たさなければAPKを送信できなくなりました。
しかし、Play Consoleが要求する対象APIレベルの要件は毎年増加するため、要件に合わせてアプリのtargetSdkVersionも上げる必要があります。たとえば、2019年8月1日以降は新規アプリはAndroid 9.0(API Level 28)以上をターゲットとする必要があり、2019年11月1日以降はアプリのアップデートでもAndroid 9.0(API Level 28)以上を対象とする必要がありました。

Play Consoleのヘルプを参考にすると、APIレベルの要件が上がるのは新規アプリは毎年8月の最初の営業日、アプリのアップデートは毎年11月の最初の営業日です。
そのため、2020年では2020年8月3日以降は新規アプリ、2020年11月2日以降はアプリのアップデートでAndroid 10(API Level 29)以上をターゲットとする必要があります。

Play Consoleの要件として決められているため、会社として基準を定めなくてもバージョンを上げなければなりませんが、Play Consoleのヘルプに記載されているAPI Levelの最新の要件を社内のAndroidアプリのtargetSdkVersionの基準としました。

 

minSdkVesrion

minSdkVersionは、アプリがサポートするAndroid OSの最低バージョンです。
上位のAndroid OSから追加された機能などを使っている可能性があるため、このバージョンよりも下のAndroid OSではアプリをインストールすることはできません。アプリをインストールすることができなければ、その分アプリを使える端末も減ってしまうため、どのバージョンまでAndroid OSをサポートするかの判断は難しいところです。
targetSdkVersionは毎年上がるためサポートしなければならないバージョンが毎年増えていきます。そのため、minSdkVersionをそのままにしておくとサポートしなければならないAndroid OSのバージョンの幅が広がります。
古いAndroidバージョンの端末では、端末が劣化していったり端末自体も出回らなくなるため、古くなるほどバージョン固有の問題や端末固有の問題が発生した際の対応が困難になり、検証のコストやユーザーサポートを行うコストが徐々に増えていきます。
AOSPよるAndroid OSのサポートもAndroid OSが古くなるにつれて提供されなくなっていくため、minSdkVersionを古いままにしておくことはコスト面だけでなくセキュリティ面においても良くありません。
そのため、minSdkVersionは定期的な見直しが必要だと考えています。
そこで、マネーフォワードが提供するAndroidアプリでは、minSdkVersionを定期的に見直す基準を定め、基準を満たしている場合はminSdkVersionを上げる検討を行うことにしました。
検討としているのは、基準を満たしていたら必ず上げるルールにしてしまうとアプリによっては売上やユーザーなどに大きく影響する可能性があるため、あくまでminSdkVersionを上げるための判断材料としてこの基準を使うことにしています。

新規アプリを作る際の推奨バージョン

新規でアプリを作る場合のminSdkVersionの推奨バージョンは API Level 23(Android 6.0)以上としました。
AndroidのセキュリティパッチはAndroid 7.xのサポートは2019年10月に終了していますが、Android OS自体のバージョンシェアなども鑑みてAndroid 6.0が妥当だと判断して推奨バージョンをAndroid 6.0以上としています。

既存アプリのminSdkVersionを見直す基準

targetSdkVersionはAPI要件が存在しますが、minSdkVersionは2020年4月現在ではそういった要件が存在しないため、いつ下位のバージョンのサポートを切るのかは開発者が決めることになります。
そこで、マネーフォワードが提供するAndroidアプリのminSdkVersionを見直す基準を定めました。
これらの基準を満たしている場合はminSdkVersionを見直す検討を行い、実際にminSdkVersionを上げる判断は各プロダクトにおいて行います。
ここでは、minSdkVersionを見直す基準を3つの観点で説明します。

対象アプリのアクティブデバイスのサポートバージョンのシェアが3%を下回っている

minSdkVersionを上げる主な理由は開発・運用の効率化やサポートコストの削減のためです。しかし、minSdkVesrionを上げることで対象外となった下位バージョンのAndroid OSにはminSdkVesrionを上げた以降に配信されるアプリの最新のアップデートを提供できなくなります。
また、サポート対象外となった下位バージョンのAndroid OS向けに配信されていたアプリに何らかの致命的な不具合があった場合にも、不具合を修正したアプリを提供できなくなってしまいます。
このような問題によるユーザーへの影響を最小限に抑えるため、当社ではアクティブデバイスのサポートバージョンの見直し基準を3%としました。

マネーフォワードが提供するAndroidアプリで2020年4月現在一番規模の大きいマネーフォワードMEでは、過去にもminSdkVesrionの引き上げを行っており、その際にも3% ~ 5%程度を目安として見直しを行いました。
その実績から、3%程度であればユーザーへの影響を最小限に抑えられるだろうという判断で3%としています。

サポートバージョンを上げることにより機能面や開発効率で大きなメリットがある

サポートバージョンのシェアが3%を下回っていたとしても、機能面や開発効率にあまり影響がなければ無理して上げる必要はありません。
そこで、minSdkVersionを上げる前と上げたあとで機能面や開発効率にどのような違いがあるのかを比較し、判断します。
ここでは詳しく解説はしませんが、社内の情報共有サービスとして利用してるesaにminSdkVersionを上げることでどういった対応メリットがあるのか調査した結果をAPIレベルごとに分けて情報をまとめています。
こうすることで、minSdkVersionを上げることになった際にプロダクトごとに個々で調べる必要はなく、社内に知見を溜めてminSdkVersionを上げる判断をしやすくなります。

脆弱性があるなどのセキュリティリスクがある

例えばAndroid 4.3ではWebView周りに脆弱性があったり、Android 4.4ではChromiumベースのWebViewにはなりましたがバージョンが固定されているため更新はされず、何らかの脆弱性があった場合に対応できないという問題があります。
こういった下位バージョンでのセキュリティリスクが出てきた場合にはminSdkVersionを上げる大きな理由になります。
当社ではそういったAndroidの最新情報を社内のAndroidチャンネルに共有し、いち早く対応できるようにしています。

minSdkVersionの引き上げによりサポート対象外となったAndroid OSについて

minSdkVersionを引き上げた新しいアプリのリリースを行ったあと、以前のAPKをどう扱うのかによって変わります。
以前のAPKを保持しておくと、サポート対象外となったAndroid OSでは完全にインストールできないわけではなく、新しいAPKと古いAPKが同時に配信され続けます。新規のインストールについても古いAPKが配信され続けている限りはサポート対象外のAndroid OSでも新規にインストールできます。
また、定期購入サービスはサポートを切っても提供者側から意図的に定期購入を解除しない限りは継続して課金され続けます。
そのため、サポートを切ったからといって直ちにアプリが利用できなくなるということはありません。

Play Consoleでは以前のAPKを無効にできます。もし以前のAPKを無効にした場合は、サポートを切ったバージョンで配信できるAPKが無いため、新規インストールもできなくなります。
当社ではminSdkVersionを上げてすぐは以前のAPKを保持しておき、シェアがほとんど無くなった時点で古いAPKを無効にするなど段階的に対応することでユーザーへの影響が最小限になるようにしています。

 

おわりに

今回はマネーフォワードのAndroidアプリにおけるAndroidバージョンのサポート基準について紹介しました。
会社として基準を決めておくことは、minSdkVersionを上げなければ厳しい状況になってきた際に意思決定者への説明がしやすくなりますし、新規で何かAndroidアプリを開発することになった際にも基準となるのでとても有効です。
当社ではマネーフォワード MEのminSdkVersionを上げることを機に全社でサポート基準を決めることにしましたが、サポート基準を決めていないという会社のみなさまはサポート基準を決めてみてはいかがでしょうか。

 

当社アプリのminSdkVesrion

参考情報として、当社が提供するアプリのうちいくつかのアプリをピックアップしてminSdkVesionを載せておきます。
これは2020年4月現在の情報で、今後変わる可能性があることにご注意ください。

マネーフォワードでは、エンジニアを募集しています。
ご応募お待ちしています。

【採用サイトのご案内】
マネーフォワード採用サイト
Wantedly

【プロダクトのご紹介】
お金の見える化サービス 『マネーフォワード ME』 iPhone,iPad Android

ビジネス向けバックオフィス向け業務効率化ソリューション 『マネーフォワード クラウド』

おつり貯金アプリ 『しらたま』

お金の悩みを無料で相談 『マネーフォワード お金の相談』

だれでも貯まって増える お金の体質改善サービス 『マネーフォワード おかねせんせい』

金融商品の比較・申し込みサイト 『Money Forward Mall』

くらしの経済メディア 『MONEY PLUS』

本業に集中できる新しいオンライン融資サービス 『Money Forward BizAccel』

Pocket