MASTG-BEST-0010 最新の minSdkVersion を使用する (Use Up-to-Date minSdkVersion)

build.gradle ファイル内の minSdkVersion が、ユーザーベースとの互換性を維持しながら、アプリの要件に適合する Android プラットフォームの最新バージョンに設定されていることを確保します。

企業はアプリをできるだけ多くのデバイスで利用できるようにしたいため、minSdkVersion を増やすことをためらうことがよくあります。Google は、targetSdkVersion のようにはarrow-up-right、特定の minSdkVersion を強制しませんが、minSdkVersion を低く設定すると、セキュリティに直接影響を及ぼしユーザーを脆弱性にさらしアプリが重要なセキュリティ保護を活用できなくなる ため、その影響を理解することが極めて重要です。

違いを明確にする: targetSdkVersionminSdkVersion

  • targetSdkVersion: アプリが動作するように 設計 された最高 API レベルを定義します。アプリはより低い API レベルでも動作 できます が、必ずしもすべての新しいセキュリティ強化を利用できるわけではありません。

  • minSdkVersion: アプリが動作するように 許可 された最低 API レベルを定義します。多くのセキュリティ機能は、特定の API レベル以上で動作するデバイスでのみ利用できるため、これは極めて重要です。minSdkVersion を低く設定すると、古いデバイスではアプリが これらの保護機能を完全に利用できなくなります

targetSdkVersion を高く設定しても、アプリは最新のセキュリティ強化が 適用されていない 古いデバイスでも動作します。targetSdkVersion=33 (Android 13) だが minSdkVersion=21 (Android 5) に設定すると、何年にもわたる重要なセキュリティアップデートが適用されていない Android 5 デバイスにもアプリをインストールできます。これらの古いデバイス上のマルウェアは、Android Security Bulletinsarrow-up-right に記載されている脆弱性からも明らかなように、アプリレベルのコードだけでは対処できないセキュリティ機能が不足しており、それを悪用する可能性があります。

minSdkVersion を増やすと、アプリを動作できるデバイスの数がわずかに減るかもしれませんが、すべてのユーザーにベースラインレベルの保護 を確保するため、セキュリティを大幅に強化します

よくある誤解

Android 開発において minSdkVersiontargetSdkVersion には多くの誤解があります。Android ドキュメントでは「ターゲットとしている (targeting)」と記載されていますが、実際には「動作している (running on)」という意味です。たとえば、以下があります。

クリアテキストトラフィックをオプトアウトするarrow-up-right: このセクションのガイダンスは、Android 8.1(API レベル 27)以下をターゲットとするアプリにのみ適用されます。Android 9(API レベル 28)以上では、クリアテキストのサポートがデフォルトで無効になっています。

注によると、このガイダンスは API 27 以下をターゲットとする アプリに適用されます。しかし実際には、アプリが API 28 以上をターゲットとしているが、古い Android バージョン (API 28 未満) で動作している場合でも、 明示的に無効にしない限り、クリアテキストトラフィックは引き続き許可されます。開発者は targetSdkVersion を増やすだけでクリアテキストを自動的にブロックすると考えるかもしれませんが、それは正しくありません。

Android プラットフォームの注目すべき改善点の歴史

Last updated