minSdkVersion: その概要と最小Androidバージョンの選択方法

著者: IT Sectr 公開日: 2026-02-08 読了時間: 11 分

minSdkVersion は、アプリケーションをインストールして実行できる最小のAndroid API Levelです。このパラメーターは build.gradle の defaultConfig ブロックで指定され、互換性の下限を定義します。デバイスのAPI Levelが minSdk の値を下回る場合、システムはインストールをブロックし、Google Playはそのデバイスにアプリを表示しません。Android Developers によると、適切な minSdk を選択することは、ユーザーへのリーチと最新APIへのアクセスのバランスを取る上で重要です。

重要なポイント

  • minSdkVersion — アプリインストールの最小API Level、build.gradle で設定
  • Google Play は minSdkVersion より低いAPI Levelのデバイスでアプリを非表示にする
  • カバレッジ minSdk = 26 (Android 8.0) は ~85%のデバイスをカバー、minSdk = 21 は ~97%
  • AndroidX と Jetpack ライブラリを使用すると、低い minSdk で新しいAPIを利用可能
  • lint は minSdk より上のAPI呼び出しを警告 — @RequiresApi または SDK_INT を使用

Androidにおける minSdkVersion とは?

minSdkVersion は、build.gradle 内の整数パラメーターで、アプリインストールの最小Android API Levelを指定します。デバイスのAPI Levelが指定された値を下回る場合、PackageManager がインストールをブロックし、Google Play Store はそのデバイスの検索結果からアプリを非表示にします。minSdkVersion はビルド時に <uses-sdk android:minSdkVersion> タグを介して AndroidManifest.xml に書き込まれ、インストールのたびにチェックされます。

minSdkVersion の値は、ユーザーへのリーチと新しいAPIへのアクセスのトレードオフです。minSdk が低いほど、特に古いAndroidスマートフォンが普及している開発途上地域で、より多くのデバイスがアプリをインストールできます。minSdk が高いほど、必要な下位互換コードが少なくなり、実行時チェックなしでより多くの最新APIが利用可能になります。Android Jetpack および AndroidX ライブラリは、多くの新しいAPIのバックポートを古いAndroidバージョンに提供し、機能を失うことなく低い minSdk を選択できるようにします。

minSdkVersion は開発のすべての段階に影響します:静的解析(lint は警告に minSdk を使用)、依存関係の互換性(ライブラリは独自の minSdk を必要とする場合がある)、テスト(minSdk のデバイスでのテストが必要)、Google Play Console(ユーザーリーチは minSdk に基づいて計算されます)。minSdkVersion の変更はプロジェクト設定において最も重要な決定の一つであり、コード、テスト、ユーザーベースに影響を与えます。

minSdkVersion の指定場所

Build.gradle.kts(Kotlin DSL)はAndroidプロジェクトにおける最新の標準です。minSdk パラメーターはモジュールレベルの defaultConfig ブロックで設定されます。値は異なるビルドタイプやプロダクトフレーバーに対して上書きでき、メインの値を変更せずに低いAPIでテストできます。

kotlin
// build.gradle.kts — minSdk の基本設定
android {
    namespace = "com.example.myapp"
    compileSdk = 36

    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 26      // Android 8.0 Oreo
        targetSdk = 36
        versionCode = 1
        versionName = "1.0.0"
    }

    // 異なるフレーバーに対する minSdk の上書き
    flavorDimensions += "tier"
    productFlavors {
        create("free") {
            minSdk = 26
        }
        create("premium") {
            minSdk = 26
        }
    }
}

この例では、minSdk = 26 は Android 8.0 Oreo に対応します。これは2026年の一般的な値です:Android Studio Distribution Dashboard によると、デバイスの約 ~15% だけを除外します。compileSdk = 36 はすべての Android 16 API へのアクセスを提供し、targetSdk = 36 は最新バージョンの動作変更を含みます。デバッグビルドでは、古いエミュレーターでのテスト用に minSdk を下げることができます。

minSdkVersion の選択方法:要素と戦略

minSdkVersion の選択は、ターゲットユーザー、API要件、ライブラリエコシステムの分析に基づく戦略的な決定です。すべてのプロジェクトに単一の正しい値はありません。2026年には、Android Studio は新しいプロジェクトのベースラインとして minSdk = 26(Android 8.0)を推奨していますが、B2Bアプリケーションやエンタープライズソリューションでは、より低いまたは高い値が許容される場合があります。

minSdkVersion 選択の要素

最初の要素は Distribution Dashboard です。Android Studio は、Google Play のデータに基づいてAPI Levelごとのアクティブデバイス統計を提供し、毎月更新されます。minSdkVersion はターゲット市場のアクティブデバイスの少なくとも90〜95%をカバーする必要があります。アフリカや東南アジアにユーザーがいる国際的なアプリの場合、古いデバイスの割合が高いため、minSdk を 21(Android 5.0)に下げる必要があります。

2番目の要素は 依存関係の要件 です。各ライブラリにはマニフェストで指定された独自の minSdkVersion があります。ライブラリが minSdk 29 を必要とし、アプリが minSdk 26 を必要とする場合、マニフェストマージャーエラーでビルドが失敗します。最新の Google Play Services ライブラリは minSdk 21、Firebase は minSdk 21、ほとんどの Jetpack ライブラリは minSdk 21 または 26、Compose BOM は minSdk 21 です。Compose の場合、最小しきい値は API 21 です。

3番目の要素は 必要なAPI です。アプリの主要機能が特定のレベルからのみ利用可能なAPIを必要とする場合(例:PhotoPicker — API 34、Predicted Navigation — API 35)、minSdk を引き上げる正当な理由になります。ただし、低い minSdk を維持するために、AndroidX バックポート(Activity Result API、NotificationCompat)と実行時チェックの組み合わせがより頻繁に使用されます。

minSdkAndroidバージョンカバレッジ(〜2026年)推奨
215.0 Lollipop97%最大カバレッジ、多くのフォールバックコード
236.0 Marshmallow95%実行時権限がネイティブで利用可能
268.0 Oreo85%推奨ベースラインレベル
2910 Q72%Scoped Storage がネイティブ、テストが少ない
3112 Snow Cone55%ニッチアプリ、最新API

ステップバイステップの選択戦略

ステップ1:Android Studio を開き、File → New Project で、ウィザードの推奨 minSdk を確認します。ステップ2:Android Studio の Distribution Dashboard を確認します(View → Tool Windows → App Inspection → Distribution Dashboard)。ステップ3:プロジェクトの依存関係を分析します — ビルドを実行し、マニフェストマージャーの競合を修正します。ステップ4:どのAPI Level X がバックポートなしで実際に使用されているかを評価します。ステップ5:ターゲットユーザーの90%以上をカバーし、すべての依存関係と互換性のある最小値として minSdk を設定します。

デバイスカバレッジ:API Levelの分布(2026年)

API Level によるデバイス分布 は四半期ごとに変化する動的な指標です。2026年6月時点の Android Studio Distribution Dashboard によると、アクティブなAndroidデバイスの約85%が API 26(Android 8.0)以上、72%が API 29(Android 10)以上、55%が API 31(Android 12)以上で動作しています。中国市場は、多くのHuaweiデバイスに Google Play Services がないため、独自の統計を持っています。

GMSデバイス(Google Mobile Services)はより速く更新されます:メーカーに対する Google Play の必須要件のおかげで、API 31+ の割合は68%に達します。非GMSデバイス(Huawei、Honor、一部の中国ブランド)はより古い分布を持っています:API 31+ の割合は約35%です。アプリが国際市場をターゲットにしている場合は、グローバル統計に依存してください。中国市場をターゲットにしている場合は、非GMSセグメントを考慮してください。

API LevelAndroidバージョングローバルカバレッジ非GMSカバレッジ
21-255.0-6.0~2%~5%
26-288.0-9.0~13%~20%
29-3010-11~15%~25%
31-3312-13~20%~25%
34-3514-15~30%~15%
3616~20%~10%

結論:国際的なアプリの場合、minSdk 26 は最小限の下位互換コストで85%のデバイスをカバーします。発展途上地域にユーザーがいるアプリの場合、minSdk 21(97%カバレッジ)は正当化されますが、レガシーAPIを扱うためにより多くのコードが必要になります。制御されたデバイスフリートを持つエンタープライズアプリの場合は、minSdk 31 を設定してフォールバックコードを完全に排除できます。

下位互換性:AndroidX、lint、@RequiresApi

下位互換性 は、低い minSdkVersion での主な課題です。AndroidX(以前は Support Library)は、最新APIのバックポートを古いAndroidバージョンに提供します:Material Design 用の AppCompatActivity、FragmentManager、Loader、NotificationCompat、PreferenceFragmentCompat など多数のコンポーネント。ネイティブAPIの代わりにAndroidX相当品を使用することが、互換性への第一歩です。

lint(Android Studio の静的アナライザー)は、minSdkVersion より上のAPI呼び出しがないかコードをスキャンします。メソッドが minSdk より高いAPI Level で @RequiresApi でアノテーションされ、チェックなしで呼び出された場合、lint はエラーを強調表示します。警告を抑制するには、メソッドに @SuppressLint("NewApi") アノテーションを付けるか、関数全体に @RequiresApi(Build.VERSION_CODES.TIRAMISU) を使用します。実行時チェック(Build.VERSION.SDK_INT による)は、古いデバイスで新しいAPIを安全に呼び出すための主要なメカニズムです。

kotlin
// 下位互換性の例:PhotoPicker(API 34+)とフォールバック
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity

class ImagePickerActivity : AppCompatActivity() {

    // Activity Result API(AndroidX)— すべてのAPI Levelで動作
    private val pickImageLauncher = registerForActivityResult(
        ActivityResultContracts.GetContent()
    ) { uri ->
        uri?.let { displayImage(it) }
    }

    fun pickImage() {
        // PhotoPicker は API 34 からのみ利用可能
        if (VERSION.SDK_INT >= VERSION_CODES.UPSIDE_DOWN_CAKE) {
            // PhotoPicker の使用(API 34+)
            val intent = android.provider.MediaStore
                .ACTION_PICK_IMAGES
            startActivityForResult(intent, 100)
        } else {
            // フォールバック:GetContent(すべてのバージョンで動作)
            pickImageLauncher.launch("image/*")
        }
    }

    @RequiresApi(VERSION_CODES.UPSIDE_DOWN_CAKE)
    fun usePhotoPickerOnly() {
        // このメソッドはAPIで呼び出せません < 34
        val intent = android.provider.MediaStore
            .ACTION_PICK_IMAGES
        startActivityForResult(intent, 100)
    }
}

ImagePickerActivity クラスは、3つのレベルの下位互換性を示しています。AndroidX の Activity Result API はすべてのAPI Levelで機能するため、基本的な画像選択は minSdk に依存しません。PhotoPicker(ACTION_PICK_IMAGES)は API 34 からのみ利用可能で、SDK_INT チェックの下で GetContent へのフォールバック付きで呼び出されます。usePhotoPickerOnly メソッドは @RequiresApi でマークされています — lint はチェックなしでの呼び出しを許可しません。AndroidX の AppCompat は、テーマ、フラグメント、アニメーションを OS バージョンに自動的に適応させます。

ライブラリとモジュールにおける minSdkVersion

ライブラリ(AAR、JAR)にも、マニフェストで指定された minSdkVersion があります。ライブラリを接続する際、Gradle は互換性をチェックします:ライブラリの minSdk がアプリの minSdk より高い場合、ビルドはエラーで失敗します。公開ライブラリの場合、消費者を制限しないように、可能な限り低い minSdk(ほとんどの場合21)を指定することをお勧めします。ライブラリが API 29+ を必要とする場合、約28%の潜在的なユーザーを失います。

マルチモジュールプロジェクト では、モジュールごとに異なる minSdkVersion 値を設定できます。たとえば、:core:network モジュールは minSdk 26 を持ち、:feature:camera モジュールは minSdk 29(特定の要件を持つ CameraX のため)を持つことができます。Google Play は、メインの :app モジュールの minSdk がすべての依存モジュールの minSdk 以下であることを要求します。実際には、同じアプリのすべてのモジュールは、メンテナンスを容易にするために通常同じ minSdk を持ちます。

kotlin
// build.gradle.kts — 低い minSdk のライブラリモジュール
plugins {
    id("com.android.library")
    id("org.jetbrains.kotlin.android")
}

android {
    namespace = "com.example.mylibrary"
    compileSdk = 36

    defaultConfig {
        minSdk = 21  // 最大カバレッジのための最小
        targetSdk = 36
    }
}

dependencies {
    // AndroidX Core — minSdk 21、バックポートを追加
    implementation("androidx.core:core-ktx:1.15.0")
    implementation("androidx.appcompat:appcompat:1.7.0")
}

minSdk = 21 のライブラリモジュールは97%のデバイスと互換性があり、消費者を制限しません。ライブラリが21より上のAPIを使用する場合、開発者は実行時チェックを追加するか、関連するメソッドに @RequiresApi を指定する必要があります。AndroidX Core KTX(minSdk 21)は、Context、Bundle、Locale およびその他のシステムクラスのバックポートを提供し、ライブラリが低い minSdk を維持できるようにします。

minSdkVersion 選択における一般的な間違い

minSdk 選択における間違い は、数千のインストールまたは数週間の追加開発のコストがかかる可能性があります。最初の一般的な間違いは、Distribution Dashboard を分析せずにプロジェクトテンプレートから minSdk をコピーすることです。多くの開発者は、Android Studio テンプレートから minSdk = 21 のままにしていますが、minSdk 26 で自社のユーザーには十分であり、コード内の SDK_INT チェックの数を減らせる場合があります。

2番目の間違いは、市場を考慮せずに minSdk が高すぎる ことです。国際的なアプリに minSdk = 31(Android 12)を設定すると、約45%のデバイスを失います。スタートアップや大量ユーザー向けアプリにとって、これは災害です。minSdk を引き上げる前に必ず Distribution Dashboard を確認し、不明な場合は Google Play Console で A/B テストを使用してください。

3番目の間違いは 依存関係の minSdk を無視する ことです。新しいライブラリを追加するときは、ドキュメントまたはPOMファイルでその minSdk を確認してください。Firebase ML Kit は minSdk 21 を必要とし、一部のカスタムカメラライブラリは minSdk 29 を必要とします。新しいライブラリが原因で本番環境でマニフェストマージャーが失敗した場合、修正に数日かかる可能性があります。

kotlin
// 例:実行時API互換性チェック
fun checkFeatureAvailability(): Boolean {
    // 典型的な間違い — SDK_INT をチェックせずにAPIを呼び出す
    return when {
        VERSION.SDK_INT >= VERSION_CODES.UPSIDE_DOWN_CAKE -> {
            // API 34+ — PhotoPicker を使用
            true
        }
        VERSION.SDK_INT >= VERSION_CODES.Q -> {
            // API 29-33 — MediaStore を使用
            true
        }
        else -> {
            // API < 29 — ACTION_GET_CONTENTを使用
            true
        }
    }
}

API Level チェックの正しいアーキテクチャは、minSdk から compileSdk までのすべての可能な値をカバーする範囲を持つ when 式です。主要なルール:Level X のAPI呼び出しは、minSdk から X までのAPI Levelを持つすべてのデバイスに対して VERSION.SDK_INT チェックで保護する必要があります。lint は未チェックの呼び出しを検出するのに役立ちますが、動的コードの完全なカバレッジを保証することはできません。

よくある質問

Androidにおける minSdkVersion とは?

minSdkVersion は、アプリをインストールできる最小のAndroid API Levelです。build.gradle の defaultConfig ブロックで指定します。デバイスのAPI Levelが minSdk を下回る場合、システムはインストールをブロックし、Google Play はそのデバイスにアプリを表示しません。minSdk はユーザーリーチに影響します:minSdk = 26 は ~85%のデバイスをカバー、minSdk = 21 は ~97%をカバーします。

新しいプロジェクトの minSdkVersion を正しく選択するには?

minSdkVersion は、Android Studio の Distribution Dashboard 統計とターゲットユーザーに基づいて選択します。マスアプリの場合は、minSdk 26(Android 8.0)が推奨されます — ~85%のデバイスをカバーします。B2Bアプリの場合は、minSdk 31(Android 12)を設定できます。使用するすべてのライブラリが選択した minSdk をサポートしていることを確認することが重要です。Compose アプリの場合、最小しきい値は API 21 です。

低い minSdkVersion で新しいAPIを使用するには?

新しいAPIは、バックポート付きの AndroidX(AppCompat、Core KTX、Activity Result API)を介して、またはフォールバックコード付きの Build.VERSION.SDK_INT 実行時チェックを介して、低い minSdkVersion で使用できます。@RequiresApi アノテーションは、メソッドが特定のAPI Levelを必要とすることを lint に伝えます。AndroidX Material Components はUIコンポーネントの下位互換性も提供します。チェックがないと、アプリは NoSuchMethodError でクラッシュします。

ライブラリが私のものより高い minSdk を必要とする場合はどうなりますか?

ライブラリの minSdkVersion がアプリより高い場合、Android Studio はビルドエラーを表示します:Manifest merger failed。解決策は、アプリの minSdk をライブラリのレベルまで引き上げるか、より低い minSdk の代替品を見つけるか、ラッパーを使用することです。ほとんどの Jetpack ライブラリは minSdk 21 または 26 です。Firebase ML Kit は minSdk 21、CameraX は minSdk 21 を必要とします。

公開後に minSdkVersion を変更できますか?

公開後に minSdkVersion を引き上げることは可能ですが、古いデバイスのユーザーを失う可能性があります。一度に1〜2 API Level ずつ minSdk を引き上げ、Google Play Console でアクティブデバイスの統計を分析することをお勧めします。minSdkVersion を下げることは技術的に可能ですが、新しい minSdk より上のAPI呼び出しがないかコードを確認する必要があり、コードの一部を書き直す必要がある場合があります。

まとめ

  • minSdkVersion — アプリインストールの最小API Level、build.gradle の重要な互換性パラメーター
  • 範囲 minSdk = 21 は97%のデバイスをカバー、minSdk = 26 は85%、minSdk = 31 は55%
  • AndroidX と Jetpack ライブラリは古いバージョンで新しいAPIの下位互換性を提供
  • lint は minSdk より上のAPI呼び出しを警告 — @RequiresApi と SDK_INT if チェックを使用
  • Google Play はインストール時に minSdk をチェックし、互換性のないデバイスをフィルタリング
  • 選択 minSdk は Distribution Dashboard、依存関係要件、ターゲット市場に基づくべき
  • 公開後の minSdk 引き上げ はユーザー損失につながる — 変更前に統計を分析

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください